第7章中断系统_第1页
第7章中断系统_第2页
第7章中断系统_第3页
第7章中断系统_第4页
第7章中断系统_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第7章 AVR中断系统与基本应用2一、中断概念n中断:指计算机(MCU)自动响应一个“中断请求”信号,暂时停止(中断)了当前程 序的执行,转而执行为外部设备服务的程序(中断服务程序),并在执行完服务程序后自动 返回原程序执行的过程3中断的优点n实现实时处理n实现分时操作,提高了MCU的效率n进行故障处理n待机状态的唤醒4中断处理过程5中断相关的概念中断源n什么可以引起中断?n有人按了门铃了n电话铃响了n你的闹钟闹响了n你烧的水开了n等等诸如此类的事件,我们把可以引起中断的称之为中断源,n专业术语:指能够向指能够向 MCU 发出中断请发出中断请求信号的部件和设备。求信号的部件和设备。 6中断相

2、关的概念中断源n单片机中也有一些可以引起中断的事件,如:定时器溢出、外部中断、串口接收到数据等nAVR Mega16 一共有21个中断源n3个外部中断 INT0、INT1、INT2n8个定时器中断n3个串口中断 RXC、TXC、UDREnSPI、AD、EEPROM、模拟比较、TWI、SPM各一个nRESET中断7中断相关的概念中断信号n中断信号是指内部或外部中断源产生的中断申请信号 n分类如下: 脉冲的上跳沿或下降沿(上升沿触发型或下降沿触发型) 高电平或低电平(电平触发型) 电平的变化(状态变化触发型) 8中断相关的概念中断向量n中断源发出的请求信号被 CPU 检测到之后,如果单片机的中断控

3、制系统允许响应中断, CPU 会自动转移,执行一个固定的程序空间地址中的指令。这个固定的地址称作中断入口地 址,也叫做中断向量。 9中断相关的概念中断优先级n我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?n如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。n如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常的习惯去处理。n单片机中也有优先级的问题n优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,n比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电

4、话响了情况。考虑一下我们会怎么办吧。 10中断相关的概念中断优先级nAVR M16 21个中断源的优先级向量号向量号程序地程序地址址中断源中断源中断定义中断定义向量向量号号程序地址程序地址中断源中断源中断定义中断定义1 1$000 $000 RESET RESET 外部引脚电平引发的复位,上电复位,外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及掉电检测复位,看门狗复位,以及JTAG AVR JTAG AVR 复位复位1212$016 $016 USART, USART, RXC RXC USARTUSART, Rx Rx 结束结束2 2$002 $002 INT0 INT0

5、外部中断请求外部中断请求0 0 1313$018 $018 USART, USART, UDRE UDRE USART USART 数据寄存器空数据寄存器空3 3$004 $004 INT1 INT1 外部中断请求外部中断请求1 1 1414$01A $01A USART, USART, TXC TXC USARTUSART, Tx Tx 结束结束4 4$006 $006 TIMER2 TIMER2 COMP COMP 定时器定时器/ / 计数器计数器2 2 比较匹配比较匹配1515$01C $01C ADC ADC ADC ADC 转换结束转换结束5 5$008 $008 TIMER2 TI

6、MER2 OVF OVF 定时器定时器/ / 计数器计数器2 2 溢出溢出1616$01E $01E EE_RDY EE_RDY EEPROM EEPROM 就绪就绪6 6$00A $00A TIMER1 TIMER1 CAPT CAPT 定时器定时器/ / 计数器计数器1 1 事件捕捉事件捕捉1717$020 $020 ANA_COMP ANA_COMP 模拟比较器模拟比较器7 7$00C $00C TIMER1 TIMER1 COMPA COMPA 定时器定时器/ / 计数器计数器1 1 比较匹配比较匹配 A A 1818$022 $022 TWI TWI 两线串行接口两线串行接口8 8$

7、00E $00E TIMER1 TIMER1 COMPB COMPB 定时器定时器/ / 计数器计数器1 1 比较匹配比较匹配B B 1919$024 $024 INT2 INT2 外部中断请求外部中断请求2 2 9 9$010 $010 TIMER1 TIMER1 OVF OVF 定时器定时器/ / 计数器计数器1 1 溢出溢出2020$026 $026 TIMER0 TIMER0 COMP COMP 定时器定时器/ / 计数器计数器0 0 比较比较匹配匹配1010$012 $012 TIMER0 TIMER0 OVF OVF 定时器定时器/ / 计数器计数器0 0 溢出溢出2121$028

8、 $028 SPM_RDY SPM_RDY 保存程序存储器内容就保存程序存储器内容就绪绪1111$014 $014 SPI, STC SPI, STC SPI SPI 串行传输结束串行传输结束中断相关的概念中断屏蔽n非屏蔽中断n可屏蔽中断n软件中断1112中断相关的概念中断响应n当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书)n电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。n每个中断产生后都到一个固定的地方去找处理这个

9、中断的程序13中断相关的概念中断响应过程n中断响应可以分为以下几个步骤:n1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。n2、寻找中断入口,根据21个不同的中断源所产生的中断,查找21个不同的入口地址。在这21个入口地址处存放有中断处理程序n3、执行中断处理程序。n4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。 14中断相关的概念中断响应条件n我们人可以响应外界的事件,是因为我们有多种“传感器“眼、耳可以接受不同的信息nAVR工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1“,如果是1,就说明有中断请求了,所以所谓中断,其实也是查

10、询,不过是每个周期都查一下而已。n相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话15中断相关的概念中断响应条件n允许AVR响应中断n使能全局中断允许位I(SREG)n使能中断源对应中断控制位n中断源请求中断,即置位相应的中断标志位n硬件置位、清零n软件置位、清零AVR中断控制nAVR一般拥有数十个中断源,每个中断源都有独立的中断向量。缺省情况下,AVR的程序存储区的最低端,即从Flash地址的0 x0000开始用于放置中断向量,称作中断向量区。n各种型号的AVR中断向量区的大小是不同的,由下式决定:n中断向量区大小 = 中断源个数 * 每个中断向量占据

11、字数 16AVR中断控制n对于Flash比较小的AVR处理器,每个中断向量占据一个字的空间,用于放置一条相对转移指令rjmp(跳转范围-2k+2k),而Flash较大的AVR,每个中断向量占据两个字空间,用于放置一条绝对转移指令jmp,用于跳转到相应中断的中断服务程序的起始地址。 17n系统复位RESET中断,也被称作系统复位源。RESET是一个特殊的中断源,是AVR中唯一的不可屏蔽的中断。当ATmega16由于各种原因被复位后,程序将跳到复位向量(缺省为0 x0000)处,在该地址处通常放置一条跳转指令,跳转到主程序继续执行18nINT0、INT1和INT2是3个外部中断源,它们是分别由芯片

12、外部引脚PD2、PD3、PB2上的电平的变化或状态触发的。通过对控制寄存器MCUCR和控制与状态寄存器MCUCSR的配置,外部中断可以定义为由PD2、PD3、PB2引脚上的电平的下降沿、上升沿、逻辑电平变化,或者低电平(INT2仅支持电平变化的边沿触发)触发,这为外部硬件电路和设备向AVR申请中断服务提供了很大方便。nTIMER2 COMP、TIMER2 OVF、TIMER1 CAPT、TIMER1 COMPA、TIMER1 COMPB、TIMER1 OVF、TIMER0 OVF、TIMER0 COMP这8个中断是来自于ATmega16内部的3个定时计数器触发的内部中断。 19nUSART R

13、XC、USART TXC、USART UDRE是来自于ATmega16内部的通用同步/异步串行接收和转发器USART的3个内部中断。当USART串口完整接收一个字节、成功发送一个字节以及发送数据寄存器为空时,这3个中断会分别被触发。n还有其它6个中断也是来自ATmega16内部,它们分别由芯片内部集成的各个功能模块产生,其中:SPI STC为内部SPI串行接口传送结束中断,ADC为ADC单元完成一次A/D转换的中断,EE_RDY是片内的EEPROM就绪(对EEPROM的操作完成)中断,ANA_COMP是由内置的模拟比较器输出引发的中断,TWI为内部两线串行接口的中断,SPM_RDY是对片内的F

14、lash写操作完成中断。20ATmega16的中断控制 n中断优先级的确定 n中断标志 nAVR有两种机制不同的中断:带有中断标志的中断(可挂起)和不带中断标志的中断(不能挂起)。n中断屏蔽与管理 n中断嵌套 2122中断相关的概念AVR中断响应过程nMCU响应中断时:n将当前PC指针指向地址(中断返回地址)由硬件自动压入系统堆栈n硬件自动关闭全局中断,I位清零n硬件清对应中断标志位n执行中断服务程序(用户程序)n返回时执行RETI中断返回指令n硬件置位全局中断In从堆栈弹出返回地址给PC指针23中断相关的概念-中断服务程序n每个中断源对应一个固定的地址,又称中断入口地址n当满足中断条件时,P

15、C指针自动指向对应的中断入口地址,该地址处的指令被执行n在中断入口处放置一条跳转到对应中断服务程序的指令即可实现中断服务程序与中断源的对应24中断相关的概念-中断服务程序n进入中断服务程序,必须先保护中断现场,保存R0R31及SREG等重要寄存器内容,一般是将其压入堆栈n中断返回时,要恢复中断现场,即将其弹出堆栈n上述几点,在汇编程序设计是要特别注意中断相关的概念-中断服务程序n在CVAVR中,中断服务程序必须定义成一个特殊的函数,称为中断服务函数。中断服务函数按以下格式定义: ninterrupt 中断向量号 void 函数名 (void) n n /函数体 n n其中,关键字interru

16、pt声明了该函数为中断服务函数,用以区别于一般软件调用的函数。方括号和方括号中的中断向量号则进一步说明该函数是哪一个中断的服务函数。由于中断函数是MCU响应中断时通过硬件自动调用,因此中断函数的返回值和参数均为void(不能返回函数值,以及带参数)。中断函数的命名规则与一般函数相同。 25ninterrupt EXT_INT1 void ext_int1_isr(void) / 外部中断INT1的中断服务函数 n n; / 中断服务函数 n n/ 主程序 nvoid main(void) n n; n/ 中断源的初始化 nGICR|=0 x80; / External Interrupt(s)

17、 initialization nMCUCR=0 x08; / INT0: Off nMCUCSR=0 x00; / INT1: On nGIFR=0 x80; / INT2: Off 26n/ 开放全局中断 n#asm(sei) n/ 正常程序开始 nwhile (1) n n; n; n 27中断相关的概念-中断服务程序n中断服务函数只能在中断发生时由硬件自动调用,不能像其他函数一样可以通过软件调用。同时,由于程序中不会出现调用语句,因此中断服务函数只需要定义语句,不需要进行说明nCVAVR在缺省方式下,在生成中断服务函数时,会自动把R0、 R1、 R15、 R22、 R23、 R24、

18、R25、 R26、 R27、 R30、 R31、SREG,以及用户程序中使用的所有通用寄存器保护起来。如果用户要编写效率更高或特殊的中断服务程序,可以采用关闭编译系统的自动产生中断现场保护和恢复代码功能,嵌入汇编代码等方式自己编写相关的程序。此时需要程序员对CVAVR开发环境有更深的了解和掌握,并具备较高的软件设计能力。读者可以通过下面一个简单的例子,体会如何在CVAVR中编写效率更高的中断程序。 2829中断相关的概念-中断服务程序n在ICC AVR中,可以通过一下语句定义一个中断服务程序,并自动完成现场保护#pragma interrupt_handle :如:#pragma interr

19、upt_handler timer0_ovf_isr:iv_TIMER0_OVFvoid timer0_ovf_isr(void) TCNT0 = tcount;30中断相关的概念-AVR外部中断nM16 有3个外部中断 INT0、INT1和INT2n对应PD2、PD3和PB2n只要使能外部中断,对应引脚的电平变化就会引起中断31中断相关的概念-AVR外部中断n工作模式n低电平触发模式n电平变化触发模式n下降沿触发模式n上升沿触发模式中断相关的概念-AVR外部中断n低电平触发是不带中断标志类型的,即只要中断输入引脚PD2或PD3保持低电平,那么将一直会产生中断申请nMCU对INT0和INT1的

20、引脚上的上升沿或下降沿变化的识别(触发),需要I/O时钟信号的存在(由I/O时钟同步检测),属于同步边沿触发的中断类型。n MCU对INT2的引脚上的上升沿或下降沿变化的识别(触发),以及低电平的识别(触发)是通过异步方式检测的,不需要I/O时钟信号的存在。因此,这类触发类型的中断经常作为外部唤醒源,用于将处在Idle休眠模式,以及处在各种其它休眠模式的MCU唤醒。这是由于除了在空闲(Idel)模式时,I/O时钟信号还保持继续工作,在其它各种休眠模式下,I/O时钟信号均是处在暂停状态的。 32n如果使用低电平触发方式的中断作为唤醒源,将MCU从掉电模式(Power-down)中唤醒时,电平拉低

21、后仍需要维持一段时间才能将MCU唤醒,这是为了提高了MCU的抗噪性能。拉低的触发电平将由看门狗的时钟信号采样两次(在通常的5V电源和25时,看门狗的时钟周期为1s)。如果电平拉低保持2次采样周期的时间,或者一直保持到MCU启动延时(start-up time)过程之后,MCU将被唤醒并进入中断服务。如果该电平的保持时间能够满足看门狗时钟的两次采样,但在启动延时(start-up time)过程完成之前就消失了,那么MCU仍将被唤醒,但不会触发中断进入中断服务程序。所以,为了保证既能将MCU唤醒,又能触发中断,中断触发电平必须维持足够长的时间。33n如果设置了允许响应外部中断的请求,那么即便是引

22、脚PD2、PD3、PB2设置为输出方式工作,引脚上的电平变化也会产生外部中断触发请求。这一特性为用户提供了使用软件产生中断的途径。3435AVR外部中断方式选择nMCU 控制寄存器 INT0、INT1ISCx1 ISCx1 ISCx0 ISCx0 说明说明0 0 INTx 为低电平时产生中断请求为低电平时产生中断请求0 1 INTx引脚上任意的逻辑电平变化都将引发中断引脚上任意的逻辑电平变化都将引发中断1 0 INTx 的下降沿产生异步中断请求的下降沿产生异步中断请求1 1 INTx 的上升沿产生异步中断请求的上升沿产生异步中断请求nMCU对INT0、INT1引脚上电平值的采样在边沿检测前。如

23、果选择脉冲边沿触发或电平变化中断的方式,那么在INT0、INT1引脚上的一个脉宽大于一个时钟周期的脉冲变化将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发中断,那么低电平必须保持到当前指令执行完成才触发中断。如果是低电平触发方式的话,中断请求将一直保持到引脚上的低电平消失为止。 3637AVR外部中断方式选择nMCU 控制与状态寄存器INT2ISC2 ISC2 说明说明0 INT2下降沿产生中断请求下降沿产生中断请求1 INT2上升沿产生中断请求上升沿产生中断请求38AVR外部中断方式选择nINT0、INT1若工作在边沿触发模式,要求IO时钟工作nINT0、INT1若工作在低电平触发模式,只要外部低电平存在,就一直处于触发状态nINT2是异步边沿触发,不要求IO时钟,但脉冲最小宽度不能小于50nS39AVR外

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论