首页 > 应用 > 单片机应用
[导读]AVRGCC/WinAVR编译环境中断函数的使用方法

早期版本的avr-libc 对中断服务程序的书写提供了两个宏SIGNAL 和INTERRUPT,并且需要包含两个头文件:avr/signal.h 和avr/interrupt.h。新版(如2007 版WINAVR)中,INTERRUPT 宏不再可用,而建议用ISR 宏替代SIGNAL宏,ISR 和SIGNAL 是一回事,但以后的版本中SIGNAL 宏将会逐渐被丢弃,所以新的程序建议使用ISR,也就是使用ISR作为中断服务函数名,下面将举例说明一些具体的中断使用。

本文引用地址: http://www.21ic.com/app/mcu/201712/745941.htm

一.为什么没有了INTERRUPT?

INTERRUPT 宏是各中断嵌套有关的,当中断程序得到执行时AVR 的硬件将全局的中断允许标记清除,其它中断无法再发生,当中断程序退出时自动被允许。而INTERRUPT宏让编译器所做的就是在中断程序的入口处插入一个SEI 指令,退出处插入一个CLI 指令,使得中断可以嵌套,也许这对于普通的程序意义不大,INTERRUPT 才被去掉的。然而仍然可以使用下面的方式实现INTERRUPT 宏的功能:

void XXX_vect(void) __attribute__((interrupt));

void XXX_vect(void)

{

//程序

}

即上面方式定义的中断程序可以再次被中断,XXX_vect 是中断例程名字,下面将说明。

二.可使用第二套中断名

早期版本的avr-libc 中中断例程名为SIG_开头,从avr-libc 1.4.0 版开始第二套中断名称,它以_vect 为后缀。因为在器件手册里用比如用TIMER2 COMP表示定时器2比较匹配中断,新的方法更接近手册,称可查libc 手册或器件对应io.h 文件。

三.用户未定义中断的截获

下如书中所说早期版本中用户未定义服务程序的中断发生时系统就会复位,而新版本可以截获这种中断了,使用如下:

#include

ISR(BADISR_vect){ //服务程序}

这个服务程序是可选的,并不是强制用户处理未定义中断,如果不定义那结果就是产生未定义中断时复位。因为发生未定义中断往往就是用户程序的错误。

四.中断替换

当两个中断使用同一个服务程序时可例用中断替换宏ISR_ALIAS(vector,target_vector)此时服务程序只写一个。例如:

#include

ISR(INT0_vect)

{

PORTB = 42;

}

ISR_ALIAS(INT1_vect, INT0_vect);

当INT1 中断发生时就会执行INT0 的中断程序。Avr-libc 建议不要大量使用这个宏。用ISR实现中断嵌套也很简单

ISR(INT0_vect,ISR_NOBLOCK)

{

//服务程序

}

综上所述,新版GCCAVR在一些普通的实际应用中,我们使用中断的基本模式如下:

#include

ISR(xxx_vect){ // 服务程序}

其中xxx_vect是对应器件的中断向量,在头文件iomxx.h中有说明,比如器件ATmega16对应的是iom16.h。

关于中断的帮助,用户在编译程序时可以查看对应的help文件avr-libc-user-manual,可以通过AVR GCC的help进入。

换一批

延伸阅读

[单片机新闻] 详说七大主流单片机的优缺点

详说七大主流单片机的优缺点

单片机现在可谓是铺天盖地,种类繁多,让开发者们应接不暇,发展也是相当的迅速,从上世纪80年代,由当时的4位8位发展到现在的各种高速单片机……各个厂商们也在速度、内存、功能上此起彼伏,参差不齐~~同时涌现出一大批拥有代表性单片机的厂商:Atm......

关键字:单片机 51 MSP430 TMS STM32 PIC AVR STC

[智能硬件] Atmel MCU及AVR驱动TomTom Spark GPS健身手表

Atmel MCU及AVR驱动TomTom Spark GPS健身手表

21ic讯 全球微控制器(MCU)及触控技术解决方案领域的领导者Atmel公司今日宣布,TomTom Spark GPS健身手表采用Atmel | SMART ARM® Cortex® M7 MCU和 ti......

关键字:Atmel ARM Cortex MCU AVR驱动

[单片机新闻] Atmel MCU为何坚持AVR与ARM两条路线?

Atmel MCU为何坚持AVR与ARM两条路线?

在很多MCU公司放弃8/16位研发、仅仅是维持时,Atmel仍坚持自有的AVR架构,并与其ARM MCU互补的立场。目前,Atmel有两大系列:自有的AVR和ARM系列。AVR是Atmel独特的,特别在8位MCU很受欢迎的。8位MCU用于更......

关键字:Atmel AVR ARM MCU

[单片机新闻] 用于爱特梅尔32位AVR® UC3产品系列的全新浮点单元技术(爱特梅尔)

用于爱特梅尔32位AVR® UC3产品系列的全新浮点单元技术(爱特梅尔)

爱特梅尔公司(Atmel® Corporation)宣布推出全新浮点单元(Floating Point Unit)技术,用于爱特梅尔32位AVR® UC3产品系列。此新技术可使设计师在汽车和工业控制等应用中,采用一个爱特梅尔......

关键字:AVR reg UC3 爱特梅尔

[单片机新闻] ATMEL为中国客户开通AVR/AVR32在线中文技术支持

ATMEL为中国客户开通AVR/AVR32在线中文技术支持

为了更好的服务与日俱增的中国市场,ATMEL公司于2009年6月18日为中国的AVR/AVR32用户正式开通了中文网上在线技术支持通道。企业与个人客户均可以登陆官方网站通过MCU支持中心(http://support.atmel.no/bi......

关键字:AVR ATMEL 32

[疯狂史] 历史上的今天系列:1961年10月30日,苏联的“超级氢弹”试验成功

历史上的今天系列:1961年10月30日,苏联的“超级氢弹”试验成功

1961年10月30日把氢弹装进了图-95战略轰炸机。主要问题是轰炸机如何在氢弹爆炸前及时离开杀伤区。氢弹将在4.5公里高空爆炸,是在图-95能够爬上的最高高度15公里高空投下的。......

关键字:苏联 超级氢弹

[新鲜事] Ryzen运行部分FMA3测试会崩溃,AMD承诺固件修复

Ryzen运行部分FMA3测试会崩溃,AMD承诺固件修复

现在Ryzen处理器还真的被爆出一个bug——运行部分FMA3测试会导致系统锁定,AMD也确认了这个问题,已经承诺通过主板固件升级解决。......

关键字:Ryzen FMA3测试

[猎聘集] 为何我们在冲向北上广,而美国人却在逃离硅谷?

为何我们在冲向北上广,而美国人却在逃离硅谷?

硅谷长期以来一直被看作是科技与创新的理想场所,硅谷也汇聚了各个领域的高、精、尖人才和企业家。但随着共享知识时代的发展,世界各地科技领域都有了不同程度的发展,硅谷的唯一地位也有所改变。......

关键字:硅谷
条评论

我 要 评 论

网友评论

技术子站

更多

项目外包

更多

推荐博客