单片机 中断技术_第1页
单片机 中断技术_第2页
单片机 中断技术_第3页
单片机 中断技术_第4页
单片机 中断技术_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章中断技术 DMA控制器及定时器 计数器 主要内容 中断的基本原理中断的实现方法中断控制器8259ADMA控制器8237计数器 定时器8253 中断的基本原理 所谓中断 就是指当CPU正在执行程序时 外设 或其它中断源 向CPU发出请求 CPU暂停当前程序的执行 转向该外设服务 或称中断服务 程序 当中断服务程序运行结束后 返回原程序继续执行的过程 中断的基本原理 中断过程包括 中断请求 中断判优 中断响应 中断处理 中断返回五个过程 中断优先权软件查询法是在CPU响应中断后 用软件查询以确定是哪些外设申请中断 并判断它们的优先权 中断的基本原理 硬件优先权排队电路中断优先权排队电路可用硬件编码器和比较器组成的优先权排队电路 中断的基本原理 硬件优先权排队电路链式优先权排队电路也称雏菊花链将所有的中断源排成一个链 各中断源在链中的前后顺序是根据中断源优先级别的高低来排列 排在链前面的优先级最高 中断的基本原理 中断响应中断响应的条件 有中断请求信号中断请求没有被屏蔽中断是开放的CPU在现行指令执行结束时响应中断 中断的基本原理 中断响应关中断保存断点保护现场给出中断服务程序入口地址 并转入该服务程序恢复现场从中断返回 80868088中断系统 8086 8088的中断源8086 8088系统的中断源分为外部中断 中断源来自CPU外部 和内部中断 来自CPU内部的中断 内部中断除法溢出中断 0号中断单步中断 1号中断INT指令中断溢出中断 4号中断 80868088中断系统 外部中断非屏蔽中断非屏蔽中断的优先权高于可屏蔽中断 其中断请求信号是发生在NMI上的电压跳变 边沿触发 可屏蔽中断出现在INTR线上的请求信号是电平触发的 只有当中断允许标志位IF为1时 CPU才能响应INTR的中断请求 如果IF为0 即使INTR端有中断请求信号CPU也不会响应 这种情况称为中断屏蔽 80868088中断系统 中断向量表8086 8088系统支持最多256个中断 对应每一个中断 都有一个中断服务程序 该中断服务程序的入口地址称为中断向量 每个中断向量占用4个字节 前两个字节为服务程序的IP 偏移量 后两个字节为服务程序的CS 段地址 8259A中断控制器 8259A的结构及逻辑功能功能管理和控制80 x86的外部中断请求实现中断判优提供中断向量屏蔽中断输入使用单片8259A可以管理8级中断 采用级联方式 最多可管理64级中断 8259A中断控制器 结构 8259A中断控制器 结构中断请求寄存器IRR优先级分析器中断服务寄存器ISR中断屏蔽寄存器IMR数据总线缓冲器读 写逻辑级联缓冲器 8259A中断控制器 8259A的引脚 8259A中断控制器 中断响应过程 1 外部设备在中断请求输入线 IR7 IR0 上发了中断请求 使中断请求寄存器IRR的相应位置位 2 IRR的内容与IMR的内容相 与 结果送给优先级分析器 中断优先级分析器把优先级最高的中断请求送到控制电路 3 控制电路将接收到的中断请求向CPU输出INT信号 8259A中断控制器 中断响应过程 4 若CPU是处在开中断状态 则在当前指令执行完以后 接收到INT信号 输出一个中断响应脉冲 进入第一个中断响应周期 5 8259A的脚上收到脉冲信号 就将最高优先级所对应的IRR位清除 并将对应的ISR位置位 6 CPU启动第二个中断响应周期 输出另一个脉冲 在这个周期8259A向数据总线输出一个中断向量码 7 CPU读取该中断向量码 把它乘以4 得到中断服务程序入口地址 转入该中断服务程序 这样一个中断响应周期就完成了 8259A中断控制器 8259A的编程8259A的初始化编程由CPU向8259A写初始化命令字ICW初始化命令字ICW的格式及功能如下1 ICW12 ICW2 8259A中断控制器 3 ICW34 ICW4 8259A中断控制器 8259A的工作方式编程1 OCW1是中断屏蔽命令字 D7 D0分别控制对应的IRQ7 IRQ0上的中断请求被屏蔽还是开放 1 是屏蔽 0 是开放 2 OCW2是用来设置中断优先级循环方式和发送EOI命令 通过偶地址写OCW2且命令字的D4D3位都是 0 标志着是对OCW2设置 若D4D3位是01则是OCW3 D4为1则是ICW1 8259A中断控制器 3 OCW3用于控制读中断状态 查询及屏蔽方式 此时要求8259A的引脚A0为0即偶地址 例 设8259A初始化后屏蔽IR2 设置特殊屏蔽方式 允许开放优先级低的中断 设端口地址为20H和21H 8259A中断控制器 8259A的操作方式查询方式中断屏蔽缓冲模式中断嵌套模式中断优先权旋转中断结束命令读8259A状态8259A的级联 可编程DMA控制器8237A 利用DMA方式传送数据时 数据的传送过程完全由硬件控制 这种电路称为DMA控制器 DMAC 需要数据传送时 DMAC向CPU提出申请 CPU让出总线控制权 由DMAC直接控制地址总线 数据总线和控制总线 让存储器与高速的外部设备直接交换数据 CPU不再干预 这样大大减少了中间过程 提高了数据传送速度 可编程DMA控制器8237A 8237A的结构和功能引脚信号 可编程DMA控制器8237A 内部结构8237A有4个独立的DMA通道 24个内部寄存器 可编程DMA控制器8237A 内部寄存器基址寄存器和当前地址寄存器基字节计数寄存器和当前字节计数寄存器暂时地址寄存器状态寄存器命令寄存器暂存寄存器方式寄存器屏蔽寄存器请求寄存器8237A的先 后触发器此触发器保证16位寄存器的读写操作 以先低字节后高字节的顺序操作 可编程DMA控制器8237A 8237A的工作方式单字节传送方式DMA传送时 仅传送一个字节 块传送方式块传送方式由一个DMA请求启动传送整个一个数据块 在整个数据传送期间 系统总线一直被DMAC所控制 每传送一个数据 计数寄存器的值减1 请求传送方式在请求传送方式下8237A被编程为连续传送 直至遇到T C或外部来的为止 或者直到DREQ不再有效为止 级联方式多个8237A进行级联时 将其中一个DMAC作为主片 其他作为从片 可编程DMA控制器8237A 8237A初始化编程设置方式寄存器PC机BIOS在初始化时 将方式寄存器初始化为单字节传送方式 地址递增 通道0为读传送 自动预置 方式字为58H 通道1 2 3为校验传送 禁止自动预置 其方式字为41H 42H 43H 设置命令寄存器初始化必须设置命令寄存器 以确定其工作时序 优先级方式 DREQ和DACK的有效电平及是否允许工作等 清除先 后触发器先 后触发器是一个指针 当它为0时 对低字节进行操作 当它为1时 对高字节进行操作 可编程DMA控制器8237A 设置地址和字节计数器8237A每个通道有四个16位的寄存器 这四个寄存器是基地址寄存器和当前地址寄存器以及基本字节计数寄存器和当前字节计数寄存器 清除屏蔽寄存器屏蔽寄存器是一个4位寄存器 每一位代表一个通道 当它为1时 向该通道的DMA请求被禁止 为0时 则允许 可编程定时器计数器8253 8253的结构和功能8253采用N沟道MOS工艺制成 有三个独立的16位计数器 只需要一组 5V电源 8253的内部结构 可编程DMA控制器8237A 8253的内部结构数据总线缓冲器它是8位双向三态缓冲器 可直接连接到数据总线上 初始化编程时 CPU写入8253的方式控制字和计数初值 CPU从计数器中读取的当前计数值都经这里传送 读 写控制逻辑产生相应的控制信号 来选择读 写操作的端口及控制数据的传送方向 计数器0 1 2三个计数器的内部结构相同 但相互独立 计数器从时钟输入端接收时钟脉冲或事件计数脉冲 控制字寄存器控制字寄存器是8位的 只能写不能读 写入的内容包括计数器的工作方式或计数器的初值 可编程定时器计数器8253 8253的引脚信号8253的功能定时计数 可编程定时器计数器8253 8253的方式控制字 1 SC1 SC0 用于选择计数器SC1SC0选择的计数器00计数器001计数器110计数器2 2 RW1 RW0 读 写控制位RW1RW0操作00计数器锁存01读 写低字节10读 写高字节11先读 写低字节 后读 写高字节 可编程定时器计数器8253 3 M2 M1 M0 方式选择位M2M1M0方式选择000方式0001方式1010方式2011方式3100方式4101方式5 4 BCD 选择计数格式 BCD 1 十进制计数 BCD 0 二进制计数 可编程定时器计数器8253 8253的工作方式方式0 计数结束产生中断在这种方式下 写入控制字之后 输出端OUT为低电平作为初始电平 并且在计数值到达0之前一直保持低电平 当计数到达0时 输出端OUT为高电平 并且一直保持高电平 除非写入新的计数值 可编程定时器计数器8253 方式1 可重复触发的单稳态触发器写入控制字之后 输出端OUT以高电平作为起始电平 计数初值送到初值寄存器后 再经过一个时钟周期 便送到计数执行部件 另一方面 门控信号GATE上升沿到来时 边沿触发器触发 下一个时钟脉冲时 输出端OUT变为低电平 并在计数到达0以前一直保持低电平 可编程定时器计数器8253 方式2一分频器写入控制字之后 输出端OUT变为高电平作为初始状态 当计数初值写入初值寄存器后 下一个时钟脉冲时 计数器初值被写到计数执行部件 然后计数执行部件作减1计数 减到1 不是减到0 时 输出OUT变为低电平 可编程定时器计数器8253 方式3 方波发生器写入控制字之后 输出端OUT出现高电平作为起始电平 计数初值送到初值寄存器后 下一个时钟脉冲到来时 计数执行部件获得初始计数值 并开始作减1计数 当计数计到一半时 输出变为低电平 计数器继续作减1计数 计数到终值时 输出变为高电平 从而完成一个周期 之后 马上自动进入下一个周期 由此不断进行下去 产生周期为N个时钟脉冲宽度的输出 可编程定时器计数器8253 方式4 软件触发的选通写入控制字之后 输出端OUT变为高电平作为初始电平 计数初值送到初值寄存器 再经过一个时钟周期 计数执行部件获得计数初值 并开始计数 当计数器减到0的时候 输出端OUT变为低电平 此低电平持续一个时钟周期 然后又自动变为高电平并一直维持高电平 一般将此负脉冲作为选通信号 当计数值N被送到计数初值寄存器后 在下一个时钟周期 计数初值被送到计数执部件 之后 计数执行部件作减1计数 又经过N个时钟周期后 才输出一个负脉冲作为选通脉冲 可编程定时器计数器8253 硬件触发的选通写入控制字之后 输出端OUT出现高电平作为起始电平 写入计数值之后 必须有门控信号GATE的上升沿到来 才在下一个时钟周期将计数初值送到计数执行部件 此后 计数执行部件作减1计数 计数到达0的时候 输出端出现一个宽度为1个时钟周期的负脉冲 然后又自动变为高电平 并将持续不变 此输出负脉冲可以用作选通脉冲 它是通过硬件电路产生的门控信号上升沿触发后得到的 所以叫硬件触发的选通脉冲 可编程定时器计数器8253 8253的初始化编程系统初始化时 由BIOS对8253进行初始化 并进行检查 程序如下 1 对计数器0的初始化CLI 关中断MOVAL 36H 选择计数器0 双字节 方式3 二进制计数的控制字OUT43H AL 送控制字寄存器MOVAL 0 置初值为0OUT40H AL 把低字节 LSB 送到定时器 计数器 寄存器OUT40H AL 把高字节 MSB 送到定时器 计数器 寄存器 可编程定时器计数器8253 8253的初始化编程2 对计数器1的初始化MOVAL 54H 选择计数器1 写

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论