外部中断驱动程序出了问题,恳请各位高手,前辈,指指路!谢谢
时间: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 ) ;
}
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28