ATmega128的中断系统

上传人:仙*** 文档编号:244202123 上传时间:2024-10-03 格式:PPT 页数:28 大小:210KB
返回 下载 相关 举报
ATmega128的中断系统_第1页
第1页 / 共28页
ATmega128的中断系统_第2页
第2页 / 共28页
ATmega128的中断系统_第3页
第3页 / 共28页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ATmega128,的中断系统,ATmega128,的中断源和中断向量,AVR,一般拥有数十个中断源,每个中断源都有独立的中断向量,。,AVR,的程序存储区的最低端,即从,Flash,地址的,0 x0000,开始用于放置中断向量,称作中断向量区。,各种型号的,AVR,中断向量区的大小是不同的,由下式决定:,中断向量区大小,=,中断源个数,每个中断向量占据字数,AVR,的,21,个中断中,包含,1,个非屏蔽中断(,RESET,),3,个外部中断(,INT0,、,INT1,、,INT2,)和,17,个内部中断,,1.,外部中断,INT0,、,INT1,和,INT2,是,3,个外部中断源,它们是分别由芯片外部引脚,PD2,、,PD3,、,PB2,上的电平的变化或状态触发的。通过对控制寄存器,MCUCR,和控制与状态寄存器,MCUCSR,的配置,外部中断可以定义为由,PD2,、,PD3,、,PB2,引脚上的电平的下降沿、上升沿、逻辑电平变化,或者低电平(,INT2,仅支持电平变化的边沿触发)触发。,3,个定时计数器触发的内部中断,MER2 COMP,TIMER2 OVF,定时溢出,2,TIMER1 CAPT,扑捉溢出,1,TIMER1 COMPA,定时比较,A,TIMER1 COMPB,定时比较,B,TIMER1 OVF,定时溢出,2,TIMER0 OVF,定时溢出,0,TIMER0 COMP,定时比较,0,同步,/,异步串行接收和转发器,USART,的内部中断,USART RXC,接收一个字节,USART TXC,发送一个字节,USART UDRE,发送数据寄存器为空,其它内部中断,SPI STC,为内部,SPI,串行接口传送结束中断,ADC,为,ADC,单元完成一次,A/D,转换的中断,EE_RDY,是片内的,EEPROM,就绪(对,EEPROM,的操作完成)中断,ANA_COMP,是由内置的模拟比较器输出引发的中断,TWI,为内部两线串行接口的中断,SPM_RDY,是对片内的,Flash,写操作完成中断,ATmega16,的中断控制,中断优先级的确定,1.,在,AVR,单片机中,一个中断在中断向量区中的位置决定了 它的优先级,位于低地址的中断优先级高于位于高地址的中断。,2,AVR,单片机采用固定的硬件优先级方式,不支持通过软件对中断优先级的重新设定。,AVR,有两种机制不同的中断:,带有中断标志的中断(可挂起),不带中断标志的中断(不能挂起)。,中断标志,在,AVR,中,大多数的中断都属于带中断标志的中断。,中断标志概念,每个中断源在其,I/O,空间寄存器中具有自己的一个中断标志位。,AVR,的硬件系统在每个时钟周期内都会检测(接受)外部(内部)中断源的中断条件。一旦中断条件满足,,AVR,的硬件就会将置位相应的中断标志位(置为“,1”,),表示向,MCU,提起中断请求。,中断标志清除,中断标志位一般在,MCU,响应该中断时,由,硬件自动清除,,或在中断服务程序中通过,读,/,写专门数据寄存器,的方式自动清除。,中断标志位除了由硬件自动清除外也可以使用软件指令清除,注意:如用,软件方法清除,,清除的方法是对其写“,1”,。,不带(不设置)中断标志的中断:,如配置为低电平触发的外部中断即为此类型的中断,低电平中断的重要应用是唤醒处于休眠工作模式的,MCU,。,三、中断屏蔽与管理,为全局中断允许控制位:,中断允许的总控制位,I,(标志寄存器,SREG,中的,I,标志位,SREG.7,),每一个中断源都设置了独立的中断允许位,AVR,对中断采用两级控制方式。,这些中断允许位分散位于各中断源所属模块的控制寄存器中。,AVR,响应一个可屏蔽中断源(假定为,A,中断)的中断的条件是:,1.,响应,A,中断,=,全局中断允许标志,AND,中断,A,允许标志,AND,中断,A,标志,2.AVR,复位后,各个中断允许位以及全局中断允许位均被清零,这保证了程序在开始执行时(一般程序开头是对芯片内部以及外围系统的初始化配置)不会受到中断的干扰。,3.,在,AVR,复位后的用户初始化程序中,需要先对需要使用的中断源进行必要的配置。待系统初始化过程结束后再置位,I,,使系统进入正常的工作状态,开始响应中断请求。,由于,AVR,在响应一个中断的过程中通过硬件将,I,标志位自动清零,这样就阻止了,MCU,响应其它中断。因此通常情况下,,AVR,是不能自动实现中断嵌套的。如要系统中必须要实现中断嵌套的应用,用户可在中断服务程序中使用指令将全局中断允许位开放,通过间接的方式实现中断的嵌套处理。,四、中断嵌套,外部中断触发方式和特点,INT0,、,INT1,、,INT2,的中断触发方式取决于用户程序对,MCU,控制寄存器,MCUCR,以及,MCU,控制与状态寄存器,MCUCSR,的设定。其中,,INT0,和,INT1,支持,4,种中断触发方式,,INT2,支持,2,种。,任意电平变化触发表示只要引脚上有逻辑电平的变化就会产生中断申请(不管是上升沿还是下降沿都引起中断触发),4,种触发方式中,还有以下的一些不同的特点:,低电平触发是不带中断标志类型的,即只要中断输入引脚,PD2,或,PD3,保持低电平,那么将一直会产生中断申请。,2.MCU,对,INT0,和,INT1,的引脚上的上升沿或下降沿变化的识别(触发),需要,I/O,时钟信号的存在(由,I/O,时钟同步检测),属于同步边沿触发的中断类型。,3.MCU,对,INT2,的引脚上的上升沿或下降沿变化的识别(触发),以及低电平的识别(触发)是通过异步方式检测的,不需要,I/O,时钟信号的存在。因此,这类触发类型的中断经常作为外部唤醒源,用于将处在,Idle,休眠模式,以及处在各种其它休眠模式的,MCU,唤醒。这是由于除了在空闲(,Idel,)模式时,,I/O,时钟信号还保持继续工作,在其它各种休眠模式下,,I/O,时钟信号均是处在暂停状态的。,4.,如果使用低电平触发方式的中断作为唤醒源,将,MCU,从掉电模式(,Power-down,)中唤醒时,电平拉低后仍需要维持一段时间才能将,MCU,唤醒,这是为了提高了,MCU,的抗噪性能。拉低的触发电平将由看门狗的时钟信号采样两次(在通常的,5V,电源和,25,时,看门狗的时钟周期为,1s,)。如果电平拉低保持,2,次采样周期的时间,或者一直保持到,MCU,启动延时(,start-up time,)过程之后,,MCU,将被唤醒并进入中断服务。如果该电平的保持时间能够满足看门狗时钟的两次采样,但在启动延时(,start-up time,)过程完成之前就消失了,那么,MCU,仍将被唤醒,但不会触发中断进入中断服务程序。所以,为了保证既能将,MCU,唤醒,又能触发中断,中断触发电平必须维持足够长的时间。,5.,如果设置了允许响应外部中断的请求,则即便是引脚,PD2,、,PD3,、,PB2,设置为输出方式工作,引脚上的电平变化也会产生外部中断触发请求。这一特性为用户提供了使用软件产生中断的途径。,与外部中断相关的寄存器和标志位,在,ATmega16,中,与外部中断有关的寄存器有,4,个,共有,11,个标志位。其作用分别是,3,个外部中断各自的,中断标志位,中断允许控制位,,和用于,定义外部中断的触发类型,。,1,),MCU,中断方式控制寄存器,MCUCR,MCU,控制寄存器,MCUCR,的低,4,位为,INT0,(,ISC01,、,ISC00,)和,INT1,(,ISC11,、,ISC10,)中断触发类型控制位,MCU,对,INT0,、,INT1,引脚上电平值的采样在边沿检测前。,1.,如果选择脉冲边沿触发或电平变化中断的方式,,那么在,INT0,、,INT1,引脚上的一个脉宽大于一个时钟周期的脉冲变化将触发中断,过短的脉冲则不能保证触发中断。,2.,如果选择低电平触发中断,,那么低电平必须保持到当前指令执行完成才触发中断。如果是低电平触发方式的话,中断请求将一直保持到引脚上的低电平消失为止。,2,),MCU,控制和状态寄存器,MCUCSR,MCU,控制和状态寄存器,MCUCSR,中的第,6,位(,ISC2,)为,INT2,的中断触发类型控制位,3,)通用中断允许控制寄存器,GICR,通用中断控制寄存器,GICR,的高,3,位为,INT0,、,INT1,和,INT2,的中断允许控制位。,GICR,寄存器中相应的中断允许位被置为“,1”,,当外部引脚,INT0,(或,INT1,、或,INT2,)上的电平变化时,,MCU,将会响应相应的中断请求。,4,)通用中断标志寄存器,GIFR,中断标志寄存器,GIFR,的高,3,位为,INT0,、,INT1,和,INT2,的中断标志位,当,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,的过程中误触发中断。,中断服务程序的编写中断服务程序的编写,编写中断服务程序的两个基本原则:,1.,全面、仔细考虑中断现场的保护和恢复。,2.,中断服务程序应尽可能的短,不同高级语言开发环境中对编写中断服务程序的语法规则和处理方法是不同的。用户在编写中断服务程序前,应对所使用开发平台,中断程序的编写方法,中断的处理方法等有较好的了解。,使用,ICCAVR,等高级语言编写中断服务程序时,用户通常不必考虑中断现场保护和恢复的处理,这是由于编译器在编译中断服务程序的源代码时,会在生成的目标代码中自动加入相应的中断现场保护和恢复的指令,同时自动采用,RETI,指令作为中断服务的返回指令。,在,ICCAVRR,中,只要用,#,pragma,伪指令和中断向量说明中断服务程序的入口地址。,中断服务函数按以下格式定义:,#,pragma,interrupt_handler,:,如:,INT0,中断服务程序,#,pragma,interrupt_handler,int0_isr:2,void int0_isr,(,void,),中断服务程序,C,编译器会自动帮助用户产生正确的中断向量处的以及初始化堆栈指针的代码,同时在中断服务程序中自动生成中断现场保护和恢复(函数中用到的全部寄存器保护)及使用,RETI,指令返回。,图中使用了两个按键,K1,、,K2,,按键的一端分别与,PD2,(,INT0,)、,PD3,(,INT1,)连接。,INT0,和,INT1,作为外部中断的输入,采用电平变化的下降沿触发方式,当,K1,(,K2,)按下时,会在,PD2,(,PD3,)引脚上产生一个高电平到低电平的跳变,触发,INT0,或,INT1,中断。,外部中断应用实例,硬件电路,应用中断应举例:,定时扫描数码管,INT0,、,INT1,按键下降沿出发中断,使键值分别加减,1,/*,功 能,:INT0,中断函数,使键值加,1 */,#,pragma,interrupt_handler,Int0_isr:2,void Int0_isr(void),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!