|
各位大哥,我在为44B0编写定时器中断程序的时候,发现中断能进去,却没出来,老在里面循环,不挺的显示 4 和5。是什么原因呢?我已经清除了中断标志呀!
我的代码是这样的:
EXPORT __OSTickISR
__OSTickISR
SUB LR,LR,#4
STMFD SP!,{R0-R12,LR}
BL OS_ENTER_CRITICAL
LDR R0, =I_ISPC ;Clear the flag
LDR R1, =BIT_TIMER0
STR R1, [r0]
BL OSIntEnter
BL OSTimeTick
BL OSIntExit
BL Int1 ;Debug message display 4
LDR R0,addr_Sw_Need
MOV R1,R0
LDR R0,[R0]
CMP R0,#1
MOVEQ R2,#0
STREQ R2,[R1]
BEQ IntCtxSw
BL Int2 ;Debug message display 5
LDMFD SP!,{R0-R12,PC}^
我在C语言里面声明了一个函数OSIntCtxSw
extern char Sw_Need=0;
void OSIntCtxSw(void)
{
Sw_Need=1;
}
而我的IntCtxSw是这样的,他将切换到新的任务
IntCtxSw
LDMFD SP!,{R0-R12,LR}
STR LR, SAVED_LR
;Change to task_mode
MRS LR,SPSR
MSR CPSR_cxsf,LR
LDR LR,SAVED_LR
B OSCtxSw
到底我在那出错了呢? |
|