收藏 分享(赏)

IAR_AVR_C语言中断编程.doc

上传人:kpmy5893 文档编号:5998229 上传时间:2019-03-23 格式:DOC 页数:5 大小:101KB
下载 相关 举报
IAR_AVR_C语言中断编程.doc_第1页
第1页 / 共5页
IAR_AVR_C语言中断编程.doc_第2页
第2页 / 共5页
IAR_AVR_C语言中断编程.doc_第3页
第3页 / 共5页
IAR_AVR_C语言中断编程.doc_第4页
第4页 / 共5页
IAR_AVR_C语言中断编程.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、第 1 页 共 5 页IAR AVR C 语言中断编程一、AVRmega16 中断向量表向量号 程序地址 中断源 描述 IAR AVR 中的定义1 000 RESET外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及 JTAG AVR 复位RESET_vect2 002 INT0 外部中断请求 0 INT0_vect3 004 INT1 外部中断请求 1 INT1_vect4 006 TIMER2 COMP 定时器/计数 2 比较匹配 TIMER2_COMP_vect5 008 TIMER2 OVF 定时器/计数 2 溢出 TIMER2_OVF_vect6 00A TIMER1

2、CAPT 定时器/计数 1 事件捕捉 TIMER_ CAPT_vect7 00C TIMER1 COMPA 定时器/计数 1 比较匹配 A TIMER1_COMPA_vect8 00E TIMER1 COMPB 定时器/计数 1 比较匹配 B TIMER1_COMPB_vect9 010 TIMER1 OVF 定时器/计数 1 溢出 TIMER1_OVF_vect10 012 TIMER0 OVF 定时器/计数 0 溢出 TIMER0_OVF_vect11 014 SPI,STC SPI 串行传输结束 SPI_STC_vect12 016 USART,RXC USART, Rx 结束 USAR

3、T_RXC_vect13 018 USART,UDRE USART 数据寄存器空 USART_UDRE_vect14 01A USART,TXC USART, Tx 结束 USART_TXC_vect15 01C ADC ADC 转换结束 ADC_vect16 01E EE_RDY EEPROM 就绪 EE_RDY_vect17 020 ANA_COMP 模拟比较器 ANA_COMP_vect18 022 TWI 两线串行接口 TWI_vect19 024 INT2 外部中断请求 2 INT2_vect20 026 TIMER0_COMP 定时器/计数 0 比较匹配 TIMER0_COMP_v

4、ect21 028 SPM_RDY 保存程序存储器内容就绪 SPM_RDY_vect二、AVR 状态寄存器 SREG7 6 5 4 3 2 1 0I T H S V N Z C初始值 0 0 0 0 0 0 0 0Bit 7 I: 全局中断使能第 2 页 共 5 页I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果 I 清零,则不论单独中断标志置位与否,都不会产生中断。任意一个中断发生后 I 清零,而执行 RETI指令后 I 恢复置位以使能中断。 I 也可以通过 SEI 和 CLI 指令来置位和清零。三、MCU 控制寄存器MCUCR7 6 5 4 3 2 1 0SM2 SE

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

6、低电平时产生中断请求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 引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平

7、必须保持到当前指令执行完成。ISC01 ISC00 说明0 0 INT0 为低电平时产生中断请求0 1 INT0 引脚上任意的逻辑电平变化都将引发中断1 0 INT0 的下降沿产生异步中断请求1 1 INT0 的上升沿产生异步中断请求四、MCU 控制与状态寄存器MCUCSR第 3 页 共 5 页7 6 5 4 3 2 1 0JTD ISC2 - JTRF WDRF BORF EXTRF PORF初始值 0 0 0Bit 6 ISC2: 中断 2 触发方式控制异步外中断 2 由外部引脚 INT2 激活,如果 SREG 寄存器的 I 标志和 GICR 寄存器相应的中断屏蔽位置位的话。若 ISC2

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

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

10、。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 引脚被配置为输出,只要引脚电平发生了

11、相应的变化,中断可将产生。Bit 1 IVSEL: 中断向量选择当 IVSEL 为 “0“ 时,中断向量位于 Flash 存储器的起始地址;当 IVSEL 为 “1“ 时,第 4 页 共 5 页中断向量转移到 Boot 区的起始地址。实际的 Boot 区起始地址由熔丝位 BOOTSZ 确定。在写的同时可以读 (RWW, Read-While-Write) 的自我编程能力 ” 。 为了防止无意识地改变中断向量表,修改 IVSEL 时需要遵照如下过程:1. 置位中断向量修改使能位 IVCE2. 在紧接的 4 个时钟周期里将需要的数据写入 IVSEL,同时对 IVCE 写 ”0”执行上述序列时中断自

12、动被禁止。其实,在置位 IVCE 时中断就被禁止了,并一直保持到写 IVSEL 操作之后的下一条语句。如果没有 IVSEL 写操作,则中断在置位 IVCE 之后的 4 个时钟周期保持禁止。需要注意的是,虽然中断被自动禁止,但状态寄存器的位 I 的值并不受此操作的影响。Note: 若中断向量位于 Boot 区,且 Boot 锁定位 BLB02 被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且 Boot 锁定位 BLB12 被编程, 则执行 Boot 区的程序时中断被禁止。有关 Boot 锁定位的细节请参见 P234“ 支持引导装入程序 在写的同时可以读(RWW, Read-Whi

13、le-Write)的自我编程能力 ” 。Bit 0 IVCE: 中断向量修改使能改变 IVSEL 时 IVCE 必须置位。在 IVCE 或 IVSEL 写操作之后 4 个时钟周期, IVCE 被硬件清零。如前面所述,置位 IVCE 将禁止中断。六、通用中断标志寄存器GIFR7 6 5 4 3 2 1 0INTF1 INTF0 INTF2 - - - - -初始值 0 0 0 0 0 0 0 0Bit 7 INTF1: 外部中断标志 1INT1 引脚电平发生跳变时触发中断请求,并置位相应的中断标志 INTF1。如果 SREG 的位 I以及 GICR 寄存器相应的中断使能位 INT1 为”1”,M

14、CU 即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入 ”1” 来清零。Bit 6 INTF0: 外部中断标志 0INT0 引脚电平发生跳变时触发中断请求,并置位相应的中断标志 INTF0。如果 SREG 的位 I以及 GICR 寄存器相应的中断使能位 INT0 为”1”,MCU 即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入 ”1” 来清零。Bit 5 INTF2: 外部中断标志 2INT2 引脚电平发生跳变时触发中断请求,并置位相应的中断标志 INTF2。如果 SREG 的位 I以及 GICR 寄存器相应的中断使能位 INT2 为”1”,MCU 即跳转到相应的中断向量。进入中第 5 页 共 5 页断服务程序之后该标志自动清零。此外,标志位也可以通过写入 ”1” 来清零。注意,当INT2 中断禁用进入某些休眠模式时,该引脚的输入缓冲将禁用。这会导致 INTF2 标志设置信号的逻辑变化,详见 P52“ 数字输入使能和休眠模式 ” 。七、IAR AVR 中断程序以 TIMER2 溢出为例,中断处理程序应该写成入下的样子。其它中断处理程序只需要改变为相应的中断向量即可#pragma vector=TIMER2_OVF_vect_interrupt void Timer2(void)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 开发文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报