![](https://csdnimg.cn/release/download_crawler_static/87422314/bg3.jpg)
六、bootloaderIsrIRQ中断服务器程序
IsrIRQ
sub sp,sp,#4;保留PC
stmfd sp!,{r8-r9};将r8,r9入栈
ldr r9,=I_ISPR;中断寄存器地址=r9
ldr r9,[r9] ;读出中断寄存器I_ISPR的值,存入R9中
mov r8,#0x0
0 ;局部标号
movsr9,r9,lsr#1;LSR逻辑右移
bcs %F1;%F向前搜索局部标号判断是否把置位C
add r8,r8,#4 ;根据I_ISPR的值
b %B0 ;判断该中断在普通中断向量表中的偏移量,存入R8
;%B向后搜索局部标号
1;局部标号
ldr r9,=HandleADC ;HandleADC为普通中断向量表的起始地址,
add r9,r9,r8 ;起始地址+偏移地址=实际的中断向量地址
ldr r9,[r9] ;取出中断向量的值,即服务程序的地址
str r9,[sp,#8]
ldmfdsp!,{r8-r9,pc} ;跳转到普通中断服务程序,开始执行