Maskmd EQU 0x1f <br />SVC32md EQU 0x13<br />I_Bit EQU 0x80<br /><br /><br />FRAME_R0 EQU 0X00<br />FRAME_R1 EQU FRAME_R0 + 4<br />FRAME_R2 EQU FRAME_R1 + 4<br />FRAME_R3 EQU FRAME_R2 + 4<br />FRAME_R4 EQU FRAME_R3 + 4<br />FRAME_R5 EQU FRAME_R4 + 4<br />FRAME_R6 EQU FRAME_R5 + 4<br />FRAME_R7 EQU FRAME_R6 + 4<br />FRAME_R8 EQU FRAME_R7 + 4<br />FRAME_R9 EQU FRAME_R8 + 4<br />FRAME_R10 EQU FRAME_R9 + 4<br />FRAME_R11 EQU FRAME_R10 + 4<br />FRAME_R12 EQU FRAME_R11 + 4<br />FRAME_PSR EQU FRAME_12 + 4<br />FRAME_LR EQU FRAME_PSR + 4<br />FRAME_PC EQU FRAME_LR + 4<br />FRAME_SIZE EQU FRAME_PC + 4<br /><br />IRQ_Entry<br /> SUB r14,r14,#4<br /> STMDB r13,!{r0-r3,r12,r14}<br /> <服务中断><br /> BL read_RescheduleFlag<br /> CMP r0,#0<br /> LDMNEIA r13!,{r0-r13,r12,PC}^<br /> MRS r2,spsr<br /> MOV r0,r13<br /> ADD r13,r13,#6*4<br /> MRS r1,cpsr<br /> BIC r1,r1,#Maskmd<br /> ORR r1,r1,SVC32md<br /> MSR cpsr_c,r1<br /> SUB r13,r13,#FRAME_SIZE-FRAME_R4<br /> STMIA r13,{r4-r11}<br /> LDMIA r0,{r4-r9}<br /> BIC r1,r1,#I_Bit<br /> MSR cpsr_c,r1<br /> STMDB r13!,{r4-r7}<br /> STR r2,[r13,#FRAME_PSR]<br /> STR r8,[r13,#FRAME_R12]<br /> STR r9,[r13,#FRAME_PC]<br /> STR r14,[r13,#FRAME_LR]<br /> <br /> <完成中断服务程序><br /> LDMIA r13!,{r0-r12,r14}<br /> MSR spsr_cxsf,r14<br /> LDMIA r13!,{r14,pc}^
|