ARM 向量中斷和非向量中斷
ENTRY
而非向量中斷的代碼如下:
ENTRY
IsrIRQ
0
1
HandleADC # 4
HandleRTC # 4
HandleUTXD1 # 4
HandleUTXD0 # 4
. . . . . .
HandleEINT3 # 4
HandleEINT2 # 4
HandleEINT1 # 4
HandleEINT0 # 4 ; 0xc1(c7)fff84
HandleADC # 4
HandleRTC # 4
HandleUTXD1 # 4
HandleUTXD0 # 4
. . . . . .
HandleEINT3 # 4
上述
是在數(shù)據(jù)區(qū)中分配4個字節(jié)的存儲空間, 等同于
這四個字節(jié)的存儲空間中存的是中斷服務(wù)程序的地址. 在C語言編寫的main程序中,如何將中斷服務(wù)程序的入口地址放入到這個存儲空間中呢?細(xì)心的讀者可以發(fā)現(xiàn)這段數(shù)據(jù)區(qū)的起始地址是_ISR_STARTADDRESS, 在MAIN函數(shù)中只要讓
MyIsr是中斷服務(wù)程序的名稱, 但是_ISR_STARTADDRESS是一個非定值,這個值只有在連接器連接的時候才賦值,在編譯階段他是個不定值,所以編譯的時候會報(bào)錯。#define _ISR_STARTADDRESS 成一個在SDRAM中的地址值。在本例中是0xc7fff00。
(或者其他偏移量)))賦值. 在中斷服務(wù)程序結(jié)尾要對I_ISPC寫數(shù)清除INTPND。
如果是EINT0~7還要在寫I_ISPC之前對EXTINTPND寄存器寫數(shù)。
評論