body, table{font-family: 微软雅黑; font-size: 13.5pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

三个外部中断INT0,INT1,INT2;对应由芯片外部引脚PD2、PD3、PB2上的电平的变化或状态作为中断触发信号。
    INT0、INT1、INT2的中断触发方式取决于用户程序对MCU控制寄存器(MCUCR)以及MCU控制与状态寄存器(MCUCSR)的设定。其中,INT0和INT1支持4种中断触发方式,INT2支持2种。
INT0 INT1 INT2 说明
上升沿触发 Yes Yes Yes(异步)
下降沿触发 Yes Yes Yes(异步)
任意电平变化触发 Yes Yes ——
低电平触发 Yes Yes —— 无中断标志
任意电平变化触发表示只要引脚上有逻辑电平的变化就会产生中断申请(不管是上升沿还是下降沿都引起中断触发)。
▋低电平触发是不带中断标志类型的,即只要中断输入引脚PD2或PD3保持低电平,那么将一直会产生中断申请。
▋MCU对INT0和INT1的引脚上的上升沿或下降沿变化的识别(触发),需要I/O时钟信号的存在(由I/O时钟同步检测),属于同步边沿触发的中断类型。
▋MCU对INT2的引脚上的上升沿或下降沿变化的识别(触发),以及低电平的识别(触发)是通过异步方式检测的,不需要I/O时钟信号的存在。因此,这类触发类型的中断经常作为外部唤醒源,用于将处在 Idle 休眠模式,以及处在各种其它休眠模式的 MCU 唤醒。这是由于除了在空闲(Idel)模式时,I/O 时钟信号还保持继续工作,在其它各种休眠模式下,I/O 时钟信号均是处在暂停状态的。
▋如果设置了允许响应外部中断的请求,那么即便是引脚PD2、PD3、PB2设置为输出方式工作,引脚上的电平变化也会产出外部中断触发请求。这一特性为用户提供了使用软件中断的途径

与外部中断相关的寄存器和标志位
  除了寄存器SREG中的全局中断允许标志位I外,与外部中断有关的寄存器有4个,共有11个标志位。其作用分别是3个外部中断各自的中断标志位中断允许控制位,和用于定义外部中断的触发类型
1)、MCU控制寄存器——MCUCR    (ATmega328P EICRA - External Interrupt Control Register A外部中断控制寄存器A(0x69))
    MCU控制寄存器MCUCR的低4位为INT0(ISCO1,ISC00)INT1(ISC11、ISC10)中断触发类型控制位,中断触发方式:
7 6 5 4 3 2 1 0
$35($0055) SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00
读/写 R/W  R/W  R/W  R/W  R/W  R/W  R/W  R/W
初始化值 0 0 0 0 0 0 0 0
INT0、INT1的中断触发方式
ISCn1 ISCn0 中断触发方式
0 0 INTn的低电平产生一个中断请求
0 1 INTn的下降沿和上升沿都产生一个中断请求
1 0 INTn的下降沿产生一个中断请求
1 1 INTn的上升沿产生一个中断请求
MCU对INT0、INT1引脚上电平值的采样在边沿检测前。如果选择脉冲边沿触发或电平变化中断的方式,那么在INT0、INT1引脚上的一个脉宽大于一个时钟周期的脉冲变化将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发中断,中断请求将一直保持到引脚上的低电平消失为止。
2)、MCU控制和状态寄存器——MCUCSR
    MCU控制和状态寄存器MCUCSR中的第6位(ISC2)为INT2的中断触发类型控制位
7 6 5 4 3 2 1 0
$34($0054) JTD ISC2 —— JTRF WDRF BORF EXTPF PORF
读/写 R/W R/W R R/W R/W R/W R/W R/W
初始化值 0 0 0 复位标志 复位标志 复位标志 复位标志 复位标志
ISC2 中断触发方式
0 INT2的下降沿产生一个异步中断请求
1 INT2的上升沿产生一个异步中断请求
3)、通用中断控制寄存器——GICR
   通用中断控制寄存器GICR的高3位为INT0、INT1和INT2的中断允许控制位,如果SREG寄存器中的全局中断I位为“1”,以及GICR寄存器中相应的中断允许位别置为“1”,当外部引脚INT0(或INT1、或INT2)上的电平变化时,MCU将会响应相应的中断请求。
7 6 5 4 3 2 1 0
$3B($005B) INT1 INT0 INT2 —— —— —— IVSEL IVCE
读/写 R/W R/W R/W R R R R/W R/W
初始化值 0 0 0 0 0 0 0 0

//针对ATmega328P,叫做外部中断屏蔽寄存器
ATmega328P EIMSK - External Interrupt Mask Register 外部中断屏蔽寄存器(0x3D)

Bit 7 6 5 4 3 2 1 0
0x1D(0x3D) - - - - - - INT1 INT0
读/写 R R R R R R R R
初始值 0 0 0 0 0 0 0 0


4)、通用中断标志寄存器——GIFR
    通用中断标志寄存器GIFR的高3位为INT0、INT1和INT2的中断标志位
7 6 5 4 3 2 1 0
$3A($005A) INTF1 INTF0 INTF2 —— —— —— —— ——
读/写 R/W R/W R/W R R R R R
初始化值 0 0 0 0 0 0 0 0

//针对ATmega328P,叫做外部中断标志寄存器

ATmega328P EIFR - External Interrupt Flag Register 外部中断标志寄存器(0x3C)

7 6 5 4 3 2 1 0
0x1C(0x3C) - - - - - - INTF1 INTF0
读/写 R R R R R R R/W R/W
初始化值 0 0 0 0 0 0 0 0


 当 INT2..0 引脚上的有效事件满足中断触发条件后,INTF2..0 位会变成“1”。如果此时 SREG 寄存器中 I = 1,以及 GICR 寄存器中的 INTn 被置为“1”MCU 将响应中断请求,跳至相应的中断向量处开始执行中断服务程序,同时硬件自动将 INTFn 标志位清零。

注意:用户可以使用指令将 INTFn 清除,清除的方式是写逻辑“1”到 INTFn,将标志清零。另外,当INT0(INT1) 设置为低电平触发方式时,标志位 INTF0(INTF1) 始终为“0”,这并不意味着不产生中断请求,而是低电平触发方式是不带中断标志类型的中断触发。在低电平触发方式时,中断请求将一直保持到引脚上的低电平消失为止。
   在系统程序的初始化部分中对外部中断进行设置时(定义或改变触发方式),应先将GICR寄存器中该中断允许位清零,禁止MCU响应该中断后再设置ISCn位(中断触发方式)。
   在开放中断允许前,一般应通过向GIFR寄存器中的中断标志位INTFn写入逻辑“1”,将该中断的中断标志位清零,然后开放中断。这样可以防止在改变ISCn的过程中误触发中断。
GICR|=0xC0;  //允许INT0、INT1中断 1100 0000
MCUCR=0x0A;  //INT0、INT1下降沿触发 0000 1010
GIFR=0xC0;  //清除INT0、INT1中断标志位 1100 0000
//全局中断允许;
/* 注: */
ATmega328P中,EICRA - External Interrupt Control Register A、EIMSK - External Interrupt Mask Register 外部中断屏蔽寄存器、EIFR - External Interrupt flag Register 外部中断标志寄存器。三个寄存器中,要触发外部中断,SREG.7全局中断允许标志位I为1,外部中断屏蔽寄存器(外部中断允许标志位)中的对应外部中断位为1(中断允许),EIFR外部中断标志位为1(中断标志位),即可触发中断。即:外部中断满足触发条件EIFR(对应位) = 1,,并且SREG.7 = 1 和 EIMSK(对应位) = 1


嵌入式单片机,ATmega328P,外部中断INT0,INT1,INT2,中断标志位介绍的更多相关文章

  1. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  2. 51单片机外部中断INT0实例(汇编程序)

    ;普中51开发板 ;单片机的P3.2(INT0)引脚与按键K3脚连接 ;用汇编语言实现:按一次K1外部中断INT0响应一次,LED显示值加1(十进制), ;前提是共阴数码LED第一位,需要设定,由P0 ...

  3. AVR 嵌入式单片机芯片的中断系统介绍

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  4. 中断源记录 INT0 INT1

    中断源记录 INT0 INT1 用到一个单片机 使用的 P3.1 P3.3 作为唤醒口,后来发一 P3.1 和 P3.3 使用的同一个中断 INT1,这个尴尬了,只能两选 一. 查看规格书,还好 P3 ...

  5. dsp28377控制DM9000收发数据——第三版程序,通过外部引脚触发来实现中断接受数据,优化掉帧现象

    //-------------------------------------------------------------------------------------------- - //D ...

  6. 嵌入式单片机之stm32串口你懂了多少!!

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  7. 关于使用单片机读取外部电压ADC阻抗匹配的问题

    单片机的基准电压一般为3.3V,如果外部信号超过了AD测量范围,可以采用电阻分压的方法,但是要注意阻抗匹配问题.比如,SMT32的模数输入阻抗约为10K,如果外接的分压电阻无法远小于该阻值,则会因为信 ...

  8. STM32嵌入式开发学习笔记(五):中断

    我们过去了解了用循环实现延时,或用系统滴答计时器实现延时,但这两种方法都有一种问题:会阻塞处理器的运行.下面我们学习一种不阻塞处理器运行其他事件的功能:时钟中断. 所谓中断,就是让处理器放下手头的事情 ...

  9. 单片机C语言中标志位的经典应用

    /* 本例程是C语言的位域操作示例 这里为什么位域结构体与联合体一起使用? -->因为这样定义后,即可以单独使用标志位 也可同时使用整个字节数据 主要应用:单片机C语言 好处:用标志位可以节省R ...

随机推荐

  1. ubuntu Fcitx 输入法 选择 黑框问题 解决方案

    在虚拟机装了个xubuntu,弄好fcitx 输入法后,打字时看不到选择框,被黑框折腾的不行,后来了一个方法,暂时解决了问题. 用 killall fcitx-qimpanel 结束 fcitx-qi ...

  2. 容器中的诊断与分析3——live diagnosis——lldb

    windows下,我们对于.net程序发生Crash,资源泄露,死锁等问题的分析,有神器windbg .net core程序运行在linux上时,该怎么进行对对Core Dump文件进行分析呢?今天介 ...

  3. php动态获取网页图片路径~

    <?phpheader("Content-type:text/html;charset=utf-8"); 请求的url $url = 'http://dsc.taobaocd ...

  4. 第 10 章 容器监控 - 081 - Weave Scope 多主机监控

    除了监控容器,Weave Scope 还可以监控 Docker Host 点击顶部 HOSTS 菜单项,地图将显示当前 host. 与容器类似,点击该 host 图标将显示详细信息 host 当前的资 ...

  5. JavaScript如何生成思维导图(mindmap)

    JavaScript如何生成思维导图(mindmap) 一.总结 一句话总结:可以直接用gojs gojs 二.一个用JavaScript生成思维导图(mindmap)的github repo(转) ...

  6. linux与windows实现文件交互

    Linux--用SecureCRT来上传和下载文件 SecureCRT下的文件传输协议有以下几种:ASCII.Xmodem.Ymodem.Zmodem ASCII:这是最快的传输协议,但只能传送文本文 ...

  7. git与github工具使用

    这篇文章主要的目标是用较少的时间学习Git和GitHub的基本使用.在足够一般使用的前提下,尽量减少命令.如果需要其他命令,到时候再去其他地方了解就行了. 总概:所有命令前都要加 git,如下的ini ...

  8. Cookie、Session和自定义分页

    一.cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响, ...

  9. 【Java】【13】两个double类型比较大小

    /** * @return >0,第一位数大 */ public static int compare(double double1, double double2) { BigDecimal ...

  10. [springMvc] 源码分析笔记(二)

    1.SpringMvc 中核心Servlet的继承结构图 2.HttpServletBean public abstract class HttpServletBean extends HttpSer ...