+ -
当前位置:首页 → 问答吧 → 外部中断驱动程序出了问题,恳请各位高手,前辈,指指路!谢谢

外部中断驱动程序出了问题,恳请各位高手,前辈,指指路!谢谢

时间:2011-07-18

来源:互联网

刚开始学习写驱动程序,想用按键触发外部中断,但是只有EINT1响应,其他的2~7都不响应按键,进不到中断服务子程序中~~后来改写后,用AXD测试,不按下按键也会无序的进入到各个中断服务子程序中~~不知道是哪里出了错,请各位高手们帮忙看看,不胜感激!!!!代码如下:
void EINT1_ISR(void)
{
Intr_ClearFlag(Vic_EINT1);
//KeyPress = KEY_ISR_HEAL_SWITCH;
  //OSMboxPost(KeyMbox,&KeyPress);
}
void EINT2_ISR(void)
{
Intr_ClearFlag(Vic_EINT2);
  //KeyPress = KEY_ISR_RETURN;
  //OSMboxPost(KeyMbox,&KeyPress);
}
void EINT3_ISR(void)
{
Intr_ClearFlag(Vic_EINT3);
//KeyPress = KEY_ISR_ALARM_CLEAR;
//OSMboxPost(KeyMbox,&KeyPress);
}
void EINT4_7_ISR(void)
{
Intr_ClearFlag(Vic_EINT4_7);


if(rEINTPEND&(1<<4))
{
KeyPress = KEY_ISR_DOWN;
rEINTPEND |= 1<< 4;
//OSMboxPost(KeyMbox,&KeyPress); 
}
if(rEINTPEND&(1<<5))
{
KeyPress = KEY_ISR_LEFT;
rEINTPEND |= 1<< 5;
//OSMboxPost(KeyMbox,&KeyPress);
}
if(rEINTPEND&(1<<6))
{
KeyPress = KEY_ISR_RIGHT;
rEINTPEND |= 1<< 6;
OSMboxPost(KeyMbox,&KeyPress); 
}
if(rEINTPEND&(1<<7))
{
KeyPress = KEY_ISR_UP;
rEINTPEND |= 1<< 7;
OSMboxPost(KeyMbox,&KeyPress);
}
}

void KeyScan_Init(void)
{
vicIrqDisable(Vic_EINT0 ) ;
vicIrqDisable(Vic_EINT1 ) ;
vicIrqDisable(Vic_EINT2 ) ;
vicIrqDisable(Vic_EINT3 ) ;
vicIrqDisable(Vic_EINT4_7 ) ;
  rGPFCON =( rGPFCON & (~((3<<4)|(3<<0)|(3<<8)|(3<<2)|(3<<6)|(3<<10)|(3<<12)|(3<<12)|(3<<14)))) | ((2<<4)|(2<<0)|(2<<6)|(2<<8)|(2<<2)|(2<<10)|(2<<12)|(2<<14)) ;
rEXTINT0 &= ~(7|(7<<4)|(7<<8)|(7<<16)|(7<<20)|(7<<24)|(7<<28));
rEXTINT0 |= (BOTH_EDGE|(FALLING_EDGE<<4)|(FALLING_EDGE<<8)|(FALLING_EDGE<<16)|(FALLING_EDGE<<20)|(FALLING_EDGE<<24)|(FALLING_EDGE<<28)); //set eint0,1,2,4 falling edge int
  // 4-7 AND 8-2X MUST CONFIG BY FOLLOWING REGISTER
  rEINTPEND |= (1<<4)|(1<<5)|(1<<6)|(1<<7);
  rEINTMASK &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
  rGPFUP =0xffff;  
  ClearPending( (Vic_EINT0<<1)|(Vic_EINT1<<1)|(Vic_EINT2<<1)|(Vic_EINT3<<1) )
   
vicIrqFuncSet(Vic_EINT0 ,EINT0_ISR ) ;
vicIrqFuncSet(Vic_EINT1 ,EINT1_ISR ) ;
vicIrqFuncSet(Vic_EINT2 ,EINT2_ISR ) ;
vicIrqFuncSet(Vic_EINT3 ,EINT3_ISR ) ;
vicIrqFuncSet(Vic_EINT4_7 ,EINT4_7_ISR ) ;

vicIrqEnable(Vic_EINT0 ) ;
vicIrqEnable(Vic_EINT1 ) ;
vicIrqEnable(Vic_EINT2 ) ;
vicIrqEnable(Vic_EINT3 ) ;
vicIrqEnable(Vic_EINT4_7 ) ;
}

作者: zhuxainbin   发布时间: 2011-07-18

中断推出前没有清空

作者: xiaopei1982   发布时间: 2011-07-19

热门下载

更多