网上找了很多都没发现2440的中断向量,飞凌群的技术员只会叫我查那2440的芯片手册,我查死都查不到(搜索中文片的“中断向量”和英文版的“vector”,根本没这东西),后来在国嵌的代码中找到的。
注:CowBoy 直接从 国嵌 的代码中提取出来的
// Exception vector #define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0)) #define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4)) #define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8)) #define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc)) #define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10)) #define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14)) #define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS+0x18)) #define pISR_FIQ (*(unsigned *)(_ISR_STARTADDRESS+0x1c)) // Interrupt vector #define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20)) #define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x24)) #define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x28)) #define pISR_EINT3 (*(unsigned *)(_ISR_STARTADDRESS+0x2c)) #define pISR_EINT4_7 (*(unsigned *)(_ISR_STARTADDRESS+0x30)) #define pISR_EINT8_23 (*(unsigned *)(_ISR_STARTADDRESS+0x34)) #define pISR_CAM (*(unsigned *)(_ISR_STARTADDRESS+0x38)) // Added for 2440. #define pISR_BAT_FLT (*(unsigned *)(_ISR_STARTADDRESS+0x3c)) #define pISR_TICK (*(unsigned *)(_ISR_STARTADDRESS+0x40)) #define pISR_WDT_AC97 (*(unsigned *)(_ISR_STARTADDRESS+0x44)) //Changed to pISR_WDT_AC97 for 2440A #define pISR_TIMER0 (*(unsigned *)(_ISR_STARTADDRESS+0x48)) #define pISR_TIMER1 (*(unsigned *)(_ISR_STARTADDRESS+0x4c)) #define pISR_TIMER2 (*(unsigned *)(_ISR_STARTADDRESS+0x50)) #define pISR_TIMER3 (*(unsigned *)(_ISR_STARTADDRESS+0x54)) #define pISR_TIMER4 (*(unsigned *)(_ISR_STARTADDRESS+0x58)) #define pISR_UART2 (*(unsigned *)(_ISR_STARTADDRESS+0x5c)) #define pISR_LCD (*(unsigned *)(_ISR_STARTADDRESS+0x60)) #define pISR_DMA0 (*(unsigned *)(_ISR_STARTADDRESS+0x64)) #define pISR_DMA1 (*(unsigned *)(_ISR_STARTADDRESS+0x68)) #define pISR_DMA2 (*(unsigned *)(_ISR_STARTADDRESS+0x6c)) #define pISR_DMA3 (*(unsigned *)(_ISR_STARTADDRESS+0x70)) #define pISR_SDI (*(unsigned *)(_ISR_STARTADDRESS+0x74)) #define pISR_SPI0 (*(unsigned *)(_ISR_STARTADDRESS+0x78)) #define pISR_UART1 (*(unsigned *)(_ISR_STARTADDRESS+0x7c)) #define pISR_NFCON (*(unsigned *)(_ISR_STARTADDRESS+0x80)) // Added for 2440. #define pISR_USBD (*(unsigned *)(_ISR_STARTADDRESS+0x84)) #define pISR_USBH (*(unsigned *)(_ISR_STARTADDRESS+0x88)) #define pISR_IIC (*(unsigned *)(_ISR_STARTADDRESS+0x8c)) #define pISR_UART0 (*(unsigned *)(_ISR_STARTADDRESS+0x90)) #define pISR_SPI1 (*(unsigned *)(_ISR_STARTADDRESS+0x94)) #define pISR_RTC (*(unsigned *)(_ISR_STARTADDRESS+0x98)) #define pISR_ADC (*(unsigned *)(_ISR_STARTADDRESS+0x9c))
特别地对于 飞凌的FL2440开发板 有如下,不同的开发板可能只是下面的绝对地址不同,而对于FL2440,因为 MyApp 分区已定下,所以好像那个绝对地址就是下面那个的了。
绝对地址:_ISR_STARTADDRESS 0x33FFFF00
中断类型 偏移地址
复位 0 未定义指令 0x04 软件中断 0x08 中止(预取指令) 0x0c 中止(数据) 0x10 保留 0x14 IRQ 0x18 FIQ 0x1c
EINT0(外部中断0) 0x20 EINT1(外部中断1) 0x24 EINT2(外部中断2) 0x28 EINT3(外部中断3) 0x2c EINT4_7(外部中断4~7) 0x30 EINT8_23(外部中断8~23) 0x34 NOTUSED6(未使用) 0x38 BAT_FLT(电池出错中断) 0x3c TICK(TICK中断) 0x40 WDT(看门狗定时器中断) 0x44 TIMER0(定时器0中断) 0x48 TIMER1(定时器1中断) 0x4c TIMER2(定时器2中断) 0x50 TIMER3(定时器3中断) 0x54 TIMER4(定时器4中断) 0x58 UART2(串口2中断) 0x5c LCD(LCD中断) 0x60 DMA0(DMA0中断) 0x64 DMA1(DMA1中断) 0x68 DMA2(DMA2中断) 0x6c DMA3(DMA3中断) 0x70 SDI(SDI中断) 0x74 SPIO(SPIO中断) 0x78 UART1(UART1中断) 0x7c NOTUSED24(未使用) 0x80 USBD(USBD中断) 0x84 USBH(USBH中断) 0x88 IIC(IIC中断) 0x8c UART0(UART0中断) 0x90 SPI1(SPI1中断) 0x94 RTC(RTC中断) 0x98 ADC(ADC中断) 0x9c
设置中断服务子程序时格式如下(以外部中断0为例)
//宏定义
#define uint unsigned int
#define _ISR_STARTADDRESS 0x33FFFF00 #define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x20))
//中断子程序
static void __irq Eint0_ISR(void) { ClearPending(BIT_EINT0);//进入中断后要手动清除相应的中断标志!! //…………
}
int main(void)
{
pISR_EINT0 = (uint)Eint0_ISR;//一定要将相应的中断服务子程序连起来!!
//…………
}
|