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