diff --git a/bsp/tms320f28379d/.config b/bsp/tms320f28379d/.config
index 2ef26e73e3f3a3887b07042cd930a5d3580ba567..8381d9cd6da48edc1de272c5a40632bd1a42bc93 100644
--- a/bsp/tms320f28379d/.config
+++ b/bsp/tms320f28379d/.config
@@ -84,29 +84,30 @@ CONFIG_RT_USING_COMPONENTS_INIT=y
#
# Command shell
#
-# CONFIG_RT_USING_FINSH is not set
+CONFIG_RT_USING_FINSH=y
+CONFIG_FINSH_THREAD_NAME="tshell"
+CONFIG_FINSH_USING_HISTORY=y
+CONFIG_FINSH_HISTORY_LINES=5
+# CONFIG_FINSH_USING_SYMTAB is not set
+# CONFIG_FINSH_USING_DESCRIPTION is not set
+# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
+CONFIG_FINSH_THREAD_PRIORITY=6
+CONFIG_FINSH_THREAD_STACK_SIZE=4096
+CONFIG_FINSH_CMD_SIZE=80
+# CONFIG_FINSH_USING_AUTH is not set
+# CONFIG_FINSH_USING_MSH is not set
#
# Device virtual file system
#
-CONFIG_RT_USING_DFS=y
-CONFIG_DFS_USING_WORKDIR=y
-CONFIG_DFS_FILESYSTEMS_MAX=2
-CONFIG_DFS_FILESYSTEM_TYPES_MAX=2
-CONFIG_DFS_FD_MAX=16
-# CONFIG_RT_USING_DFS_MNTTABLE is not set
-# CONFIG_RT_USING_DFS_ELMFAT is not set
-CONFIG_RT_USING_DFS_DEVFS=y
-# CONFIG_RT_USING_DFS_ROMFS is not set
-# CONFIG_RT_USING_DFS_RAMFS is not set
-# CONFIG_RT_USING_DFS_UFFS is not set
-# CONFIG_RT_USING_DFS_JFFS2 is not set
+# CONFIG_RT_USING_DFS is not set
#
# Device Drivers
#
CONFIG_RT_USING_DEVICE_IPC=y
CONFIG_RT_PIPE_BUFSZ=512
+# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
CONFIG_RT_USING_SERIAL=y
CONFIG_RT_SERIAL_USING_DMA=y
CONFIG_RT_SERIAL_RB_BUFSZ=64
diff --git a/bsp/tms320f28379d/.cproject b/bsp/tms320f28379d/.cproject
index a4aacf5b46b6baffc3d83827bb6f4841192960b4..3641f26b27df61af8b513bd52f6f0c20dcaef182 100644
--- a/bsp/tms320f28379d/.cproject
+++ b/bsp/tms320f28379d/.cproject
@@ -32,12 +32,13 @@
-
+
+
@@ -83,7 +84,7 @@
-
+
diff --git a/bsp/tms320f28379d/.project b/bsp/tms320f28379d/.project
index 52f4b72a6c34b539e503e596762103b9dcbe74e0..c35958f7269c8e4d6693de25b053e55606548820 100644
--- a/bsp/tms320f28379d/.project
+++ b/bsp/tms320f28379d/.project
@@ -40,6 +40,11 @@
2
PARENT-2-PROJECT_LOC/libcpu/ti-dsp/c28x
+
+ finsh
+ 2
+ PARENT-2-PROJECT_LOC/components/finsh
+
DeviceDrivers/serial.c
1
diff --git a/bsp/tms320f28379d/.settings/org.eclipse.core.resources.prefs b/bsp/tms320f28379d/.settings/org.eclipse.core.resources.prefs
index 7fca5cb12c22d86d88c90b0c769d6832a4c44f65..71b8e9637ebbdec397df999d9529b15b37c80333 100644
--- a/bsp/tms320f28379d/.settings/org.eclipse.core.resources.prefs
+++ b/bsp/tms320f28379d/.settings/org.eclipse.core.resources.prefs
@@ -11,6 +11,8 @@ encoding//Debug/c28x/subdir_rules.mk=UTF-8
encoding//Debug/c28x/subdir_vars.mk=UTF-8
encoding//Debug/drivers/subdir_rules.mk=UTF-8
encoding//Debug/drivers/subdir_vars.mk=UTF-8
+encoding//Debug/finsh/subdir_rules.mk=UTF-8
+encoding//Debug/finsh/subdir_vars.mk=UTF-8
encoding//Debug/libraries/common/source/subdir_rules.mk=UTF-8
encoding//Debug/libraries/common/source/subdir_vars.mk=UTF-8
encoding//Debug/libraries/headers/cmd/subdir_rules.mk=UTF-8
diff --git a/bsp/tms320f28379d/README.md b/bsp/tms320f28379d/README.md
index 507fdbc0f9a33f4445405da8443e9f6888914153..770fd4491f9e0435684629de3b2daf7e97b41bb8 100644
--- a/bsp/tms320f28379d/README.md
+++ b/bsp/tms320f28379d/README.md
@@ -4,12 +4,16 @@
## 1. 简介
TMS320F28379D BSP 基于 C2000 Delfino MCU F28379D LaunchPad 开发套件开发。
-TMS320F28379D 是一款功能强大的 32 位浮点微控制器单元 (MCU),针对高级闭环控制应用而设计,例如工业驱动器和伺服电机控制、太阳能逆变器和转换器、数字电源、电力输送以及电力线通信。包括如下硬件特性:
+TMS320F28379D 是一款功能强大的 32 位浮点微控制器单元 (MCU),针对高级闭环控制应用而设计,例如工业驱动器和伺服电机控制、太阳能逆变器和转换器、数字电源、电力输送以及电力线通信。
+
+![launch-28379d](figures/launch-28379d.png)
+
+包括如下硬件特性:
| 硬件 | 描述 |
| -- | -- |
|芯片型号| TMS320F28379D |
-|多核 CPU| 两个 TMS320C28x 32 位 CPU
+|多核 CPU| 两个 TMS320C28x 32 位 CPU |
|| 两个可编程控制律加速器 (CLA) |
|主频| 200MHz |
|CLA 频率| 200MHz |
@@ -17,43 +21,88 @@ TMS320F28379D 是一款功能强大的 32 位浮点微控制器单元 (MCU),
|片内SRAM| 204kB |
|片内Flash| 1MB |
+F28379D LaunchPad 板载资源如下:
+* USB 调试和下载接口通过电气隔离的高速 XDS100v2 调试器实现,同时包含虚拟串口功能
+* TMS320F28379D CPU
+* 两个 LED
+* 设备复位按钮
+* 易于使用的引出引脚,用于调试或用作扩展板的接口
+* 双 5V 正交编码接口
+* 带集成收发器的 CAN 接口
+* 拨码开关用于启动模式选择
+* 差分放大器向差分模式 ADC 提供 16 位模式的缓冲信号
+* 可选的 SMA 连接点
+* 四个 Sigma-Delta 解调器输入到 BP 接口
+
## 2. 编译说明
+TMS320F28379D 程序的编译和下载要使用的是 TI 官方提供的 Code Composer Studio,TMS320F28379D 至少需要 CCS6.0 以上的版本才能正常编译调试。本 BSP 在 CCS7/CCS8 版本上测试通过,其他版本未做测试。可以在 TI 的官方站点上下载最新版本的 CCS。[CCS 官方下载站点][3]
+### 2.1 导入工程
+首先打开 Code Composer Studio,点击 Project -> Import CCS Projects...
+
+![import](figures/import.png)
+
+在打开的对话框中,点击 Select search -> directory 右边的 Browse... 选择 TMS320F28379D BSP 所在文件夹,如图所示。选择完成后点击 Finish 完成导入。
+
+![import_dia](figures/import_dia.png)
+
+### 2.2 编译工程
+使用 CCS 内置的 C 编译器可以进行工程的编译,本文使用的是 Code Composer Studio 8.1.0 和 TI v18.1.3.LTS 编译器的组合。
+
+导入工程后,在右边的 Project Explorer 列表里可以看到刚刚导入的 rt-thread 工程,右键点击,在弹出的菜单中选择 Build Project 即可开始编译。
-编译使用 Code Composer Studio,在 Code Composer Studio 8.1.0 使用 TI v18.1.3.LTS 编译器已测试编译通过。
+![build](figures/build.png)
## 3. 烧写及执行
-连接开发板电源后,使用 CCS 中的烧写功能可直接通过板载 XDS100v2 仿真器烧写并执行。在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息:
+编译完成后,可以开始下载和调试。把开发板和电脑通过 Mini-USB 线连接,使用 CCS 中的烧写功能可直接通过板载 XDS100v2 仿真器烧写并执行。
+
+![debug_as](figures/debug_as.png)
+
+在右边的 Project Explorer 的列表中右键点击 rt-thread 工程,在弹出的菜单中选择 Debug As -> 1 Code Composer Debug Session。
+
+![launching](figures/launching.png)
+
+在弹出的 Launching Debug Session 对话框中可以选择要调试的 CPU 核和 CLA 核,这里我们只选择 C28xx_CPU1,点击 OK 开始下载和调试。
+
+下载完成后,CCS 将进入调试模式,可以选择继续运行、单步调试、复位等操作。
+
+退出 CCS 调试模式,在终端工具里打开相应的串口(115200-8-1-N),按下板子上的复位按钮执行复位操作后,可以看到 RT-Thread 的输出信息:
```bash
\ | /
- RT - Thread Operating System
/ | \ 4.0.1 build Feb 21 2019
2006 - 2019 Copyright by rt-thread team
+finsh >
```
-## 4. 驱动支持情况及计划
+## 4. 注意事项
+
+* 由于当前还暂未编写 Scons 编译系统对 CCS 开发环境的支持,所以在使用 env 中的 menuconfig 进行配置后,如果添加了新的组件或软件包,需要手动在 CCS 中添加相应的 C 源文件和头文件。
+
+## 5. 驱动支持情况及计划
| 驱动 | 支持情况 | 备注 |
| ------ | ---- | :------: |
| CPU Timer | 支持 | |
| GPIO | 支持 | |
-| SCI | 支持 | SCIA |
-| ePWM | | 预计2019年3月支持 |
-| ADC | | 预计2019/Q2支持 |
+| SCI | 支持 | SCIA/B/C |
+| ePWM | | |
+| ADC | | |
| DAC | | |
| I2C | | |
| SPI | | |
| CAN | | |
| eCAP | | |
-## 5. 联系人信息
+## 6. 联系人信息
维护人:xuzhuoyi < xzy476386434@vip.qq.com >
-## 6. 参考
+## 7. 参考
* [C2000 Delfino MCU F28379D LaunchPad 开发套件][1]
* TMS320F28379D [相关技术文档][2]
[1]: http://www.ti.com.cn/tool/cn/launchxl-f28379d
[2]: http://www.ti.com.cn/product/cn/tms320f28379d/technicaldocuments
+ [3]: http://processors.wiki.ti.com/index.php/Download_CCS#Download_the_latest_CCS
diff --git a/bsp/tms320f28379d/applications/application.c b/bsp/tms320f28379d/applications/application.c
index cecd70fa394c79ade72a682d855d826859fc6d5b..5c7b769a4da93fefbd3cf48c38f6e310ce372602 100644
--- a/bsp/tms320f28379d/applications/application.c
+++ b/bsp/tms320f28379d/applications/application.c
@@ -12,11 +12,15 @@
#include
#include
+#ifdef RT_USING_FINSH
+#include "shell.h"
+#endif
+
void rt_init_thread_entry(void* parameter)
{
- /* initialization RT-Thread Components */
- rt_components_init();
-
+#ifdef RT_USING_FINSH
+ finsh_system_init();
+#endif
}
int rt_application_init()
diff --git a/bsp/tms320f28379d/drivers/board.c b/bsp/tms320f28379d/drivers/board.c
index 432b5df2599659f756074bcaaace5afc331cdc22..b83cb7a96698b8bd28c5ecdd7cc7fb3028342aa9 100644
--- a/bsp/tms320f28379d/drivers/board.c
+++ b/bsp/tms320f28379d/drivers/board.c
@@ -13,15 +13,23 @@
#include "drv_sci.h"
#include "F28x_Project.h"
+extern rt_uint32_t rt_thread_switch_interrupt_flag;
+
extern interrupt void RTOSINT_Handler();
+void trap_rtosint()
+{
+ if(rt_thread_switch_interrupt_flag)
+ asm(" trap #16");
+}
+
/**
* This is the timer interrupt service routine.
*
*/
interrupt void cpu_timer2_isr(void)
{
- CpuTimer2Regs.TCR.all = 0x8000;
+ CpuTimer2Regs.TCR.all = 0xC000;
/* enter interrupt */
rt_interrupt_enter();
@@ -31,7 +39,7 @@ interrupt void cpu_timer2_isr(void)
}
/**
- * This function will initial STM32 board.
+ * This function will initial TMS320F28379D board.
*/
void rt_hw_board_init()
{
@@ -68,4 +76,5 @@ void rt_hw_board_init()
#ifdef RT_USING_CONSOLE
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
+ rt_interrupt_leave_sethook((void (*)(void))trap_rtosint);
}
diff --git a/bsp/tms320f28379d/drivers/drv_sci.c b/bsp/tms320f28379d/drivers/drv_sci.c
index ae0390d1bf0d33045471bfcdaad70c96c0cf2661..0920d382f522462569b15f55a429b01e6f9df041 100644
--- a/bsp/tms320f28379d/drivers/drv_sci.c
+++ b/bsp/tms320f28379d/drivers/drv_sci.c
@@ -147,8 +147,25 @@ static int c28x_putc(struct rt_serial_device *serial, char c)
static int c28x_getc(struct rt_serial_device *serial)
{
char ch;
- SCI_read(0, &ch, 1);
- return ch;
+ if(SCI_read(0, &ch, 1))
+ return ch;
+ else
+ return -1;
+}
+
+/**
+ * Uart common interrupt process. This need add to uart ISR.
+ *
+ * @param serial serial device
+ */
+static void uart_isr(struct rt_serial_device *serial) {
+ struct c28x_uart *uart = (struct c28x_uart *) serial->parent.user_data;
+
+ RT_ASSERT(uart != RT_NULL);
+
+ rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND);
+ SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear Interrupt flag
+ PieCtrlRegs.PIEACK.all |= 0x100; // Issue PIE ack
}
static const struct rt_uart_ops c28x_uart_ops =
@@ -159,6 +176,20 @@ static const struct rt_uart_ops c28x_uart_ops =
.getc = c28x_getc,
};
+//
+// sciaRxFifoIsr - SCIA Receive FIFO ISR
+//
+interrupt void sciaRxFifoIsr(void)
+{
+ /* enter interrupt */
+ rt_interrupt_enter();
+
+ uart_isr(&uart_obj[0].serial);
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+
int rt_hw_sci_init(void)
{
EALLOW;
@@ -182,8 +213,18 @@ int rt_hw_sci_init(void)
CpuSysRegs.PCLKCR7.bit.SCI_B = 1;
CpuSysRegs.PCLKCR7.bit.SCI_C = 1;
+ PieVectTable.SCIA_RX_INT = &sciaRxFifoIsr;
+
EDIS;
+ //
+ // Enable interrupts required for this example
+ //
+ PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
+ PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // PIE Group 9, INT1
+ IER |= 0x100; // Enable CPU INT
+ EINT;
+
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
rt_err_t result = 0;
@@ -202,7 +243,6 @@ int rt_hw_sci_init(void)
uart_obj[2].name = "scic";
uart_obj[2].sci_regs = &ScicRegs;
-
/* register UART device */
result = rt_hw_serial_register(&uart_obj[0].serial, uart_obj[0].name,
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
diff --git a/bsp/tms320f28379d/figures/build.png b/bsp/tms320f28379d/figures/build.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c2515fb83baff591a0ed802a256f475b359ddb6
Binary files /dev/null and b/bsp/tms320f28379d/figures/build.png differ
diff --git a/bsp/tms320f28379d/figures/debug_as.png b/bsp/tms320f28379d/figures/debug_as.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a2abb3119a48c843964dd31d4cc4399d8dd0ffc
Binary files /dev/null and b/bsp/tms320f28379d/figures/debug_as.png differ
diff --git a/bsp/tms320f28379d/figures/import.png b/bsp/tms320f28379d/figures/import.png
new file mode 100644
index 0000000000000000000000000000000000000000..db7c314b67aa5270ce879ceeb48a2991abb6e9ff
Binary files /dev/null and b/bsp/tms320f28379d/figures/import.png differ
diff --git a/bsp/tms320f28379d/figures/import_dia.png b/bsp/tms320f28379d/figures/import_dia.png
new file mode 100644
index 0000000000000000000000000000000000000000..8098424824cc1e5320cef462dd388791c1723455
Binary files /dev/null and b/bsp/tms320f28379d/figures/import_dia.png differ
diff --git a/bsp/tms320f28379d/figures/launch-28379d.png b/bsp/tms320f28379d/figures/launch-28379d.png
new file mode 100644
index 0000000000000000000000000000000000000000..6db1ebdae051d4843f7eb3d7e47aede4d1c53fe3
Binary files /dev/null and b/bsp/tms320f28379d/figures/launch-28379d.png differ
diff --git a/bsp/tms320f28379d/figures/launching.png b/bsp/tms320f28379d/figures/launching.png
new file mode 100644
index 0000000000000000000000000000000000000000..832c6687cebc10d9906374969a14e30df58721e0
Binary files /dev/null and b/bsp/tms320f28379d/figures/launching.png differ
diff --git a/bsp/tms320f28379d/libraries/common/include/stdint.h b/bsp/tms320f28379d/libraries/common/include/stdint.h
index 824f5e607d6f85a0faf23b8c6801da4dc87d926d..479234292addef79c57eb4b0418c619c203415ab 100644
--- a/bsp/tms320f28379d/libraries/common/include/stdint.h
+++ b/bsp/tms320f28379d/libraries/common/include/stdint.h
@@ -69,6 +69,8 @@
typedef int int32_t;
typedef unsigned int uint32_t;
#else
+ typedef char int8_t;
+ typedef unsigned char uint8_t;
typedef int int16_t;
typedef unsigned int uint16_t;
typedef long int32_t;
@@ -187,9 +189,6 @@
/* sorry, [u]int_fast64_t not implemented for C54x, C55x */
#endif
-typedef uint_fast8_t uint8_t;
-typedef int_fast8_t int8_t;
-
/* 7.18.1.4 Integer types capable of holding object pointers */
#if defined(_TMS320C5XX) || defined(__TMS320C55X__) || \
(defined(__MSP430__) && defined(__LARGE_CODE_MODEL__)) || \
diff --git a/bsp/tms320f28379d/rtconfig.h b/bsp/tms320f28379d/rtconfig.h
index f825d9ef744b67e6944b9cc29c9dedff17755d22..55cc763c730324205f33408aab10ae9fc37bbe83 100644
--- a/bsp/tms320f28379d/rtconfig.h
+++ b/bsp/tms320f28379d/rtconfig.h
@@ -55,15 +55,16 @@
/* Command shell */
+#define RT_USING_FINSH
+#define FINSH_THREAD_NAME "tshell"
+#define FINSH_USING_HISTORY
+#define FINSH_HISTORY_LINES 5
+#define FINSH_THREAD_PRIORITY 6
+#define FINSH_THREAD_STACK_SIZE 4096
+#define FINSH_CMD_SIZE 80
/* Device virtual file system */
-#define RT_USING_DFS
-#define DFS_USING_WORKDIR
-#define DFS_FILESYSTEMS_MAX 2
-#define DFS_FILESYSTEM_TYPES_MAX 2
-#define DFS_FD_MAX 16
-#define RT_USING_DFS_DEVFS
/* Device Drivers */
diff --git a/libcpu/ti-dsp/c28x/context.s b/libcpu/ti-dsp/c28x/context.s
index 019b5def1378f5f9ce1488eb0ff1b0da5726ae11..2b853a0075a30af2a2ec2fef71e46fd5bf5b5546 100644
--- a/libcpu/ti-dsp/c28x/context.s
+++ b/libcpu/ti-dsp/c28x/context.s
@@ -94,11 +94,10 @@ _rt_hw_interrupt_enable:
.asmfunc
_rt_hw_context_switch_interrupt:
-_rt_hw_context_switch:
MOVL XAR0, #0
MOV AR0, AL
MOVL XAR4, *-SP[4]
- ; set rt_thread_switch_interrupt_flag to 1
+ ; set rt_thread_switch_interrupt_flag to 1
MOVL XAR5, #_rt_thread_switch_interrupt_flag
MOVL XAR6, *XAR5
MOVL ACC, XAR6
@@ -114,6 +113,36 @@ _reswitch:
MOVL XAR5, #_rt_interrupt_to_thread ; set rt_interrupt_to_thread
MOVL *XAR5, XAR4
+ LRETR
+ .endasmfunc
+
+;
+; void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);
+; r0 --> from
+; r4 --> to
+
+
+ .asmfunc
+_rt_hw_context_switch:
+ MOVL XAR0, #0
+ MOV AR0, AL
+ MOVL XAR4, *-SP[4]
+ ; set rt_thread_switch_interrupt_flag to 1
+ MOVL XAR5, #_rt_thread_switch_interrupt_flag
+ MOVL XAR6, *XAR5
+ MOVL ACC, XAR6
+ CMPB AL, #1
+ B _reswitch2, EQ
+ MOVL XAR6, #1
+ MOVL *XAR5, XAR6
+
+ MOVL XAR5, #_rt_interrupt_from_thread ; set rt_interrupt_from_thread
+ MOVL *XAR5, XAR0
+
+_reswitch2:
+ MOVL XAR5, #_rt_interrupt_to_thread ; set rt_interrupt_to_thread
+ MOVL *XAR5, XAR4
+
TRAP #16
LRETR
.endasmfunc
@@ -139,8 +168,6 @@ _RTOSINT_Handler:
MOV AR1, AL
CMP AR1, #0
B switch_to_thread, EQ ; skip register save at the first time
-
- ;MOVZ AR1, @SP ; get from thread stack pointer
;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
; TST lr, #0x10 ; if(!EXC_RETURN[4])
@@ -159,9 +186,9 @@ _RTOSINT_Handler:
;#endif
MOV AL, *AR0
- MOV AR1, AL
+ MOV AR0, AL
MOVZ AR1, @SP ; get from thread stack pointer
- MOV *AR0, AR1 ; update from thread stack pointer
+ MOV *AR0, AR1 ; update from thread stack pointer
switch_to_thread:
MOV AR1, #_rt_interrupt_to_thread
@@ -175,7 +202,7 @@ switch_to_thread:
;#endif
MOV @SP, AR1
- INC SP
+
RT_CTX_RESTORE ; pop r4 - r11 register
rtosint_exit:
diff --git a/libcpu/ti-dsp/c28x/cpuport.c b/libcpu/ti-dsp/c28x/cpuport.c
index 8885f647a9c9ac753a6bcfa7e05c364765dc58f6..2d42884beda76578578e422742792a38946fe90d 100644
--- a/libcpu/ti-dsp/c28x/cpuport.c
+++ b/libcpu/ti-dsp/c28x/cpuport.c
@@ -17,6 +17,9 @@ rt_uint32_t rt_thread_switch_interrupt_flag;
/* exception hook */
static rt_err_t (*rt_exception_hook)(void *context) = RT_NULL;
+extern rt_uint16_t rt_hw_get_st0(void);
+extern rt_uint16_t rt_hw_get_st1(void);
+
struct exception_stack_frame
{
rt_uint32_t t_st0;
@@ -59,6 +62,7 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
stk = stack_addr;
stk = (rt_uint8_t *)RT_ALIGN((rt_uint32_t)stk, 8);
//stk -= sizeof(struct stack_frame);
+ stk += 1;
stack_frame = (struct stack_frame *)stk;