瀏覽代碼

[bluetrum] fix context switch error

greedyhao 4 年之前
父節點
當前提交
216285a2c3

+ 5 - 2
bsp/bluetrum/ab32vg1-ab-prougen/.config

@@ -288,6 +288,7 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_PDULIB is not set
 # CONFIG_PKG_USING_BTSTACK is not set
 # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set
+# CONFIG_PKG_USING_WAYZ_IOTKIT is not set
 
 #
 # security packages
@@ -437,6 +438,8 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_QKEY is not set
 # CONFIG_PKG_USING_RS485 is not set
 # CONFIG_PKG_USING_NES is not set
+# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set
+# CONFIG_PKG_USING_VDEVICE is not set
 
 #
 # miscellaneous packages
@@ -495,13 +498,13 @@ CONFIG_RT_USING_LIBC=y
 # Onboard Peripheral Drivers
 #
 CONFIG_BSP_USING_USB_TO_USART=y
+CONFIG_BSP_USING_AUDIO=y
+CONFIG_BSP_USING_AUDIO_PLAY=y
 
 #
 # On-chip Peripheral Drivers
 #
 CONFIG_BSP_USING_UART0=y
-CONFIG_BSP_USING_AUDIO=y
-CONFIG_BSP_USING_AUDIO_PLAY=y
 
 #
 # Board extended module Drivers

+ 2 - 2
bsp/bluetrum/ab32vg1-ab-prougen/rtconfig.h

@@ -169,12 +169,12 @@
 /* Onboard Peripheral Drivers */
 
 #define BSP_USING_USB_TO_USART
+#define BSP_USING_AUDIO
+#define BSP_USING_AUDIO_PLAY
 
 /* On-chip Peripheral Drivers */
 
 #define BSP_USING_UART0
-#define BSP_USING_AUDIO
-#define BSP_USING_AUDIO_PLAY
 
 /* Board extended module Drivers */
 

+ 6 - 2
bsp/bluetrum/libcpu/cpu/context_gcc.S

@@ -44,7 +44,7 @@ enable_int_ret:
 
 /* Macro for saving task context */
 .macro save_context
-    addi    sp, sp, -120
+    addi    sp, sp, -124
 
     /* Save Context */
     sw      x1, 0(sp)
@@ -79,6 +79,8 @@ enable_int_ret:
 
     lw      a5, EPC(zero)                  //Saves current program counter (EPC) as task program counter
     sw      a5, 116(sp)
+    lw      a5, EPICCON(zero)
+    sw      a5, 120(sp)
 
     sw      sp, rt_cur_thread_sp, a4                       //store sp in preempted tasks tcb
     .endm
@@ -93,6 +95,8 @@ enable_int_ret:
     /* Load task program counter  EPC*/
     lw      a5, 116(sp)
     sw      a5, EPC(zero)
+    lw      a5, 120(sp)
+    sw      a5, EPICCON(zero)
 
     /* Restore registers,
        Skip global pointer because that does not change */
@@ -126,7 +130,7 @@ enable_int_ret:
     lw      x30, 108(sp)
     lw      x31, 112(sp)
 
-    addi    sp, sp, 120
+    addi    sp, sp, 124
     mret
     .endm
 

+ 2 - 0
bsp/bluetrum/libcpu/cpu/cpuport.c

@@ -39,6 +39,8 @@ rt_uint8_t *rt_hw_stack_init(void       *tentry,
     stack_addr  = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
     stk  = (rt_uint32_t *)stack_addr;
 
+    stk--;
+    *stk = (rt_uint32_t)0x10003;         /* Start address */
     stk--;
 	*stk = (rt_uint32_t)tentry;			/* Start address */
 	stk -= 22;