網(wǎng)上找了很多都沒發(fā)現(xiàn)2440的中斷向量,,飛凌群的技術(shù)員只會叫我查那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開發(fā)板 有如下,,不同的開發(fā)板可能只是下面的絕對地址不同,而對于FL2440,,因為 MyApp 分區(qū)已定下,,所以好像那個絕對地址就是下面那個的了。
絕對地址:_ISR_STARTADDRESS 0x33FFFF00
中斷類型 偏移地址
復(fù)位 0 未定義指令 0x04 軟件中斷 0x08 中止(預(yù)取指令) 0x0c 中止(數(shù)據(jù)) 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
設(shè)置中斷服務(wù)子程序時格式如下(以外部中斷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);//進(jìn)入中斷后要手動清除相應(yīng)的中斷標(biāo)志??! //…………
}
int main(void)
{
pISR_EINT0 = (uint)Eint0_ISR;//一定要將相應(yīng)的中斷服務(wù)子程序連起來!,!
//…………
}
|