历史上的今天
返回首页

历史上的今天

今天是:2025年03月04日(星期二)

正在发生

2020年03月04日 | AVR单片机IAR AVR C语言中断编程

2020-03-04 来源:eefocus

一、AVRmega16中断向量表

向量号 程序地址 中断源 描述 IAR AVR中的定义 1 000 RESET 外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及JTAG AVR 复位 RESET_vect 2 002 INT0 外部中断请求0 INT0_vect 3 004 INT1 外部中断请求1 INT1_vect 4 006 TIMER2 COMP 定时器/计数 2 比较匹配 TIMER2_COMP_vect 5 008 TIMER2 OVF 定时器/计数 2 溢出 TIMER2_OVF_vect 6 00A TIMER1 CAPT 定时器/计数 1事件捕捉 TIMER_ CAPT_vect 7 00C TIMER1 COMPA 定时器/计数 1比较匹配 A TIMER1_COMPA_vect 8 00E TIMER1 COMPB 定时器/计数 1比较匹配 B TIMER1_COMPB_vect 9 010 TIMER1 OVF 定时器/计数 1 溢出 TIMER1_OVF_vect 10 012 TIMER0 OVF 定时器/计数 0 溢出 TIMER0_OVF_vect 11 014 SPI,STC SPI串行传输结束 SPI_STC_vect 12 016 USART,RXC USART, Rx 结束 USART_RXC_vect 13 018 USART,UDRE USART数据寄存器空 USART_UDRE_vect 14 01A USART,TXC USART, Tx 结束 USART_TXC_vect 15 01C ADC ADC转换结束 ADC_vect 16 01E EE_RDY EEPROM 就绪 EE_RDY_vect 17 020 ANA_COMP 模拟比较器 ANA_COMP_vect 18 022 TWI 两线串行接口 TWI_vect 19 024 INT2 外部中断请求2 INT2_vect 20 026 TIMER0_COMP 定时器/计数 0 比较匹配 TIMER0_COMP_vect 21 028 SPM_RDY 保存程序存储器内容就绪 SPM_RDY_vect


二、AVR 状态寄存器 -SREG

7 6 5 4 3 2 1 0 I T H S V N Z C 初始值 0 0 0 0 0 0 0 0


Bit 7 – I: 全局中断使能


I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果 I 清零,则不论单独中断标志置位与否,都不会产生中断。任意一个中断发生后 I 清零,而执行 RETI指令后 I 恢复置位以使能中断。 I 也可以通过 SEI 和 CLI 指令来置位和清零。


三、MCU控制寄存器-MCUCR

7 6 5 4 3 2 1 0 SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00 初始值 0 0 0 0 0 0 0 0


Bit 3, 2 – ISC11, ISC10: 中断触发方式控制 1 Bit1 与 Bit 0


外部中断 1 由引脚 INT1 激发,如果 SREG 寄存器的 I 标志位和相应的中断屏蔽位置位的话。触发方式如下表 所示。在检测边沿前 MCU首先采样INT1引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保 持到当前指令执行完成。

ISC11 ISC10 说明 0 0 INT1 为低电平时产生中断请求 0 1 INT1 引脚上任意的逻辑电平变化都将引发中断 1 0 INT1 的下降沿产生异步中断请求 1 1 INT1 的上升沿产生异步中断请求


Bit 1, 0 – ISC01, ISC00: 中断 0 触发方式控制 Bit 1与 Bit 0


外部中断 0 由引脚 INT0 激发,如果 SREG 寄存器的 I 标志位和相应的中断屏蔽位置位的话。触发方式如 Table 35 所示。在检测边沿前 MCU首先采样INT0引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。


ISC01 ISC00 说明 0 0 INT0 为低电平时产生中断请求 0 1 INT0 引脚上任意的逻辑电平变化都将引发中断 1 0 INT0 的下降沿产生异步中断请求 1 1 INT0 的上升沿产生异步中断请求


四、MCU控制与状态寄存器-MCUCSR

7 6 5 4 3 2 1 0 JTD ISC2 - JTRF WDRF BORF EXTRF PORF 初始值 0 0 0


Bit 6 – ISC2: 中断 2 触发方式控制


异步外中断 2 由外部引脚 INT2 激活,如果 SREG 寄存器的 I 标志和 GICR 寄存器相应的中断屏蔽位置位的话。若 ISC2 写 0, INT2 的下降沿激活中断。 若 ISC2 写 1,INT2 的上升沿激活中断。 INT2 的边沿触发方式是异步的。只要INT2引脚上产生宽度大于50nS的脉冲就会引发中断。若选择了低电平中断,低电平必须保持到当前指令完成,然后才会产生中断。而且只要将引脚拉低,就会引发中断请求。改变 ISC2 时有可能发生中断。因此建议首先在寄存器 GICR 里清除相应的中断使能位 INT2,然后再改变 ISC2。最后,不要忘记在重新使能中断之前通过对 GIFR 寄存器的相应中断标志位 INTF2 写 '1’使其清零。


五、通用中断控制寄存器-GICR

7 6 5 4 3 2 1 0 INT1 INT0 INT2 - - - IVSEL IVCE 初始值 0 0 0 0 0 0 0 0


Bit 7 – INT1: 使能外部中断请求 1


当 INT1 为 '1’,而且状态寄存器 SREG 的 I 标志置位,相应的外部引脚中断就使能了。MCU通用控制寄存器– MCUCR的中断敏感电平控制1位 1/0(ISC11与ISC10)决定中断是由上升沿、下降沿,还是 INT1 电平触发的。只要使能,即使 INT1 引脚被配置为输出,只要引脚电平发生了相应的变化,中断可将产生。


Bit 6 – INT0: 使能外部中断请求 0


当 INT0 为 '1’,而且状态寄存器 SREG 的 I 标志置位,相应的外部引脚中断就使能了。MCU通用控制寄存器– MCUCR的中断敏感电平控制0位 1/0(ISC01与ISC00)决定中断是由上升沿、下降沿,还是 INT0 电平触发的。只要使能,即使 INT0 引脚被配置为输出,只要引脚电平发生了相应的变化,中断可将产生。


Bit 5 – INT2: 使能外部中断请求 2


当 INT2 为 '1’,而且状态寄存器 SREG 的 I 标志置位,相应的外部引脚中断就使能了。MCU通用控制寄存器– MCUCR的中断敏感电平控制2位 1/0 (ISC2与ISC2)决定中断是由上升沿、下降沿,还是 INT2 电平触发的。只要使能,即使 INT2 引脚被配置为输出,只要引脚电平发生了相应的变化,中断可将产生。


Bit 1 – IVSEL: 中断向量选择


当 IVSEL 为 "0“ 时,中断向量位于 Flash存储器的起始地址;当 IVSEL 为 "1“ 时,中断向量转移到 Boot 区的起始地址。实际的 Boot 区起始地址由熔丝位BOOTSZ确定。在写的同时可以读 (RWW, Read-While-Write) 的自我编程能力 ” 。 为了防止无意识地改变中断向量表,修改 IVSEL 时需要遵照如下过程:


1. 置位中断向量修改使能位 IVCE


2. 在紧接的 4 个时钟周期里将需要的数据写入 IVSEL,同时对 IVCE 写 ”0”


执行上述序列时中断自动被禁止。其实,在置位 IVCE 时中断就被禁止了,并一直保持到写 IVSEL 操作之后的下一条语句。如果没有 IVSEL 写操作,则中断在置位 IVCE 之后的4个时钟周期保持禁止。需要注意的是,虽然中断被自动禁止,但状态寄存器的位I的值并不受此操作的影响。


Note: 若中断向量位于Boot区,且Boot锁定位BLB02被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且 Boot 锁定位 BLB12 被编程, 则执行 Boot 区的程序时中断被禁止。有关 Boot 锁定位的细节请参见 P234“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write)的自我编程能力 ” 。


Bit 0 – IVCE: 中断向量修改使能


改变 IVSEL 时 IVCE 必须置位。在 IVCE 或 IVSEL 写操作之后 4 个时钟周期, IVCE 被硬件清零。如前面所述,置位 IVCE 将禁止中断。


六、通用中断标志寄存器-GIFR

7 6 5 4 3 2 1 0 INTF1 INTF0 INTF2 - - - - - 初始值 0 0 0 0 0 0 0 0


Bit 7 – INTF1: 外部中断标志 1


INT1引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF1。如果SREG的位I以及GICR寄存器相应的中断使能位INT1为”1”,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入 ”1” 来清零。


Bit 6 – INTF0: 外部中断标志 0


INT0引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF0。如果SREG的位I以及GICR寄存器相应的中断使能位INT0为”1”,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入 ”1” 来清零。


Bit 5 – INTF2: 外部中断标志 2


INT2引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF2。如果SREG的位I以及GICR寄存器相应的中断使能位INT2为”1”,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入 ”1” 来清零。注意,当INT2中断禁用进入某些休眠模式时,该引脚的输入缓冲将禁用。这会导致INTF2标志设置信号的逻辑变化,详见 P52“ 数字输入使能和休眠模式 ” 。


七、IAR AVR中断程序

以TIMER2溢出为例,中断处理程序应该写成入下的样子。其它中断处理程序只需要改变为相应的中断向量即可


#pragma vector=TIMER2_OVF_vect


__interrupt void Timer2(void)


{}

推荐阅读

史海拾趣

Atlanta Micro公司的发展小趣事

近年来,电子行业经历了快速的发展和变革,新技术、新产品层出不穷。面对这一形势,Atlanta Micro积极应对挑战,不断调整战略和业务模式。公司加强了与产业链上下游企业的合作,共同应对市场变化;同时,也加大了对新兴技术的研发投入,力求在新技术领域取得突破。这些努力使得Atlanta Micro在激烈的市场竞争中保持了稳健的发展态势。

以上便是关于Atlanta Micro在电子行业发展的5个故事。这些故事展示了公司从创业初期到逐渐发展壮大的过程,以及面对挑战和变革时所采取的应对策略。虽然这些故事只是公司发展历程中的一部分,但它们足以体现出Atlanta Micro在电子行业中的坚韧和拼搏精神。

FILTRONETICS Inc公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,FILTRONETICS深知技术创新的重要性。公司加大了对研发的投入力度,成立了专门的研发部门和技术中心,致力于新技术、新材料和新工艺的研发和应用。同时,公司还积极关注环保和可持续发展问题,致力于生产绿色、环保的电子产品。通过不断的技术创新和可持续发展实践,FILTRONETICS不仅保持了技术领先地位,也为社会的可持续发展做出了贡献。

Analog Microwave Design公司的发展小趣事

随着公司规模的不断扩大,Analog Microwave Design公司开始将目光投向国际市场。为了更好地拓展海外业务,公司制定了一套完善的国际化战略。首先,公司加强了与国际知名企业的合作,通过技术交流和合作研发,提升了公司的技术水平和国际影响力。其次,公司积极参加国际展览和会议,展示公司的最新产品和技术成果,吸引了众多海外客户的关注。通过这些努力,公司的海外业务得到了快速发展,成为公司新的增长点。

EOS POWER INDIA Pvt公司的发展小趣事

在稳固了印度市场后,EOS开始积极拓展国际市场。公司参加了多个国际电子展会,与全球各地的客户和合作伙伴建立了广泛的联系。通过与国际知名企业的合作与交流,EOS不断吸收先进的管理经验和技术理念,并将其应用到自己的产品和服务中。这些举措不仅提升了EOS的国际知名度,还为公司带来了更多的商业机会。

EDAC公司的发展小趣事

随着全球环保意识的提高,ECS-C公司积极响应国家号召,将绿色环保理念融入到企业的生产经营中。公司采用环保材料和生产工艺,减少废弃物排放和能源消耗。同时,ECS-C公司还积极参与环保公益活动,推动社会环保事业的发展。这些环保举措不仅提升了公司的社会形象,也为企业带来了可持续发展的动力。

巴丁微公司的发展小趣事

巴丁微深知人才是企业发展的核心动力。因此,公司始终注重团队建设与人才培养。公司拥有一支由行业精英组成的骨干团队,他们在集成电路设计、研发、销售等方面具有丰富的经验和深厚的专业知识。

同时,巴丁微也积极引进和培养新人才,通过定期的培训和学习机会,提升员工的技能水平和综合素质。公司还建立了完善的激励机制,鼓励员工勇于创新、敢于担当,为企业的发展贡献智慧和力量。

通过以上五个故事,我们可以看出巴丁微在电子行业发展的历程中,始终坚持以技术创新为核心,不断提升产品质量和市场竞争力。同时,公司也注重团队建设与人才培养,为企业的可持续发展提供了有力保障。未来,我们有理由相信巴丁微将继续在电子行业中取得更加辉煌的成就。

请注意,以上故事是基于公开资料编写的,可能与实际情况存在细微差别。如需获取更详细和准确的信息,建议直接联系巴丁微公司或查阅相关官方资料。

问答坊 | AI 解惑

第三届(1997年)全国大学生电子设计竞赛题目

本帖最后由 paulhyde 于 2014-9-15 09:29 编辑 A题 直流稳定电源一、任务 设计并制作交流变换为直流的稳定电源。 二、要求 1.基本要求   (1)稳压电源 在输入电压220V、50Hz、电压变化范围+15%~-20%条件下:   a.输出电压可调范围 ...…

查看全部问答>

关于evc中对CButton进行派生是怎么进行的?

本人做的是嵌入式屏幕测试的软件,其中要求说对CButton进行派生能做制作出漂亮而且功能强大的按钮,请问是如何实现的?…

查看全部问答>

初始化SD卡时,等待卡退出空闲状态超时错误,总是在这里卡住,都快郁闷死了,高人指点一下!

在ZLG的SmartARM2200上做SD卡的读卡器实验,用的是uC/OS系统和ZLG_SD驱动。总是在卡初始化时返回“SD_ERR_TIMEOUT_WAITIDLE 0x34”错误,不知道为什么?SD卡是Kingstone 2G的。 …

查看全部问答>

单片机控制AD7656数据转换

用单片机的I/O口控制AD7656的转换,用示波器测量时序正确,但是转换结束信号BUSY始终无效,症状好像根本没有启动AD7656,哪位知道,请告知…

查看全部问答>

一个大家在程序中很容易忽略的bug

要求:      当一个按健按下时,执行所要完成的动作,而当此动作完成后,按健还继续按着的话,不执行原重复的动作,也就是说按健按下执行一次动作,当按健一直按下时,不重复执行原动作,直到按健断开为止,    以 ...…

查看全部问答>

tuner驱动问题,紧急求助!

各位前辈们,你们好。     我刚刚毕业不久,目前正在新公司负责tuner的驱动移植。采用的平台为st5105,demod芯片为stv0297E,tuner为thomson的dct70704。现在的问题是:iic上始终找不到tuner的存在,可以保证的是tuner的地址正确(0xC0), ...…

查看全部问答>

Appendix A - Instrumentation Amplifier Specifications

本帖最后由 dontium 于 2015-1-23 13:37 编辑 Appendix A - Instrumentation Amplifier Specifications …

查看全部问答>

讨论:看门狗用作定时器模式有用吗?

学习msp430的朋友都知道,看门狗能够用作定时器模式,可以定时控制其片内寄存器,可是它真正有用吗?…

查看全部问答>

PCF8591的使用

各位大侠,谁有PCF8591的程序 并有详细的说明啊,本人是刚学单片机的 ,时序图也看不懂,实验室叫我们做一个用单片机采集一个电压,并输出一个相同的电压,谁有什么好的主意给我说一下哈,谢谢!!…

查看全部问答>

SC41CR ,SOP8是那个型号的IC呀

SC41CR ,SOP8是那个型号的IC呀…

查看全部问答>