当前位置: 代码迷 >> 驱动开发 >> s2c2440中IRQ返回。该如何处理
  详细解决方案

s2c2440中IRQ返回。该如何处理

热度:101   发布时间:2016-04-28 11:16:13.0
s2c2440中IRQ返回。
IRQ的中断程序无法返回。代码如下,不知道那里出了问题。

HandlerIRQ
  BL IRQ_Fun
  mov pc ,lr  
///////////////////////////////////////////////////////////////////

void Port_Init()
{
  rINTMSK = 0xffffffe0;
  rEINTMASK = 0xffffe0; 
  rGPFCON = 0xaaaa;
  rGPFUP = 0xf;
}



 __irq void IRQ_Fun()
{
switch (rINTPND)
{
case BIT_EINT1 :
rGPBDAT = 0x1c0;
break;
case BIT_EINT2 :
rGPBDAT = 0x160;
break;
case BIT_EINT0 :
rGPBDAT = 0x0e0;
break;
case BIT_EINT4_7:
rGPBDAT = 0x000;
break;  
}

rSRCPND &= ~(0x1f); 
rINTPND &= ~(0x1f);
rEINTPEND &=~(0x1f);

}

------解决方案--------------------
你要不然把__irq去掉 用BL call
要不然留着__irq 用B jump过去
ARM得返回PC/LR不用mode有不同偏移 4 or 8 bytes 请留意
------解决方案--------------------
确定是中断函数无返回吗?确定已经进入中断函数吗?
查看一下反汇编代码,看看函数结束那段有没有什么问题
------解决方案--------------------
可以使用交叉模式,挺会显示源码和汇编码,有利于问题的分析。
  相关解决方案