当前位置:
文档之家› 飞思卡尔8位单片机-第6章- 中断系统
飞思卡尔8位单片机-第6章- 中断系统
二.查询传送方式(条件传送方式)
查询(读状态端口)— 等待(准备好) — 数据传送
例1.输入某8位A/D转换器的转换结果。设A/D的数据线 接到PTB口,“转换结束”信号接到PTA0(1表示转换 结束),“启动A/D”信号接到PTA1(从0→1为启动) BCLR 1,PTAD BSET 1, PTAD LDA PTBD ; PTA1清0 ;启动A/D ;读A/D
3、中断处理 、 (1)、保护现场 、
SP基准地址 基准地址=0x00ff+所有定义变量所占的字节数。 基准地址 所有定义变量所占的字节数。 栈底地址不能超出RAM的末地址 的末地址0x025f。 栈底地址不能超出 的末地址 。
3、中断处理 、
(2)关中断 ) (3)查找中断源转向相应的中断服务程序。 )查找中断源转向相应的中断服务程序。 (4)关闭中断。使恢复现场的工作不受干扰。 )关闭中断。使恢复现场的工作不受干扰。 (5)恢复现场。 )恢复现场。
三、直接存储器存储(DMA)方式 直接存储器存储( )
外设
存储器
不经过CPU,由DMA控制器控制三总线 , 不经过 控制器控制三总线
特点:传送数据量大, 特点:传送数据量大,外设速度高
四、中断
中断: 中断:计算机暂时停止原程 序的执行,转而为外设服务, 序的执行,转而为外设服务, 并在服务完成后自动返回原 程序
三、中断源概述
中断号
低 23
入口地址 0xFFD0:FFD1 0xFFD6:FFD7 0xFFD8:FFD9 0xFFDA:FFDB 0xFFDC:FFDD 0xFFDE:FFDF 0xFFE0:FFE1 0xFFE2:FFE3 0xFFE4:FFE5 0xFFE6:FFE7 0xFFF0:FFF1 0xFFF2:FFF3 0xFFF4:FFF5 0xFFF8:FFF9 0xFFFA:FFFB 0xFFFC:FFFD 0xFFFE:FFFF
SPIC1 MTIMSC TPMSC
TPMC1SC TPMC0SC
MTIM TOF TOF CH1F CH0F LVDF IRQF SWI指令
TOIE TOIE CH1IE CHI0IE LVDIE IRQIE -
SPMSC1 IRQSC
高
2 1 0
COP,LVD,RST,POR,非法指令等。
6.3 中断应用
void delay(unsigned int ms) { unsigned int i; unsigned int j; for(j= 0;j<ms;j++) { for(i = 0;i<200; i++){ } } }
WAIT: BRCLR 0,PTAD, WAIT ;查询
例2.向打印机输出一个‘C’字符。打印机数据线接PTB口,“忙” 信号接到PTA1(1表示忙),“写”信号接到PTA2(0→1为写入) LDA #’C’ WAIT: BRSET 1,PTAD, WAIT STA PTBD BCLR 2,PTAD BSET 2, PTAD ;发“写”脉冲 *当外设的准备时间为已知时,也可用延时代替查询。 如已知A/D转换时间最大为1ms,则读A/D的程序中可用BSR D1ms(延迟1ms子程)代替WAIT:BRSET 1,PTAD, WAIT 查询式传送的优点:通用性强,硬件结构简单。 缺点:查询时占用CPU,效率低。 ;‘C’→A ;查询 ;‘C’→PTB口
第6章 中断系统 章
6.1 输入/输出控制方式 输入/ 1、无条件传送方式 、 2、条件传送方式 、 3、DMA方式 、 方式 4、中断控制方式 6.2 中断机制 1、中断源及中断矢量 、 2、中断控制及相关寄存器 、 6.3 键盘中断 6.4 其他
§6.1 微机的输入/输出方式
CPU与外设的信息交换: 与外设的信息交换: 与外设的信息交换 数据、状态、 数据、状态、控制 CPU与外设的信息交换方式: 与外设的信息交换方式: 与外设的信息交换方式 无条件传送方式 查询传送方式 直接存储器存取( 直接存储器存取(DMA)方式 ) 中断传送
一、中断处理过程 中断返回
1、中断请求 、 (1). 有中断请求 (2). 条件状态寄存器中I=0 条件状态寄存器中 (3). 提中断申请的中断源未被屏蔽 2、中断响应 、 (1).当前指令结束 当前指令结束 (2). I自动置 。 自动置1。 自动置
3〉添加中断服务子程序、延时子程序 〉添加中断服务子程序、
interrupt 2 void IRQ_ISR() { unsigned char i; for(i=0;i<200;i++){;} //延时,去抖动 延时, 延时 while(!PTAD_PTAD5){;} //等待按键释放 等待按键释放 PTBD_PTBD6 = 0; delay(500); PTBD_PTBD6 = 1; delay(500); PTBD_PTBD6 = 0; delay(500); PTBD_PTBD6 = 1; //LED亮 亮 //延时 延时 //LED灭 灭 //亮、灭两次 亮
模块 系统 ADC KBI IIC SCI SCI SCI SPI TPM TPM TPM 系统 IRQ CPU 系统
标记、状态位 RTIF COCO KBF IICIF TDRE、TC IDLE、RDRF OR,NF,FE,PF
SPIF,MODF,SPTEF
允许位 RTIE ACIE AIEN KBIE
主 中断 程 中 序 断 服 务 断 继 序 续 执 行 主 程 返 回 主 程 序 程
中断
:
中断功
的
序
6.2
中断技术的功能特点: 中断技术的功能特点:
中断机制
⑴.分时操作:CPU与外设可各自工作,提高CPU的效率。 分时操作:CPU与外设可各自工作,提高CPU的效率。 与外设可各自工作 CPU的效率 ⑵.实时处理:可及时响应外设要求的服务。 实时处理:可及时响应外设要求的服务。 ⑶.故障处理:可及时处理各种软硬件故障。 故障处理:可及时处理各种软硬件故障。
一.无条件传送方式: 无条件传送方式:
外设在任何时刻均处于“准备好”的状态, 外设在任何时刻均处于“准备好”的状态,CPU可随时用 可随时用 指令读写外设。 指令读写外设。 输入——读,输出——写 读 输出 输入 写 例1.从PTB端口输入8个开关S0-S7的状态: LDA PTBD (LDA $0002) 例2.用PTB端口控制8个LED灯的点亮(低电平点亮)。 MOV #$0F, PTBD; 点亮高4位LED
寄存器 SRTISC ACMPSC ADCSC1 KBISC
20
19 18
ACMP ACF
1〉 优 先 中 级 断 入 口
17 16 15 14 13 12 7 6 5 3
IICIE IICC,IICS TIE、TCIE SCIC2 ILIE、RIE SCIS1 ORIE…… SCIC3
SPIE,SPTIE
(6)开中断 )
二、中断识别和中断优先级
1.中断优先权 优先权排队:多个中断源同时提中断时, 优先权排队:多个中断源同时提中断时,按其优先权的高 低,优先响应高级中断。 优先响应高级中断。 查询中断:CPU接到中断申请时, 查询中断:CPU接到中断申请时,用指令逐个查询各中断 接到中断申请时 源(优先级高的先被查询)按顺序服务。 优先级高的先被查询)按顺序服务。 矢量中断: 响应中断后, 矢量中断:CPU响应中断后,要求中断源提供一个地址信 响应中断后 页表6-1 息,该地址信息称为中断向量(中断矢量)。82页表 该地址信息称为中断向量(中断矢量) 页表
IRQ管脚的使用 管脚的使用——中断应用范例(1) 中断应用范例( ) 管脚的使用 中断应用范例
IRQSC (0x000F) 0F)
6 IRQPDD 4 IRQPE 3 IRQF 2 IRQACK
内部上拉电阻使能控制位,必须 该位才有意义。 内部上拉电阻使能控制位,必须IRQPE=1该位才有意义。 该位才有意义 0-上拉允许; 1-上拉禁止,可使用外部上拉。 上拉允许; 上拉禁止,可使用外部上拉。 上拉允许 置位该位使管脚当IRQ用。 用 置位该位使管脚当 IRQ事件标志位 该只读位为“1”时表示检测到 事件标志位—该只读位为 时表示检测到IRQ事件。 事件。 事件标志位 该只读位为“ 时表示检测到 事件 IRQ应答位 给这个只写位写“1”清除 应答位—给这个只写位写 清除IRQF,如果中断模式选择的是 应答位 给这个只写位写“ 清除 , 边沿和电平” 管脚保持低电平时,写该位也 “边沿和电平” (即IRQMOD=1),当IRQ管脚保持低电平时 写该位也 当 管脚保持低电平时 不能清除IRQF。 不能清除 。 IRQ 中断使能 给该位写“1”将允许 中断使能—给该位写 给该位写“ 将允许 将允许IRQF=1时产生硬件中断,该位写 时产生硬件中断, 时产生硬件中断 “0”时,只能采用查询的方式。 时 只能采用查询的方式。 IRQ触发模式 即选择 “边沿”触发或者“边沿和电平” 触发。 触发模式—即选择 边沿”触发或者“边沿和电平” 触发。 触发模式 0-IRQ事件只在下降沿触发; 1-IRQ事件在下降沿和低电平都能触发。 事件只在下降沿触发; 事件在下降沿和低电平都能触发。 事件只在下降沿触发 事件在下降沿和低电平都能触发
1 IRQIE
0 IRQMOD
IRQ管脚的使用,结合开发板,采用 语言编程。 管脚的使用,结合开发板 采用 语言编程。 采用C语言编程 管脚的使用 1〉新建一个c工程; 〉新建一个 工程; 工程 2〉在打开中断允许之前添加 行初始化: 行初始化: 〉在打开中断允许之前添加4行初始化 SOPT1 = 0x02; IRQSC = 0x16; PTBDD = 0xFF; PTBD = 0xFF; EnableInterrupts; // 禁止 COP、STOP and RST,45页 、 , 页 // 允许 允许IRQ管脚,允许 管脚, 中断, 管脚 允许IRQ中断,下降沿触发 中断 // PTB输出 输出 // 关闭 关闭LED /* enable interrupts */