关于中断的具体的启动代码解释:
(1) 一级中断向量表
以下为汇编代码片断,详见44B0数据手册11章——中断控制器) AREA
VECTOR_BRANCH |
2、二级中断向量表
HandleReset HandleUndef HandleSWI HandlePabort HandleDabort HandleReserved HandleIRQ HandleFIQ ;Do not use the label 'IntVectorTable', ;because armasm.exe can not recognize this label correctly. ;the value is different with an address you think it may be. ;IntVectorTable HandleADC HandleRTC …… …… HandleEINT2 HandleEINT1 HandleEINT0 这段第一行 “^” 符号表示在RAM区开辟空间,就是伪代码中的MAP。 ^ _ISR_STARTADDRESS 表示在RAM的_ISR_STARTADDRESS处开辟一段空间。这里开辟的空间是用来存放中断服务程序及其他异常处理程序地址的。每个中断或其他异常都开辟4个字节的空间,这是因为RAM区的程序地址要4个字节才能放得下。而中断程序的地址是应用程序在使用这个中断时,将中断服务程序的地址存入这对应的空间内。 |
3、 中断向量表最终指向
一般在44B.H等头文件能找到对应于二级中断向量表的宏定义:片断如下 #define pISR_RESET #define pISR_UNDEF #define pISR_SWI #define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc)) #define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10)) #define pISR_RESERVED #define pISR_IRQ #define pISR_FIQ #define pISR_ADC #define pISR_RTC #define pISR_UTXD1 #define pISR_UTXD0 …… …… #define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x7c)) #define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x80)) #define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x84)) pISR_TIMER0 = (int) time_interrupt() |