首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

s2c2440中IRQ返回。该如何处理

2012-03-01 
s2c2440中IRQ返回。IRQ的中断程序无法返回。代码如下,不知道那里出了问题。HandlerIRQBLIRQ_Funmovpc ,lr////

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 请留意
[解决办法]
确定是中断函数无返回吗?确定已经进入中断函数吗?
查看一下反汇编代码,看看函数结束那段有没有什么问题
[解决办法]
可以使用交叉模式,挺会显示源码和汇编码,有利于问题的分析。

热点排行