第7章 中断系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
中断相关的概念-中断源
单片机中也有一些可以引起中断的事件,如: 定时器溢出、外部中断、串口接收到数据等 AVR Mega16 一共有21个中断源
3个外部中断 INT0、INT1、INT2 8个定时器中断 3个串口中断 RXC、TXC、UDRE SPI、AD、EEPROM、模拟比较、TWI、SPM各一个 RESET中断
$014
INT0 INT1 TIMER2 COMP TIMER2 OVF TIMER1 CAPT TIMER1 COMPA TIMER1 COMPB TIMER1 OVF TIMER0 OVF
SPI, STC
13 14 15 16 17 18 19 20 21
$018 $01A $01C $01E $020 $022 $024 $026 $028
23
AVR外部中断-中断使能
外部中断控制——通用中断控制寄存器
GICR的INTx置位为允许INTx中断 GICR的INTx清零为禁止INTx中断
24
AVR外部中断-中断请求标志位
源自文库
外部中断产生时,硬件自动置位对应的中断请 求标志位 中断响应时,硬件自动清除中断请求标志位 中断请求标志位可以通过软件写“1”实现清零
17
中断相关的概念-中断服务程序
在ICC AVR中,可以通过一下语句定义一个中断服 务程序,并自动完成现场保护
#pragma interrupt_handle <fun1>:<vector number>
如:
#pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF void timer0_ovf_isr(void) { TCNT0 = tcount; }
实现实时处理 实现分时操作,提高了MCU的效率 进行故障处理 待机状态的唤醒
3
中断处理过程
4
中断相关的概念-中断源
什么可以引起中断?
有人按了门铃了 电话铃响了 你的闹钟闹响了 你烧的水开了
等等诸如此类的事件,我们把可以引起 中断的称之为中断源, 专业术语:指能够向 MCU 发出中断请 求信号的部件和设备。
20
AVR外部中断-方式选择
MCU 控制寄存器— INT0、INT1
ISCx1 0 0 1 1
ISCx0 0 1 0 1
说明 INTx 为低电平时产生中断请求 INTx引脚上任意的逻辑电平变化都将引发中断 INTx 的下降沿产生异步中断请求 INTx 的上升沿产生异步中断请求
21
AVR外部中断-方式选择
MCU 控制与状态寄存器—INT2
ISC2 0 1
说明 INT2下降沿产生中断请求 INT2上升沿产生中断请求
22
AVR外部中断-方式选择
INT0、INT1若工作在边沿触发模式,要 求IO时钟工作 INT0、INT1若工作在低电平触发模式, 只要外部低电平存在,就一直处于触发 状态 INT2是异步边沿触发,不要求IO时钟, 但脉冲最小宽度不能小于50nS
8
中断相关的概念-中断优先级
我们正在看书,电话铃响了,同时又有人按了门铃,你该先做 那样呢?
如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反 之,你正在等一个重要的客人,则可能就不会去理会电话了。 如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常 的习惯去处理。 优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中 断已产生,又有一个中断产生的情况, 比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话 响了情况。考虑一下我们会怎么办吧。
18
中断相关的概念-AVR外部中断
M16 有3个外部中断 INT0、INT1和INT2 对应PD2、PD3和 PB2 只要使能外部中断, 对应引脚的电平变化 就会引起中断
19
中断相关的概念-AVR外部中断
工作模式
低电平触发模式 电平变化触发模式 下降沿触发模式 上升沿触发模式
第7章 AVR中断系统与基本应用
刘东卓 liudongz2003@163.com
1
一、中断概念
中断:指计算机(MCU)自动响应
一个“中断请求”信号,暂时停止 (中断)了当前程 序的执行,转 而执行为外部设备服务的程序 (中断服务程序),并在执行完 服务程序后自动 返回原程序执行 的过程。 。
2
中断的优点
#define Seg7_Bit0_En() {Seg7_Bitselect_Ddr|=(1<<Seg7_Bit0); Seg7_Bitselect_Port|=(1<<Seg7_Bit0);} #define Seg7_Bit0_Dis() {Seg7_Bitselect_Ddr|=(1<<Seg7_Bit0); Seg7_Bitselect_Port&=~(1<<Seg7_Bit0);} #define Seg7_Data_Port PORTA #define Seg7_Data_Ddr DDRA
31
带中断唤醒功能的4X4键盘-软件设计
宏定义
#define Seg7_Bitselect_Port PORTC #define Seg7_Bitselect_Ddr DDRC #define #define #define #define Seg7_Bit0 Seg7_Bit1 Seg7_Bit2 Seg7_Bit3 7 6 1 0
通用中断标志寄存器- GIFR
25
外部中断实例-带中断唤醒功能的4X4键盘
4X4键盘编码为0-F 使用INT0作为键盘按键触发中断 对应键值显示在7seg LED上
26
四、带中断唤醒功能的4X4键盘-硬件设计
27
带中断唤醒功能的4X4键盘-软件设计
7段LED显示模块
动态扫描 缓冲区编程模式 初始化PB高4位输出0,低4位输入且使能上拉 INT0低电平触发 中断服务程序中读取PB口,判断键值
11
中断相关的概念-中断响应过程
中断响应可以分为以下几个步骤:
1、保护断点,即保存下一将要执行的指令 的地址,就是把这个地址送入堆栈。 2、寻找中断入口,根据21个不同的中断源 所产生的中断,查找21个不同的入口地址。 在这21个入口地址处存放有中断处理程序 3、执行中断处理程序。 4、中断返回:执行完中断指令后,就从中 断处返回到主程序,继续执行。
12
中断相关的概念-中断响应条件
我们人可以响应外界的事件,是因为我们有多种“传 感器“――眼、耳可以接受不同的信息 AVR工作时,在每个机器周期中都会去查询一下各个 中断标记,看他们是否是“1“,如果是1,就说明有中 断请求了,所以所谓中断,其实也是查询,不过是每 个周期都查一下而已。 相当于你在看书的时候,每一秒钟都会抬起头来看一 看,查问一下,是不是有人按门铃,是否有电话…
SPI 串行传输结束
向量号 12
程序地址
中断源 USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI INT2 TIMER0 COMP SPM_RDY
中断定义 USART, Rx 结束
$016
2 3 4 5 6 7 8 9 10
11
$002 $004 $006 $008 $00A $00C $00E $010 $012
单片机中也有优先级的问题
9
中断相关的概念-中断优先级
向量号 1 程序地 址 $000
AVR M16 21个中断源的优先级
中断源 RESET 中断定义 外部引脚电平引发的复位,上电复 位,掉电检测复位,看门狗复位,以 及JTAG AVR 复位 外部中断请求0 外部中断请求1 定时器/ 计数器2 比较匹配 定时器/ 计数器2 溢出 定时器/ 计数器1 事件捕捉 定时器/ 计数器1 比较匹配 A 定时器/ 计数器1 比较匹配B 定时器/ 计数器1 溢出 定时器/ 计数器0 溢出
15
中断相关的概念-中断服务程序
每个中断源对应一个固定的地址,又称中断 入口地址 当满足中断条件时,PC指针自动指向对应的 中断入口地址,该地址处的指令被执行 在中断入口处放置一条跳转到对应中断服务 程序的指令即可实现中断服务程序与中断源 的对应
16
中断相关的概念-中断服务程序
进入中断服务程序,必须先保护中断现 场,保存R0-R31及SREG等重要寄存器 内容,一般是将其压入堆栈 中断返回时,要恢复中断现场,即将其 弹出堆栈 上述几点,在汇编程序设计是要特别注 意
30
带中断唤醒功能的4X4键盘-软件设计
7段LED显示初始化 void Seg7_Led_Init(void) { Seg7_Data_Ddr=0xff; Seg7_Data_Port=0x00; Seg7_Led_Buf[0]=16; Seg7_Led_Buf[1]=16; Seg7_Led_Buf[2]=16; Seg7_Led_Buf[3]=16; }
13
中断相关的概念-中断响应条件
允许AVR响应中断
使能全局中断允许位I(SREG) 使能中断源对应中断控制位
中断源请求中断,即置位相应的中断标 志位
硬件置位、清零 软件置位、清零
14
中断相关的概念-AVR中断响应过程
MCU响应中断时:
将当前PC指针指向地址(中断返回地址)由硬件自 动压入系统堆栈 硬件自动关闭全局中断,I位清零 硬件清对应中断标志位 执行中断服务程序(用户程序) 返回时执行RETI中断返回指令 硬件置位全局中断I 从堆栈弹出返回地址给PC指针
6
中断相关的概念-中断信号
中断信号是指内部或外部中断源产生的 中断申请信号 分类如下: ◆脉冲的上跳沿或下降沿(上升沿触发 型或下降沿触发型) ◆高电平或低电平(电平触发型) ◆电平的变化(状态变化触发型)
7
中断相关的概念-中断向量
中断源发出的请求信号被 CPU 检测到之后, 如果单片机的中断控制系统允许响应中断, CPU 会自动转移,执行一个固定的程序空间 地址中的指令。这个固定的地址称作中断入 口地 址,也叫做中断向量。
USART 数据寄存器空 USART, Tx 结束 ADC 转换结束 EEPROM 就绪 模拟比较器 两线串行接口 外部中断请求2 定时器/ 计数器0 比较 匹配 保存程序存储器内容就 绪
10
中断相关的概念-中断响应
当有事件产生,进入中断之前我们必须先记住现在 看书的第几页了,或拿一个书签放在当前页的位 置,然后去处理不同的事情(因为处理完了,我们 还要回来继续看书) 电话铃响我们要到放电话的地方去,门铃响我们要 到门那边去,也说是不同的中断,我们要在不同的 地点处理,而这个地点通常还是固定的。 每个中断产生后都到一个固定的地方去找处理这个 中断的程序
28
键盘驱动
带中断唤醒功能的4X4键盘-软件设计 7段LED字型码 #pragma data:code const uint8 Seg7_Data[]={0x3F,0x06,0x5B,0x4F, 0x66, 0x6D,0x7D,0x07, 0x7F,0x6F, 0x77,0x7C, 0x39,0x5E,0x79,0x71, 0x00}; //0-F “灭” #pragma data:data
29
带中断唤醒功能的4X4键盘-软件设计
7段LED显示模块及显示缓冲 volatile uint8 Seg7_Led_Buf[4]; void Seg7_Led_Update(void) { Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[0]]; Seg7_Bit0_En(); Delay100us(10); Seg7_Bit0_Dis(); Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[1]]; Seg7_Bit1_En(); Delay100us(10); Seg7_Bit1_Dis(); Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[2]]; Seg7_Bit2_En(); Delay100us(10); Seg7_Bit2_Dis(); Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[3]]; Seg7_Bit3_En(); Delay100us(10); Seg7_Bit3_Dis(); }
中断相关的概念-中断源
单片机中也有一些可以引起中断的事件,如: 定时器溢出、外部中断、串口接收到数据等 AVR Mega16 一共有21个中断源
3个外部中断 INT0、INT1、INT2 8个定时器中断 3个串口中断 RXC、TXC、UDRE SPI、AD、EEPROM、模拟比较、TWI、SPM各一个 RESET中断
$014
INT0 INT1 TIMER2 COMP TIMER2 OVF TIMER1 CAPT TIMER1 COMPA TIMER1 COMPB TIMER1 OVF TIMER0 OVF
SPI, STC
13 14 15 16 17 18 19 20 21
$018 $01A $01C $01E $020 $022 $024 $026 $028
23
AVR外部中断-中断使能
外部中断控制——通用中断控制寄存器
GICR的INTx置位为允许INTx中断 GICR的INTx清零为禁止INTx中断
24
AVR外部中断-中断请求标志位
源自文库
外部中断产生时,硬件自动置位对应的中断请 求标志位 中断响应时,硬件自动清除中断请求标志位 中断请求标志位可以通过软件写“1”实现清零
17
中断相关的概念-中断服务程序
在ICC AVR中,可以通过一下语句定义一个中断服 务程序,并自动完成现场保护
#pragma interrupt_handle <fun1>:<vector number>
如:
#pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF void timer0_ovf_isr(void) { TCNT0 = tcount; }
实现实时处理 实现分时操作,提高了MCU的效率 进行故障处理 待机状态的唤醒
3
中断处理过程
4
中断相关的概念-中断源
什么可以引起中断?
有人按了门铃了 电话铃响了 你的闹钟闹响了 你烧的水开了
等等诸如此类的事件,我们把可以引起 中断的称之为中断源, 专业术语:指能够向 MCU 发出中断请 求信号的部件和设备。
20
AVR外部中断-方式选择
MCU 控制寄存器— INT0、INT1
ISCx1 0 0 1 1
ISCx0 0 1 0 1
说明 INTx 为低电平时产生中断请求 INTx引脚上任意的逻辑电平变化都将引发中断 INTx 的下降沿产生异步中断请求 INTx 的上升沿产生异步中断请求
21
AVR外部中断-方式选择
MCU 控制与状态寄存器—INT2
ISC2 0 1
说明 INT2下降沿产生中断请求 INT2上升沿产生中断请求
22
AVR外部中断-方式选择
INT0、INT1若工作在边沿触发模式,要 求IO时钟工作 INT0、INT1若工作在低电平触发模式, 只要外部低电平存在,就一直处于触发 状态 INT2是异步边沿触发,不要求IO时钟, 但脉冲最小宽度不能小于50nS
8
中断相关的概念-中断优先级
我们正在看书,电话铃响了,同时又有人按了门铃,你该先做 那样呢?
如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反 之,你正在等一个重要的客人,则可能就不会去理会电话了。 如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常 的习惯去处理。 优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中 断已产生,又有一个中断产生的情况, 比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话 响了情况。考虑一下我们会怎么办吧。
18
中断相关的概念-AVR外部中断
M16 有3个外部中断 INT0、INT1和INT2 对应PD2、PD3和 PB2 只要使能外部中断, 对应引脚的电平变化 就会引起中断
19
中断相关的概念-AVR外部中断
工作模式
低电平触发模式 电平变化触发模式 下降沿触发模式 上升沿触发模式
第7章 AVR中断系统与基本应用
刘东卓 liudongz2003@163.com
1
一、中断概念
中断:指计算机(MCU)自动响应
一个“中断请求”信号,暂时停止 (中断)了当前程 序的执行,转 而执行为外部设备服务的程序 (中断服务程序),并在执行完 服务程序后自动 返回原程序执行 的过程。 。
2
中断的优点
#define Seg7_Bit0_En() {Seg7_Bitselect_Ddr|=(1<<Seg7_Bit0); Seg7_Bitselect_Port|=(1<<Seg7_Bit0);} #define Seg7_Bit0_Dis() {Seg7_Bitselect_Ddr|=(1<<Seg7_Bit0); Seg7_Bitselect_Port&=~(1<<Seg7_Bit0);} #define Seg7_Data_Port PORTA #define Seg7_Data_Ddr DDRA
31
带中断唤醒功能的4X4键盘-软件设计
宏定义
#define Seg7_Bitselect_Port PORTC #define Seg7_Bitselect_Ddr DDRC #define #define #define #define Seg7_Bit0 Seg7_Bit1 Seg7_Bit2 Seg7_Bit3 7 6 1 0
通用中断标志寄存器- GIFR
25
外部中断实例-带中断唤醒功能的4X4键盘
4X4键盘编码为0-F 使用INT0作为键盘按键触发中断 对应键值显示在7seg LED上
26
四、带中断唤醒功能的4X4键盘-硬件设计
27
带中断唤醒功能的4X4键盘-软件设计
7段LED显示模块
动态扫描 缓冲区编程模式 初始化PB高4位输出0,低4位输入且使能上拉 INT0低电平触发 中断服务程序中读取PB口,判断键值
11
中断相关的概念-中断响应过程
中断响应可以分为以下几个步骤:
1、保护断点,即保存下一将要执行的指令 的地址,就是把这个地址送入堆栈。 2、寻找中断入口,根据21个不同的中断源 所产生的中断,查找21个不同的入口地址。 在这21个入口地址处存放有中断处理程序 3、执行中断处理程序。 4、中断返回:执行完中断指令后,就从中 断处返回到主程序,继续执行。
12
中断相关的概念-中断响应条件
我们人可以响应外界的事件,是因为我们有多种“传 感器“――眼、耳可以接受不同的信息 AVR工作时,在每个机器周期中都会去查询一下各个 中断标记,看他们是否是“1“,如果是1,就说明有中 断请求了,所以所谓中断,其实也是查询,不过是每 个周期都查一下而已。 相当于你在看书的时候,每一秒钟都会抬起头来看一 看,查问一下,是不是有人按门铃,是否有电话…
SPI 串行传输结束
向量号 12
程序地址
中断源 USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI INT2 TIMER0 COMP SPM_RDY
中断定义 USART, Rx 结束
$016
2 3 4 5 6 7 8 9 10
11
$002 $004 $006 $008 $00A $00C $00E $010 $012
单片机中也有优先级的问题
9
中断相关的概念-中断优先级
向量号 1 程序地 址 $000
AVR M16 21个中断源的优先级
中断源 RESET 中断定义 外部引脚电平引发的复位,上电复 位,掉电检测复位,看门狗复位,以 及JTAG AVR 复位 外部中断请求0 外部中断请求1 定时器/ 计数器2 比较匹配 定时器/ 计数器2 溢出 定时器/ 计数器1 事件捕捉 定时器/ 计数器1 比较匹配 A 定时器/ 计数器1 比较匹配B 定时器/ 计数器1 溢出 定时器/ 计数器0 溢出
15
中断相关的概念-中断服务程序
每个中断源对应一个固定的地址,又称中断 入口地址 当满足中断条件时,PC指针自动指向对应的 中断入口地址,该地址处的指令被执行 在中断入口处放置一条跳转到对应中断服务 程序的指令即可实现中断服务程序与中断源 的对应
16
中断相关的概念-中断服务程序
进入中断服务程序,必须先保护中断现 场,保存R0-R31及SREG等重要寄存器 内容,一般是将其压入堆栈 中断返回时,要恢复中断现场,即将其 弹出堆栈 上述几点,在汇编程序设计是要特别注 意
30
带中断唤醒功能的4X4键盘-软件设计
7段LED显示初始化 void Seg7_Led_Init(void) { Seg7_Data_Ddr=0xff; Seg7_Data_Port=0x00; Seg7_Led_Buf[0]=16; Seg7_Led_Buf[1]=16; Seg7_Led_Buf[2]=16; Seg7_Led_Buf[3]=16; }
13
中断相关的概念-中断响应条件
允许AVR响应中断
使能全局中断允许位I(SREG) 使能中断源对应中断控制位
中断源请求中断,即置位相应的中断标 志位
硬件置位、清零 软件置位、清零
14
中断相关的概念-AVR中断响应过程
MCU响应中断时:
将当前PC指针指向地址(中断返回地址)由硬件自 动压入系统堆栈 硬件自动关闭全局中断,I位清零 硬件清对应中断标志位 执行中断服务程序(用户程序) 返回时执行RETI中断返回指令 硬件置位全局中断I 从堆栈弹出返回地址给PC指针
6
中断相关的概念-中断信号
中断信号是指内部或外部中断源产生的 中断申请信号 分类如下: ◆脉冲的上跳沿或下降沿(上升沿触发 型或下降沿触发型) ◆高电平或低电平(电平触发型) ◆电平的变化(状态变化触发型)
7
中断相关的概念-中断向量
中断源发出的请求信号被 CPU 检测到之后, 如果单片机的中断控制系统允许响应中断, CPU 会自动转移,执行一个固定的程序空间 地址中的指令。这个固定的地址称作中断入 口地 址,也叫做中断向量。
USART 数据寄存器空 USART, Tx 结束 ADC 转换结束 EEPROM 就绪 模拟比较器 两线串行接口 外部中断请求2 定时器/ 计数器0 比较 匹配 保存程序存储器内容就 绪
10
中断相关的概念-中断响应
当有事件产生,进入中断之前我们必须先记住现在 看书的第几页了,或拿一个书签放在当前页的位 置,然后去处理不同的事情(因为处理完了,我们 还要回来继续看书) 电话铃响我们要到放电话的地方去,门铃响我们要 到门那边去,也说是不同的中断,我们要在不同的 地点处理,而这个地点通常还是固定的。 每个中断产生后都到一个固定的地方去找处理这个 中断的程序
28
键盘驱动
带中断唤醒功能的4X4键盘-软件设计 7段LED字型码 #pragma data:code const uint8 Seg7_Data[]={0x3F,0x06,0x5B,0x4F, 0x66, 0x6D,0x7D,0x07, 0x7F,0x6F, 0x77,0x7C, 0x39,0x5E,0x79,0x71, 0x00}; //0-F “灭” #pragma data:data
29
带中断唤醒功能的4X4键盘-软件设计
7段LED显示模块及显示缓冲 volatile uint8 Seg7_Led_Buf[4]; void Seg7_Led_Update(void) { Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[0]]; Seg7_Bit0_En(); Delay100us(10); Seg7_Bit0_Dis(); Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[1]]; Seg7_Bit1_En(); Delay100us(10); Seg7_Bit1_Dis(); Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[2]]; Seg7_Bit2_En(); Delay100us(10); Seg7_Bit2_Dis(); Seg7_Data_Port=Seg7_Data[Seg7_Led_Buf[3]]; Seg7_Bit3_En(); Delay100us(10); Seg7_Bit3_Dis(); }