arm中断疑惑:
当中断产生时,通过中断向量表
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
调转到handlerIRQ,handlerIRQ根据INTOFFSET判断具体是哪个中断,然后进入相应的中断服务程序,
我的疑惑是中断服务程序执行完后,它怎么样回到被打断的地方继续运行,这是一个IRQ的主体程序
IsrIRQ
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}
////////////////////////////////////////////////
当中断产生时,通过中断向量表
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
调转到handlerIRQ,handlerIRQ根据INTOFFSET判断具体是哪个中断,然后进入相应的中断服务程序,
我的疑惑是中断服务程序执行完后,它怎么样回到被打断的地方继续运行,这是一个IRQ的主体程序
////////////////////////////////////////////////
IsrIRQ
sub sp,sp,#4 ;reserved for PC 堆栈是递减的,空一个位置
stmfd sp!,{r8-r9} ;保存下面要用到的r8和r9
5,7,10,14楼,你们越说越扯了,不要误人子弟了,人家12楼说的是正确的
14楼,你看清楚点再发言,人家楼主的代码最后一行跟本没有^号
IsrIRQ
sub sp,sp,#4 ;reserved for PC ;堆栈指针减4,空出一个单元,以便后面放入PC需要的字(看不懂英文吗?)
stmfd sp!,{r8-r9} ;r8,r9入栈,此时存储r8,r9的两个堆栈单元下面的一个单元是空的