2440中斷向量的理解
(1),中斷發(fā)生,arm跳到0x0000
(2)繼續(xù)找,HandlerFIQ
HandlerFIQ
sub sp,sp,#4 ;decrement
stmfd sp!,{r0} ;PUSH
ldr
ldr
str
ldmfd
有興趣的可以看下,它最終將pc賦值HandleFIQ的值
(3)那么HandleFIQ那里儲(chǔ)存了什么呢?arm在啟動(dòng)時(shí)做了這樣的賦值
ldr r0,=HandleIRQ
ldr r1,=IsrIRQ
str r1,[r0]
可見(jiàn)現(xiàn)在(2)中pc值為IsrIRQ所代表的地址。
(4)現(xiàn)在來(lái)到了IsrIRQ。詳細(xì)看下:
IsrIRQ
sub sp,sp,#4
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9]
ldr r8,=HandleEINT0
add r8,r8,r9,lsl
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}
這段代碼,首先計(jì)算服務(wù)程序的地址,然后跳過(guò)去。但是INTOFFSET和
HandleEINT0其實(shí)就是中斷是量表的首地址(區(qū)分于arm的異常向量表),而上面所說(shuō)的pISR_TIMER1就是有中斷向量表得到的存放實(shí)際的中斷處理函數(shù)的地址
#define
其實(shí)這個(gè)地址就應(yīng)該是add r8,r8,r9,lsl
評(píng)論