|
Timer.c中设置OSTickISR为定时中断函数,但是并没使用__irq 关键字
void ISRInit(void)
{
// 设置中断控制器
rPRIORITY = 0x00000000; // 使用默认的固定的优先级
rINTMOD = 0x00000000; // 所有中断均为IRQ中断
pISR_TIMER0= (uint32) OSTickISR;
rINTMSK &= ~(1<<10); // 打开TIMER0中断允许
IntCnt=0;
}
CPU产生定时器中断后直接跳转到位于Os_cpu_a.s中的OSTickISR处
但是OSTickISR并没有保护寄存器 只保存了程序指针 不知道是为什么???
是我分析的程序流程不对???
其实中断处理先转到其他的地方了????
OSTickISR
MOV R5,LR ;将返回地址保存(LR->R5)
MOV R1, #1
MOV R1, R1, LSL #10 ; Timer0 Source Pending Reg.将R1左移10位送入R1
LDR R0, =SRCPND
LDR R2, [R0] ;读SRCPND内容送入R2
ORR R1, R1,R2 ;(R1|R2)->R1
STR R1, [R0] ;将R1送入SRCPND
LDR R0, =INTPND ;将INTPND地址送入R0
LDR R1, [R0] ;读INTPND内容 //此处读出再送回???
STR R1, [R0] ;读出的内容送回到INTPND?
;----------------------------------------------------------------------------------
; OSTimeTick();
;----------------------------------------------------------------------------------
BL OSTimeTick
MOV PC, R5 ; Return
|
|