|
s3c44b0x 对于中断的一点疑惑,并且自己写的中断不进服务程序求助
[复制链接]
首先我有一些疑问,如果产生EXT0的中断,cpu处理的过程是不是应该首先跳转到0x18执行IRQ中断服务程序,执行完以后在跳转到0x20执行EXT0的服务程序?这个跳转到0x20是cpu自动完成的么?还是要把代码写到0x18的IRQ中断服务程序实现的?执行0x18和执行0x20有没有先后次序的?如果我在0x18处没有写任何服务程序会发生什么?我找了很多资料都说的不清不楚的。为了测试我的疑惑,我写了一些代码,如下。现在的问题是当有中断产生时,INTPEND,I_ISPR都会有相应的反应,但是不会进入中断服务程序。不知道是不是有什么还没有进行设置?请斧正。不胜感激。
主要程序如下:
void __irq EINT4567Isr(void)
{
Uart_Printf("interrupt happen\r\n");
}
void __irq IRQIsr(void)
{
Uart_Printf("IRQ Interrupt\r\n");
}
void __irq TIMER1Isr(void)
{
Uart_Printf("TIMER1 Interrupt\r\n");
}
void Isr_Init(void)
{
rINTCON=0x1; // Vectored Int. IRQ enable,FIQ disable
rINTMOD = 0;
rINTMSK=BIT_GLOBAL; //disabled int
//以下针对特定的中断口做初始化
rPCONG = rPCONG | 0xff00; //set GPG[7:4] interrupt
rPUPG = rPUPG & 0x00;//pull up resistor disable
setLLInt(4);
setLLInt(5);
setLLInt(6);
setLLInt(7);
// rEXTINT &= 0xffff;
rINTPND=0;
rEXTINTPND=0;
rINTMSK =~(BIT_GLOBAL|BIT_EINT4567|BIT_TIMER1); // 4567 interrupt available. others masked
rI_ISPR=0;
pISR_EINT4567=(unsigned)EINT4567Isr;
pISR_TIMER1=(unsigned)TIMER1Isr;
pISR_IRQ=(unsigned)IRQIsr;
}
void Main(void)
{
Port_Init ();
Uart_Init (0,115200);
Isr_Init();
while(1)
{
;
}
}
|
|