代码如下
void __init_portf(void){
rGPFCON=0xFEEA;
//rPRIORITY=0x00000000;
rINTMOD=0x0; //说明为IRQ中断rINTMSK&=~(1<<0|1<<1|1<<2|1<<4); // 使EINT0 EINT1 EINT2 EINT3 EINT4 能够中断
rEINTMASK&=~(1<<4); //打开中断标示 EINT0 EINT1 EINT2 EINT4 0 1111
pISR_EINT0=(unsigned int)IRQ_key4; //登记相关的中断函数
pISR_EINT1=(unsigned int)IRQ_key1;
pISR_EINT2=(unsigned int)IRQ_key3;
pISR_EINT4_7=(unsigned int)IRQ_key2;
}
void IRQ_key1(void){ //EIBT0
unsigned int i=rINTPND;
unsigned int j=rSRCPND;
unsigned int y=rGPFCON;
ClearPending(BIT_EINT1);
Uart_Printf(" interrupt EINT1 !\n");
Uart_Printf("rSRCPND=%d\n",j);
Uart_Printf("rINTPND=%d\n",i);
Uart_Printf("rGPFCON=%d\n",y);
i=rINTPND;
j=rSRCPND;
Uart_Printf("@rINTPND=%d\n",i);
Uart_Printf("@rSRCPND=%d\n",j);
}
void IRQ_key2(void){
rSRCPND|=(1<<4);
rEINTPEND=1<<4;
rINTPND=1<<4;
Uart_Printf(" interrupt EINT4 !\n");
}
void IRQ_key3(void){
ClearPending(BIT_EINT2);
//rSRCPND|=(1<<2);
//rINTPND=1<<2;
Uart_Printf(" interrupt EINT2 !\n");
}
void IRQ_key4(void){
if(rGPFDAT&1){
ClearPending(BIT_EINT0);
//rSRCPND=1;
//rINTPND=1;
Uart_Printf("interrupt EINT0 !\n");
}
}
我把main()里面的while(从pc接收选择测试的部分)去掉了,一直在等待中断,如下
while(1){
/*
Uart_Printf("\nPlease select function : \n");
for(i=0; CmdTip[i].fun!=0; i++)
Uart_Printf("%d : %s\n", i, CmdTip[i].tip);
idx = Uart_GetIntNum_GJ() ;
if(idx<i)
{
(*CmdTip[idx].fun)();
Delay(20);
}
Uart_Printf(" OVER ?\n");
*/
}
可是每次进入中断之后无法返回 出现pabort exception 和undefined instruction command exception ! 可是在key1中断里面打印的端口状态没什么问题!!!
1.请问这是什么问题???()
2.怎么解决? |