您的位置:首页 > 其它

终于 整明白了中断的工作原…

2013-12-19 20:30 1341 查看
原文地址:整明白了中断的工作原理!">终于 整明白了中断的工作原理!作者:小赵
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))这个地址中 呵呵 现在
总算拨开云雾见天日,其他相关问题便迎任而解了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: