mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-20 17:44:20 +08:00
[bsp][tms320f28379d] Add support for upward-growing stack
This commit is contained in:
+5
-18
@@ -86,6 +86,7 @@ _rt_hw_interrupt_enable:
|
||||
.asmfunc
|
||||
_rt_hw_context_switch_interrupt:
|
||||
_rt_hw_context_switch:
|
||||
MOV AR0, AL
|
||||
; set rt_thread_switch_interrupt_flag to 1
|
||||
MOVL XAR2, #_rt_thread_switch_interrupt_flag
|
||||
MOVL XAR3, *XAR2
|
||||
@@ -96,7 +97,7 @@ _rt_hw_context_switch:
|
||||
MOVL *XAR2, XAR3
|
||||
|
||||
MOVL XAR2, #_rt_interrupt_from_thread ; set rt_interrupt_from_thread
|
||||
MOVL *XAR2, XAR0
|
||||
MOVL *XAR2, XAR0
|
||||
|
||||
_reswitch:
|
||||
MOVL XAR2, #_rt_interrupt_to_thread ; set rt_interrupt_to_thread
|
||||
@@ -162,21 +163,8 @@ switch_to_thread:
|
||||
; LDMFD r1!, {r3} ; pop flag
|
||||
;#endif
|
||||
|
||||
RT_CTX_RESTORE ; pop r4 - r11 register
|
||||
|
||||
|
||||
;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
|
||||
; CMP r3, #0 ; if(flag_r3 != 0)
|
||||
; VLDMIANE r1!, {d8 - d15} ; pop FPU register s16~s31
|
||||
;#endif
|
||||
|
||||
MOV @SP, AR1 ; update stack pointer
|
||||
|
||||
;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
|
||||
; ORR lr, lr, #0x10 ; lr |= (1 << 4), clean FPCA.
|
||||
; CMP r3, #0 ; if(flag_r3 != 0)
|
||||
; BICNE lr, lr, #0x10 ; lr &= ~(1 << 4), set FPCA.
|
||||
;#endif
|
||||
MOV @SP, AR1
|
||||
RT_CTX_RESTORE ; pop r4 - r11 register
|
||||
|
||||
rtosint_exit:
|
||||
; restore interrupt
|
||||
@@ -206,8 +194,7 @@ _rt_hw_get_st1:
|
||||
.asmfunc
|
||||
_rt_hw_context_switch_to:
|
||||
MOV AR1, #_rt_interrupt_to_thread
|
||||
MOV AL, *AR1
|
||||
MOV AR0, AL
|
||||
MOV *AR1, AL
|
||||
|
||||
;#if defined (__VFP_FP__) && !defined(__SOFTFP__)
|
||||
; CLEAR CONTROL.FPCA
|
||||
|
||||
@@ -34,6 +34,7 @@ struct exception_stack_frame
|
||||
|
||||
struct stack_frame
|
||||
{
|
||||
struct exception_stack_frame exception_stack_frame;
|
||||
|
||||
/* r4 ~ r11 register */
|
||||
rt_uint16_t ar0h;
|
||||
@@ -48,7 +49,6 @@ struct stack_frame
|
||||
rt_uint32_t rpc;
|
||||
|
||||
|
||||
struct exception_stack_frame exception_stack_frame;
|
||||
};
|
||||
|
||||
rt_uint8_t *rt_hw_stack_init(void *tentry,
|
||||
@@ -60,9 +60,9 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
|
||||
rt_uint8_t *stk;
|
||||
unsigned long i;
|
||||
|
||||
stk = stack_addr + sizeof(rt_uint32_t);
|
||||
stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8);
|
||||
stk -= sizeof(struct stack_frame);
|
||||
stk = stack_addr;
|
||||
stk = (rt_uint8_t *)RT_ALIGN((rt_uint32_t)stk, 8);
|
||||
//stk -= sizeof(struct stack_frame);
|
||||
|
||||
stack_frame = (struct stack_frame *)stk;
|
||||
|
||||
@@ -81,7 +81,7 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
|
||||
stack_frame->exception_stack_frame.return_address = (unsigned long)tentry; /* return_address */
|
||||
|
||||
/* return task's current stack address */
|
||||
return stk;
|
||||
return stk + sizeof(struct stack_frame);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user