这段程序是关于ARM中的中断的,我看不太懂是什么意思!哪位高手帮我解释一下啊!谢谢了
哪位朋友能帮我看看这段程序是什么意思啊!!!
IsrIRQ
sub sp,sp,#4
stmfd sp!,{r8-r9}
ldr r9,=I_ISPR
ldr r9,[r9]
mov r8,#0x00
0
movs r9,r9,lsr #1
Bcs %F1
Add r8,r8,#4
B %B0
1
ldr r9,=HandleADC
add r9,r9,r8
ldr r9,[r9]
str r9,[sp,#8]
ldmfd sp!,{r8-r9,pc)
------解决方案--------------------------------------------------------
ldr r9,=I_ISPR
ldr r9,[r9]
mov r8,#0x00
sub sp,sp,#4
stmfd sp!,{r8-r9}
ldr r9,=I_ISPR
ldr r9,[r9]
mov r8,#0x00
0
movs r9,r9,lsr #1
; I_ISPR=I_ISPR < <1;
Bcs %F1 跳转到1
Add r8,r8,#4
B %B0
1
ldr r9,=HandleADC
add r9,r9,r8
ldr r9,[r9]
str r9,[sp,#8]
ldmfd sp!,{r8-r9,pc)
其等价的c代码大约如下
void IsrIRQ(void)
{
count=0;
do{
I_ISPR < <=1;
count+=4;
}while(I_ISPR);
HandleADC+=count;
}