打印
[AVR单片机]

mega644P外部中断 INT0问题,低电平可以触发中断,边沿触发...

[复制链接]
1968|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcbot|  楼主 | 2018-2-27 09:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mcbot 于 2018-2-27 10:58 编辑

大家好,我用的mega644P-B15AZ  汽车级的。现在要用的外部中断INT1,初始化后始终不能正常工作。我的外部是一个20ms的脉冲,每8s发一个脉冲,用示波器看了一下,波形正常。我用的AVstudio 7.0开发环境。
求指点
现象如下
1、改成低电平触发中断以后,就会不停进中断         2、设置为边沿触发,就永远进入不了中断            
3、设置为边沿触发后,我用另外一个IO口,产生一个方波,直接给INT1引脚,仍然是进不了中断
void INT1_Init(void)
{
        DDRD&= ~(1<<DDD3); //PD3输入
        PORTD|=(1<<PD3);     //内部电阻上拉  50KΩ
        EIMSK=0x00;               /*中断禁用*/  
        EICRA &=~ (1<<ISC11);  
        EICRA |= (1<<ISC10); /*上升沿和下降沿触均发中断*/
        EIFR=0XFF;                /*清除中断标志*/
        EIMSK|=(1<<INT1);   /*中断使能*/
        Feed_TPL5010();
}
中断服务函数 如下:
ISR(INT1_vect)
{
        printf("\n\r INT1\r\n");
        //EIFR=0XFF;
}






相关帖子

沙发
694844985| | 2018-2-27 09:48 | 只看该作者
你没有清中断吧,正常中断程序中需要清中断标志位的

使用特权

评论回复
板凳
mcbot|  楼主 | 2018-2-27 09:51 | 只看该作者
694844985 发表于 2018-2-27 09:48
你没有清中断吧,正常中断程序中需要清中断标志位的

AVR中断,是进入中断服务程序,自动清除中断的,我手动加上,还是不行。

使用特权

评论回复
地板
694844985| | 2018-2-27 13:59 | 只看该作者
那你看下你的信号源吧,试着增加脉冲宽度,看看是不是信号频率过快导致的,或者你手动测下中断输入是否可以

使用特权

评论回复
5
mcbot|  楼主 | 2018-2-27 14:20 | 只看该作者
694844985 发表于 2018-2-27 13:59
那你看下你的信号源吧,试着增加脉冲宽度,看看是不是信号频率过快导致的,或者你手动测下中断输入是否可以 ...

好的,多谢您

使用特权

评论回复
6
Lbsonggz| | 2018-2-28 09:12 | 只看该作者
如下是CV生成的INT1边沿触发Mode的初始化文件,没有必要使能内部的上拉电阻,也没必要清除全部的中断标志。脉冲宽度需要大于50ns(数据来自官方文件)。
另外,低电平触发mode时,进入中断后要马上禁止中断,经过一定时间例如20ms后再使能,要不系统会反复进入中断,很讨厌。

// Interrupt on any change on pins PCINT16-23: Off
// Interrupt on any change on pins PCINT24-31: Off
EICRA=0x04;
EIMSK=0x02;
EIFR=0x02;
PCICR=0x00;

使用特权

评论回复
7
mcbot|  楼主 | 2018-2-28 16:18 | 只看该作者
Lbsonggz 发表于 2018-2-28 09:12
如下是CV生成的INT1边沿触发Mode的初始化文件,没有必要使能内部的上拉电阻,也没必要清除全部的中断标志。 ...

谢谢您,已经解决了,多谢了!

使用特权

评论回复
8
zqx1000| | 2018-4-10 11:28 | 只看该作者

用MODBUS就可以,是毕业设计吧?

使用特权

评论回复
9
sum123456| | 2018-4-11 13:37 | 只看该作者

你没有清中断吧,正常中断程序中需要清中断标志位的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

255

帖子

1

粉丝