您的位置 首页 电子

AVR中止使用规划关键

AVR的中断源比较多,尤其是ATmega128,一共有35个外部以及内部中断源。通常情况下,Flash程序存储器空间的最低位置(0x0000-0x0045)定义

AVR的中止源比较多,尤其是ATmega128,一共有35个外部以及内部中止源。一般情况下,Flash程序存储器空间的最低方位(0x0000-0x0045)界说为复位和中止向量空间。完好的中止向量见第二章表2-23。在中止向量表中,处于低地址的中止向量所对应的中止具有高优先级,所以,体系复位RESET具有最高优先级。

https://img.86ic.net/2020/09/416c03f26c6d20053c0fad3b0500a9d4.png
A.中止规划留意点:
1.具有Bootloader功用的AVR,其中止向量区能够在Flash程序存储器空间最低方位和Bootloader区的头部来回搬迁,这首要用于合作Bootloader程序的运用。假如不运用Bootloader功用,一般不要中止向量区进行搬迁。
2.Flash较小的AVR芯片,其一个中止向量占有1个字的空间,用于放置一条相对搬运RJMP指令(规模-2K~+2K字),跳到中止服务程序。关于不运用的中止,在中止向量区中应放置1条中止回来指令RETI,增强程序的抗干扰性。
3.ATmega128的Flash空间为64K字节,因而它的一个中止向量占有2个字的空间,用于放置一条肯定搬运JMP指令(指令长度为2个字),跳到中止服务程序。关于不运用的中止,在中止向量区中应接连放置2条中止回来指令RETI,增强程序的抗干扰性。当运用汇编言语编写体系程序时应留意。
4.当MCU呼应一个中止时,其硬件体系会主动中止回来地址压入体系仓库,并将封闭大局中止呼应(硬件将中止标志I位清0),铲除该中止的中止标志位;履行中止回来指令RETI时,硬件会先答应大局中止呼应(硬件将中止标志I方位1),然后从体系仓库中弹出回来地址到PC程序计数器中,持续履行被中止打断的程序。除此之外,MCU的硬件没有对中止维护做其他处理。
5.因而,用户在编写中止服务程序时,首要要编写中止现场维护程序,如维护MCU的状况寄存器等。在中止回来之前,不要忘掉康复中止现场。
6.假如设置和答应外部中止呼应,即便是外部INT0..7引脚设置为输出办法,在引脚上的电平改变也会触发外部中止的发生,这一特性供给了运用软件发生中止的途径。
7.外部中止可挑选选用上升沿触发、下降沿触发以及电平改变(由高变低或由低变高)和低电平触发等办法,无外部高电平触发办法。详细触发办法由外部中止操控寄存器EICRA(INT3:0)和EICRB(INT7:4)决议。
8.假如挑选外部低电平办法触发中止时应特别留意:(1)引脚上的低电平有必要一向坚持到当时一条指令履行完成后才干触发中止;(2)低电平中止并不置位中止标志位,即外部低电平中止的触发不是由于中止标志位引起的,而是外部引脚上电平取反后直接触发中止(当然需求敞开大局中止答应)。因而,在运用低电平触发办法时,中止请求将一向坚持到引脚上的低电平消失停止。唤句话说,只需中止引脚的输入引脚坚持低电平,那么将一向触发发生中止。所以,在低电平中止服务程序中,应有相应的操作指令,操控外部器材开释或撤销加在外部引脚上的低电平。
B.中止优先级以及中止嵌套处理
1.AVR中止的优先级由该中止向量在中止向量区中的方位确认,处于低地址的中止向量所对应的中止具有高优先级,所以,体系复位RESET具有最高优先级。
2.当两个中止一起发生请求中止时,MCU先呼应中止优先级高的中止。低优先级的中止一般将坚持中止标志位的状况(外部低电平中止在外),等候MCU呼应处理。
3.MCU呼应一个中止后,在进入中止服务前已由硬件主动清零大局中止答应位。因而此刻即便有更高优先级的中止请求发生,MCU也会不呼应,要等履行到RETI指令,从本次中止回来,并履行了一条指令后,才干持续呼应中止。所以,在缺省情况下,AVR的中止不能嵌套。AVR中止的优先级仅仅在有多个中止一起发生时才起作用,此刻MCU将首要呼应高优先级的中止。
4.AVR中止嵌套处理是经过软件办法完成的。如在B中止服务中,如需求MCU能及时的呼应A中止(不是等本次中止回来后再呼应),B中止的服务程序应这样规划:(1)B中止的现场维护;(2)屏蔽除A以外其它的中止答应标志;(3)用指令SEI敞开答应大局中止;(4)B中止服务;(5)用指令CLI制止大局中止(6)康复在本中止程序被屏蔽的中止答应标志;(7)B中止现场康复;(8)B中止回来。
5.选用软件办法完成中止嵌套处理的长处,是能够让程序员能够依据不同的实际情况和需求来决议中止的重要性,有愈加灵敏的手法处理中止呼应和中止嵌套,如让低优先级的中止(此刻很重要)打断高优先级中止的服务等,但一起也增加了编写中止服务程序的复杂性。
6.由于AVR的指令履行速度比较高,因而在一般情况下,不主张运用中止嵌套的处理办法。当然,这还需求用户在编写中止处理服务程序中,应遵从中止服务程序尽量要短的准则。
C.高档言语开发环境中中止服务程序的编写
1.在高档言语开发环境中,都扩展和供给了相应编写中止服务程序的办法,但不同高档言语开发环境中对编写中止服务程序的语法规矩和处理办法是不同的。用户在编写中止服务程序前,应对所运用开发渠道,中止程序的编写办法,中止的处理办法等有较好的了解。
2.运用ICCAVR、CVAVR、BASCOM-AVR等高档言语编写中止服务程序时,一般不用考虑中止现场维护和康复的处理,由于编译器在编译中止服务程序的源代码时,会在生成的方针代码中主动参加相应的中止现场维护和康复的指令。
3.假如用户要编写功率更高或特别的中止服务程序,能够选用嵌入汇编、封闭编译体系的主动发生中止现场维护和康复代码等办法,但程序员要对所运用的开发环境有更深的了解和把握,并具有较高的软件规划能力。本人中给出的USART接纳和发送中止服务程序(运用CVAVR开发渠道)便是一个十分典型的示例。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/254539.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部