本文共 1607 字,大约阅读时间需要 5 分钟。
ARM C中中断程序和其他的c的中断程序一样,就是有中断向量表,入口地址,中断应用程序三部分组成
//中断向量表
// ISR
#define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0)) #define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4)) #define pISR (*(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)) //中断初始话 void Isr_Init(void)
{ pISR_UNDEF=(unsigned)HaltUndef;/ pISR =(unsigned)Hal; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigned)HaltDabort; rINTMOD=0x0; // All=IRQ mode rINTMSK=BIT_ALLMSK; // All interrupt is masked. //pISR_URXD0=(unsigned)Uart0_RxInt; //rINTMSK=~(BIT_URXD0); //enable UART0 RX Default value=0xffffffff
#if 1
pISR_USBD =(unsigned)IsrUsbd; pISR_DMA2 =(unsigned)IsrDma2; #else pISR_IRQ =(unsigned)IsrUsbd; //Why doesn't it receive the big file if use this. (???) //It always stops when 327680 bytes are received. #endif ClearPending(BIT_DMA2); ClearPending(BIT_USBD); //rINTMSK&=~(BIT_USBD); //pISR_FIQ,pISR_IRQ must be initialized } //具体中断函数
void HaltUndef(void) { Uart_Printf("Undefined instruction exception!!!\n"); while(1); }
自己从一开始 接触arm,就听说了中断 ,同时也见到了以上类似代码,准确来说可以追溯到去年暑假,至于在本科时也在教科书上好象见过就不说了,呵呵。一直没有搞明白到底是怎么回事,直到昨天晚上看到这个例子 ,再加上前段时间看了 c epert programing 对c语言有了进一步的了解,终于搞明白了。呵呵 回首往事 ,发现关键在于,以前不明白 同一个数 在左是址,在右是值,所以上面pISR_UNDEF=(unsigned)HaltUndef;是把HaltUndef地址值 存放到(*(unsigned *)(_ISR_STARTADDRESS+0x4))这个地址中 呵呵 现在 总算拨开云雾见天日,其他相关问题便迎任而解了
转载地址:http://eisci.baihongyu.com/