Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

第6章 输入输出技术

216 views

Published on

input and ouput

  • Be the first to comment

  • Be the first to like this

第6章 输入输出技术

  1. 1. 第 6 章 输入输出技术 6.3 中断方式 6.4 直接存贮器存取 6.5 例题解析 6.2 程序控制方式 6.1 输入输出的基本方法
  2. 2. 第 6 章 基本输入输出接口 <ul><li>教学重点 </li></ul><ul><ul><li>I/O 接口电路的典型结构 </li></ul></ul><ul><ul><li>无条件传送方式 </li></ul></ul><ul><ul><li>查询传送方式 </li></ul></ul><ul><ul><li>中断工作过程 </li></ul></ul>
  3. 3. 6.1 输入输出的基本方法 <ul><li>为什么需要 I/O 接口(电路)? </li></ul><ul><ul><li>微机的外部设备多种多样 </li></ul></ul><ul><ul><li>工作原理、驱动方式、信息格式、以及工作速度方面彼此差别很大 </li></ul></ul><ul><ul><li>它们不能与 CPU 直接相连 </li></ul></ul><ul><ul><li>必须经过中间电路再与系统相连 </li></ul></ul><ul><ul><li>这部分电路被称为 I/O 接口电路 </li></ul></ul>6.1.1 输入输出接口的概念及基本结构 多种外设 1. 接口电路
  4. 4. 6.1.1 输入 / 输出接口概述 (续 1 ) <ul><li>什么是 I/O 接口(电路)? </li></ul><ul><li>I/O 接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路 </li></ul><ul><li>PC 机系统板的可编程接口芯片、 I/O 总线槽的电路板(适配器)都是接口电路 </li></ul>CPU 接口 电路 I/O 设备
  5. 5. 6.1.1 输入 / 输出接口概述 (续 2 ) <ul><li>什么是微机接口技术? </li></ul><ul><li>处理微机系统与外设间联系的技术 </li></ul><ul><li>注意其软硬结合的特点 </li></ul><ul><li>根据应用系统的需要,使用和构造相应的接口电路,编制配套的接口程序,支持和连接有关的设备 </li></ul>
  6. 6. 2. 接口电路分类 <ul><li>⑴ 按接口电路的通用性 </li></ul><ul><li>⑵ 按数据传送格式 </li></ul><ul><li>⑶ 按接口是否可编程 </li></ul><ul><li>⑷ 按时序控制方式 </li></ul>专用接口 通用接口 并行接口 串行接口 可编程接口 不可编程接口 同步接口 异步接口
  7. 7. 3. 接口的基本功能 <ul><li>⑴ 对输入输出数据进行缓冲和锁存 </li></ul><ul><ul><li>输出接口有 锁存环节 </li></ul></ul><ul><ul><li>输入接口有 缓冲环节 </li></ul></ul><ul><li>⑵ 对信号的形式和数据的格式进行变换 </li></ul><ul><ul><li>微机直接处理: 数字量 、 开关量 、 脉冲量 </li></ul></ul><ul><li>⑶ 对 I/O 端口进行寻址 </li></ul><ul><li>⑷ 与 CPU 和 I/O 设备进行联络 </li></ul><ul><li>⑸ 中断管理 /DMA 控制功能 </li></ul>
  8. 8. 4. 接口电路的基本结构 控制总线 CB 地址总线 AB I/O 接口电路 数据 控制 状态 数据总线 DB CPU 外设 控制寄存器 状态寄存器 数据寄存器
  9. 9. 6.1.2 外设接口的编址方式 <ul><li>接口电路占用的 I/O 端口有两类编排形式 </li></ul><ul><li>I/O 端口单独编址 </li></ul><ul><ul><li>I/O 地址空间独立于存储地址空间 </li></ul></ul><ul><ul><li>如 8086/8088 </li></ul></ul><ul><li>I/O 端口与存储器统一编址 </li></ul><ul><ul><li>它们共享一个地址空间 </li></ul></ul><ul><ul><li>如 M6800 </li></ul></ul>
  10. 10. 1. I/O 端口与存储器统一编址 <ul><li>优点: </li></ul><ul><ul><li>不需要专门的 I/O 指令 </li></ul></ul><ul><ul><li>I/O 数据存取与存储器数据存取一样灵活 </li></ul></ul><ul><li>缺点: </li></ul><ul><ul><li>I/O 端口要占去部分存储器地址空间 </li></ul></ul><ul><ul><li>程序不易阅读(不易分清访存和访问外设) </li></ul></ul>内存 部分 I/O 部分 存储空间 0 FFFFF
  11. 11. 2. I/O 端口单独编址 <ul><li>优点: </li></ul><ul><ul><li>I/O 端口的地址空间独立 </li></ul></ul><ul><ul><li>控制和地址译码电路相对简单 </li></ul></ul><ul><ul><li>专门的 I/O 指令使程序清晰易读 </li></ul></ul><ul><li>缺点: </li></ul><ul><ul><li>I/O 指令没有存储器指令丰富 </li></ul></ul>80x86 采用 I/O 端口独立编址 内存 空间 I/O 空间 FFFFF 0 FFFF 0
  12. 12. 补充 : 8088/8086 的输入输出指令 <ul><li>输入指令 </li></ul><ul><ul><li>IN AL,i8/DX ; 字节输入 </li></ul></ul><ul><ul><li>IN AX,i8/DX ; 字输入 </li></ul></ul><ul><li>输出指令 </li></ul><ul><ul><li>OUT i8/DX,AL ; 字节输出 </li></ul></ul><ul><ul><li>OUT i8/DX ; 字输出 </li></ul></ul>功能演示 功能演示
  13. 13. 6.1.3 输入输出的基本方法 <ul><li>1. 程序控制方式 </li></ul><ul><li>2. 中断控制方式 </li></ul><ul><li>3. 直接存储器存取控制方式 </li></ul><ul><li>4. 通道方式 </li></ul><ul><li>5. 外围处理方式 </li></ul>
  14. 14. 数据传送方式 <ul><li>程序控制下的数据传送 ——通过 CPU 执行程序中的 I/O 指令来完成传送,又分为: </li></ul><ul><ul><li>无条件传送 </li></ul></ul><ul><ul><li>查询传送 </li></ul></ul><ul><ul><li>中断传送 </li></ul></ul><ul><li>直接存储器存取 ( DMA )——传送请求由外设向 DMA 控制器( DMAC )提出,后者向 CPU 申请总线,最后 DMAC 利用系统总线来完成外设和存储器间的数据传送 </li></ul><ul><li>I/O 处理机 —— CPU 委托专门的 I/O 处理机来管理外设,完成传送和相应的数据处理 </li></ul>
  15. 15. 1. 无条件传送方式及其接口 <ul><li>在 CPU 与慢速变化的设备交换数据时,可以认为它们总是处于“就绪”状态,随时可以进行数据传送,这就是无条件传送,或称立即传送、同步传送 </li></ul><ul><li>适合于简单设备,如 LED 数码管、按键 / 按纽等 </li></ul><ul><li>无条件传送的接口和操作均十分简单 </li></ul><ul><li>这种传送有前提:外设必须随时处于就绪状态 </li></ul>传送流程 接口实例 6.2. 程序控制方式
  16. 16. 无条件传送:输入示例 <ul><li>MOV DX, 160H </li></ul><ul><li>IN AL, DX </li></ul>IOR 三态缓冲器 OE I/O 装置 地址译码器 CS D7 ~ D0 A15 ~ A1 A0 0160H
  17. 17. 无条件传送:输入实例 <ul><li>MOV DX, 160H </li></ul><ul><li>IN AL, DX </li></ul>74LS244 +5V 10K x 8 G 1 G 2 数据总线 CS RD
  18. 18. 无条件传送:输出示例 <ul><li>MOV DX, 160H </li></ul><ul><li>MOV AL, [BX] </li></ul><ul><li>OUT DX, AL </li></ul>地址译码器 数据锁存器 A15 A0 ~ A14 CS 0160H 输出设备 D7 ~ D0 -IOW
  19. 19. 无条件传送:输出实例 <ul><li>MOV DX, 160H </li></ul><ul><li>MOV AL, [BX] </li></ul><ul><li>OUT DX, AL </li></ul>+5V 74LS373 300 x 8 LE OE 数据总线 CS WR
  20. 20. 无条件传送:输入输出接口 K7 K1 K0 +5V D 0 ~ D 7 A 0 ~ A 15 CLK LS06 反相 驱动器 LS273 8D 锁存器 LS244 三态 缓冲器 8000H 译码 +5V LED0 LED7 … … -G -IOW -IOR
  21. 21. 无条件传送:输入输出接口 <ul><li>next: mov dx,8000h ;DX 指向数据端口 </li></ul><ul><li>in al, dx ; 从输入端口读开关状态 </li></ul><ul><li>not al ; 反相 </li></ul><ul><li>out dx, al ; 送输出端口显示 </li></ul><ul><li>call delay ; 调子程序延时 </li></ul><ul><li>jmp next ; 重复 </li></ul>
  22. 22. 2. 查询传送方式及其接口 <ul><li>CPU 先了解(查询)外设的工作状态,在外设 就绪 (可以交换信息的情况下)实现数据的输入或输出 </li></ul><ul><li>对多个外设的情况,则 CPU 按一定顺序依次查询( 轮询 )。先查询的外设将优先进行数据交换 </li></ul><ul><li>查询传送的特点是:工作可靠,适用面宽,但传送效率低 </li></ul>就绪?
  23. 23. 查询传送的两个环节 <ul><li>查询环节 </li></ul><ul><ul><li>寻址状态口 </li></ul></ul><ul><ul><li>读取状态寄存器的标志位 </li></ul></ul><ul><ul><li>若不就绪就继续查询,直至就绪 </li></ul></ul><ul><li>传送环节 </li></ul><ul><ul><li>寻址数据口 </li></ul></ul><ul><ul><li>是输入,通过输入指令从数据口读入数据 </li></ul></ul><ul><ul><li>是输出,通过输出指令向数据口输出数据 </li></ul></ul>输入状态 就绪? 数据交换 Y N 传送流程 接口实例
  24. 24. 查询输入接口 -IOR +5V 8D 锁存器 8 位 三态 缓冲器 译码 1 位 三态 缓冲器 A 0 ~ A 15 8000H 8001H D 0 ~ D 7 D 0 输入 设备 -IOR -STB R Q D
  25. 25. 查询输入接口 <ul><li> mov dx,8000h ;DX 指向状态端口 </li></ul><ul><li>status: in al,dx ; 读状态端口 </li></ul><ul><li> test al,01h ; 测试标志位 D0 </li></ul><ul><li> jz status ;D0 = 0 ,未就绪,继续查询 </li></ul><ul><li> inc dx ;D0 = 1 ,就绪, DX 指向数据端口 </li></ul><ul><li>in al,dx ; 从数据端口输入数据 </li></ul>
  26. 26. 查询输出接口 8D 锁存器 译码 1 位 三态 缓冲器 R Q A 0 ~ A 15 8000H 8001H D 0 ~ D 7 D 7 D +5V -ACK -IOW -IOR 输出 设备
  27. 27. 查询输出接口 <ul><li>mov dx,8000h ;DX 指向状态端口 </li></ul><ul><li>status: in al,dx ; 读取状态端口的状态数据 </li></ul><ul><li>test al,80h ; 测试标志位 D7 </li></ul><ul><li>jnz status ;D7 = 1 ,未就绪,继续查询 </li></ul><ul><li>inc dx ;D7 = 0 ,就绪, DX 指向数据端口 </li></ul><ul><li>mov al,buf ; 变量 buf 送 AL </li></ul><ul><li>out dx,al ; 将数据输出给数据端口 </li></ul>
  28. 28. 6.3 中断传送方式 <ul><li>CPU 在执行程序中,被内部或外部的事件所打断,转去执行一段预先安排好的中断服务程序; </li></ul><ul><li>服务结束后,又返回原来的断点,继续执行原来的程序 </li></ul>程序 断点 主程序 中断请求 为外设 继续执行 返回断点 传送流程 提供服务 中断服务程序 入口 6.3.1 中断的基本概念 1. 中断的概念
  29. 29. 2. 中断控制方式 <ul><li>中断传送是一种效率更高的程序传送方式 </li></ul><ul><li>进行传送的 中断服务程序是预先设计好的 </li></ul><ul><li>中断请求是外设随机向 CPU 提出的 </li></ul><ul><li>CPU 对请求的检测是有规律的 :一般是在每条指令的最后一个时钟周期采样中断请求输入引脚 </li></ul><ul><li>本书主要论述中断在输入和输出方面的应用 </li></ul><ul><li>中断还有着非常广泛的应用 </li></ul>
  30. 30. 3. 中断源 <ul><li>能够引发中断的事件被称为 中断源 。通常,中断源有两类: 内部中断源 和 外部中断源 。 </li></ul><ul><li>由处理机内部产生的中断事件称为 内部中断源 。常见的内部中断源有计算溢出、指令的单步运行、执行特定的中断指令等。 </li></ul><ul><li>由处理机之外的外围设备产生的中断事件 称为外部中断源 。常见的外部中断源有外设的输入 / 输出请求、定时时间到、电源掉电、设备故障等。 </li></ul>
  31. 31. 中断传送与接口 (续) 三态 缓冲器 D 0 ~ D 7 +5V 8D 锁存器 8 位 三态 缓冲器 R Q 译码 8001H 中断向量号 D 0 ~ D 7 INTR D 输入 设备 中断允许 触发器 A 0 ~ A 15 中断请求 触发器 -IOR -INTA -STB
  32. 32. 4. 中断处理过程 <ul><li>中断请求 (外设) </li></ul><ul><li>中断响应( CPU ) </li></ul><ul><li>关中断( CPU ) </li></ul><ul><li>断点保护( CPU ) </li></ul><ul><li>中断识别 ( 硬件 / 软件 ) </li></ul><ul><li>现场保护 (用户) </li></ul><ul><li>中断服务 (用户) </li></ul><ul><li>恢复现场 (用户) </li></ul><ul><li>开中断( CPU/ 用户) </li></ul><ul><li>中断返回(用户 ) </li></ul>中断服务是进行数据交换的实质性环节
  33. 33. 5. 中断系统的功能 <ul><li>① 能进入中断和退出中断,即完成上述中断响应和中断返回的过程 . </li></ul><ul><li>② 能对某些中断进行屏蔽,并在必要时开放 . </li></ul><ul><li>③ 能进行优先权排队 . </li></ul><ul><li>④ 提供中断嵌套能力 . </li></ul>
  34. 34. 6.3.2 8086 中断系统 <ul><li>8086 的中断系统采用 向量中断 机制 </li></ul><ul><li>一共可处理 256 个中断 </li></ul><ul><li>采用中断向量编号 0 ~ 255 ,对 256 个中断加以区别 </li></ul><ul><li>可屏蔽中断需借助专用的中断控制器 Intel 8259A 对系统中的可屏蔽中断资源进行管理: </li></ul><ul><ul><li>扩充系统的可屏蔽中断资源,并管理它们: </li></ul></ul><ul><ul><li>实现中断优先权比较 </li></ul></ul><ul><ul><li>实现中断源的识别 </li></ul></ul>
  35. 35. 1. 8086 中断类型 <ul><li>硬件中断 软件中断 </li></ul>⑴ 硬件中断 硬件中断,又称 外部中断 ,它是由处理器外部的硬件、外围设备的请求而引起的中断。 8086 有两条硬件中断请求信号线: NMI (非屏蔽中断)和 INTR (可屏蔽中断)。
  36. 36. 8088 的中断类型 中断逻辑 INTO 指令 单步 中断 除法 错误 INT N 指令 CPU NMI 8259A 中断 控制器 IR 0 IR 1 IR 2 IR 3 IR 4 IR 5 IR 6 IR 7 外 设 中 断 源 -INTA 可屏蔽中断申请 INTR 不可屏蔽中断申请 可屏蔽中断源 不可屏蔽中断源 内部中断
  37. 37. ⑵ 软件中断 ( 内部中断 ) <ul><li>内部中断 ——内部机制产生 </li></ul><ul><ul><li>除法错中断 ( 0 号)—— 除运算 结果溢出时产生 </li></ul></ul><ul><ul><li>指令中断 ( n 号)——执行 int n 指令后产生(操作码 CDH ) </li></ul></ul><ul><ul><li>断点中断 ( 3 号)——执行 int 3 指令(单字节指令操作码 CCH )用于在调试中设置断点,程序遇断点则中断 </li></ul></ul><ul><ul><li>溢出中断 ( 4 号)——执行 into 指令,且前面运算有 溢出 ( OF =1 )时产生 </li></ul></ul><ul><ul><li>单步中断 ( 1 号)—— TF 标志置 1 后,每执行一条子指令将发生一次 </li></ul></ul><ul><li>外部中断 ——外部引脚触发 </li></ul><ul><ul><li>非屏蔽中断 (外设提供向量号)——触发 INTR 引脚产生 </li></ul></ul><ul><ul><li>可屏蔽中断 ( 2 号)—— 触发 NMI 引脚产生 </li></ul></ul>
  38. 38. ⑶ 中断优先权 <ul><li>8086 规定中断优先权从高到低的顺序为: </li></ul><ul><li>① 除法错、溢出中断指令 INTO 、中断指令 INT n 。 </li></ul><ul><li>② 非屏蔽中断 NMI 。 </li></ul><ul><li>③ 可屏蔽中断 INTR 。 </li></ul><ul><li>④ 单步中断。 </li></ul>
  39. 39. 2. 8088 的中断向量表 <ul><li>中断向量 :指示中断服务程序的 入口地址 ,该地址包括: 偏移地址 IP 、 段地址 CS ( 共 32 位 ) </li></ul><ul><li>每个中断向量的低字是偏移地址、高字是段地址,需占用 4 个字节(低对低,高对高)。 </li></ul><ul><li>8088 微处理器从物理地址 000H 开始到 3FFH ( 1KB ),依次安排各个中断向量,向量号从 0 到 255 。 </li></ul><ul><li>256 个中断响亮所占用的 1KB 区域,称 中断向量表 </li></ul><ul><li>几个概念:向量号 N / 中断向量 / 中断服务程序的入口地址 </li></ul><ul><li>中断向量的存放首址= N × 4 </li></ul>4B 4B 中断向量表 1KB 3FFH 0H 0 号中断向量 IP CS
  40. 40. <ul><li>内部中断是由于 8086 内部执行程序出现特殊情况而引起 的中断 </li></ul><ul><ul><li>除法错中断: 向量号为 0 </li></ul></ul><ul><ul><li>指令中断( int n ): 向量号为 n </li></ul></ul><ul><ul><li>断点中断( int 3 ): 向量号为 3 </li></ul></ul><ul><ul><li>溢出中断( into ) : 向量号为 4 </li></ul></ul><ul><ul><li>单步中断: 向量号为 1 </li></ul></ul>内部中断的中断向量号已由 Intel 公司确定
  41. 41. <ul><li>外部中断是由于 8086 外部通过 CPU 引脚提出中断请求而引起 的中断 </li></ul><ul><ul><li>非屏蔽中断 ( NMI ): 向量号为 2 </li></ul></ul><ul><ul><ul><li>外部通过非屏蔽中断 NMI 请求,必须响应 </li></ul></ul></ul><ul><ul><ul><li>非屏蔽中断主要用于处理系统的意外或故障(如奇偶校验或协处理器运算错误等) </li></ul></ul></ul><ul><ul><li>可屏蔽中断 ( INTR ): 向量号 由中断控制器提供 </li></ul></ul><ul><ul><ul><li>外部通过可屏蔽中断 INTR 请求,由标志位 IF 控制是否响应;响应时将产生有效的 – INTA 信号 </li></ul></ul></ul><ul><ul><ul><li>可屏蔽中断主要用于外设中断请求(请求交换数据等服务) </li></ul></ul></ul>标志位 IF 控制可屏蔽中断的响应
  42. 42. 中断标志 IF 的状态 <ul><li>IF = 0 :可屏蔽中断不会被响应(禁止中断,关中断,中断屏蔽) </li></ul><ul><ul><li>系统复位,使 IF = 0 </li></ul></ul><ul><ul><li>任何一个中断被响应,使 IF = 0 </li></ul></ul><ul><ul><li>执行指令 CLI ,使 IF = 0 </li></ul></ul><ul><li>IF = 1 :可屏蔽中断会被响应(允许中断,开中断,中断开放) </li></ul><ul><ul><li>执行指令 STI ,使 IF = 1 </li></ul></ul><ul><li>执行指令 IRET 后 IF 将恢复为中断前的状态 </li></ul>明确 IF 标志的状态是关键
  43. 43. 3. 8086 中断处理过程 <ul><li>⑴ 可屏蔽中断的中断过程 </li></ul><ul><li>中断源通过中断控制器 8259 向 CPU 发出中断请求信号 </li></ul><ul><li>CPU 在每一个指令周期的最后一个时钟周期采样 INTR 信号线 </li></ul><ul><li>当 CPU 响应可屏蔽级的中断请求时,首先通过信号线向 8259 连续发出两个负脉冲的中断响应信号。 </li></ul><ul><li>CPU 暂停执行当前程序,而转去执行相应的中断处理程序 </li></ul><ul><li>CPU 执行中断服务程序 </li></ul><ul><li>返回断点,继续执行被打断的程序 </li></ul>
  44. 44. ⑵ 非屏蔽中断和软件中断的执行过程 <ul><li>查询中断的先后顺序 决定了各中断源的优先级别 </li></ul><ul><ul><li>软件中断 </li></ul></ul><ul><ul><ul><li>除法错中断 </li></ul></ul></ul><ul><ul><ul><li>指令中断 </li></ul></ul></ul><ul><ul><ul><li>溢出中断 </li></ul></ul></ul><ul><ul><li>非屏蔽中断 </li></ul></ul><ul><ul><li>可屏蔽中断 </li></ul></ul><ul><ul><li>单步中断 </li></ul></ul>高 低
  45. 45. 8086 的中断响应过程 NMI N 软件中断 INTR TF=1 中断响应周期 读中断向量号 下条指令 现行指令 IF = 1 N N N N Y Y Y Y Y 执行中断服务
  46. 46. 8086 的中断响应过程 (续) 单步中断 Y 还有 NMI TEMP = 1 标志寄存器入栈 TEMP = TF , IF = TF = 0 CS : IP 入栈 获取中断向量 执行服务程序 弹出 CS : IP 弹出标志寄存器 返回被中断程序 ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) N N Y ( 6 )
  47. 47. 8086 的中断响应过程 (续) <ul><li>8088 各种中断源的 优先权 ,实际上是指 被识别的先后顺序 </li></ul><ul><li>多种中断同时请求时, 最先响应 的则可能是 单步 中断或 NMI 中断 </li></ul>
  48. 48. 6.3.3 8259 中断控制器 <ul><li>Intel 8259A 是可编程中断控制器 PIC </li></ul><ul><li>可配合 CPU ( I8080/85 、 I8086/88/286/386 等)管理可屏蔽中断 </li></ul><ul><li>8259A 的基本功能 </li></ul><ul><ul><li>1 片 8259A 可以管理 8 级中断,经级联最多可扩展至 64 级 </li></ul></ul><ul><ul><li>每一级中断都可单独被屏蔽或允许 </li></ul></ul><ul><ul><li>在中断响应周期,可提供相应的调用指令(配合 I8080/85 )或中断向量号(配合 I8086/88/286/386 ) </li></ul></ul><ul><ul><li>8259A 设计有多种工作方式,通过初始化编程进行设置 </li></ul></ul>
  49. 49. 1. 8259A 的内部结构和引脚 D 7 ~D 0 -INTA INT 中断请求寄存器 中断屏蔽寄存器 数据 总线 缓冲器 IR0 IR7 读 / 写 控制 逻辑 级联 缓冲器 比较器 -RD -WR A 0 -CS CAS0 CSA1 CAS2 -SP/-EN 优先权判别电路 中断服务寄存器 控制逻辑
  50. 50. ⑴ 8259 的内部结构 <ul><li>中断请求寄存器 IRR </li></ul><ul><ul><li>保存 8 条外界中断请求信号 IR0 ~ IR7 的请求状态 </li></ul></ul><ul><ul><li>Di 位为 1 表示 IRi 引脚有中断请求;为 0 表示无请求 </li></ul></ul><ul><li>中断服务寄存器 ISR </li></ul><ul><ul><li>保存正在被 8259A 服务着的中断状态 </li></ul></ul><ul><ul><li>Di 位为 1 表示 IRi 中断正在服务中;为 0 表示没有被服务 </li></ul></ul><ul><li>中断屏蔽寄存器 IMR </li></ul><ul><ul><li>保存对中断请求信号 IR 的屏蔽状态 </li></ul></ul><ul><ul><li>Di 位为 1 表示 IRi 中断被屏蔽(禁止);为 0 表示允许 </li></ul></ul>
  51. 51. <ul><li>优先权判别器 PR </li></ul><ul><ul><li>优先权判别器( PR )用来识别各中断请求的优先级别 </li></ul></ul><ul><li>读 / 写控制电路 </li></ul><ul><li>读 / 写控制电路接收来自 CPU 的读 / 写控制命令和片选控制信息 </li></ul><ul><li>数据总线缓冲器 </li></ul><ul><li>这是一个 8 位的双向三态缓冲器,使 8259 和 CPU 数据总线 D7 ~ D0 直接挂接,完成命令和状态信息的传送。 </li></ul>
  52. 52. <ul><li>控制电路 </li></ul><ul><li>它是 8259 内部的控制器,根据 CPU 对 8259 编程设定的工作方式产生内部控制信号,向 CPU 发出中断请求信号 INT ,请求 CPU 响应,同时产生与当前中断请求服务有关的控制信号,并在接收到来自 CPU 的中断响应信号后,将中断类型号送到数据总线 。 </li></ul><ul><li>级联缓冲 / 比较器 </li></ul><ul><li>该功能部件用来实现多个 8259 的级联连接及数据缓冲方式。 </li></ul>
  53. 53. 8259A 的级连 CAS0 IR0 CAS1 IR1 CAS2 IR2 IR3 -INTA IR4 IR5 INT IR6 IR7 -SP/-EN CAS0 -INTA CAS1 CAS2 INT IR0 IR1 -SP/-EN IR7 CAS0 IR0 CAS1 IR1 CAS2 IR2 IR3 -INTA IR4 IR5 INT IR6 IR7 -SP/-EN -INTA INTR +5V 8259 级联工作示意图 输出得到响应 的从片编号
  54. 54. 中断级连 <ul><li>8259A 可以 级连 , 1 个 主片 最多可以级连 8 个 从片 </li></ul><ul><li>级连时, 主片 的级连线 CAS0 ~ CAS2 连至每个从片的 CAS0 ~ CAS2 , 输出被选中的从片编号 , </li></ul><ul><li>每个 从片 的中断请求信号 INT ,连至主 8259A 的一个中断请求输入端 IRx ;主片 的 INT 线连至 CPU 的中断请求输入端 INTR </li></ul><ul><li>在非缓冲方式下,引脚 - SP /-EN ,通过接地指定该片充当从片( -SP = 0 );反之若接高电平则该片充当主片( -SP = 1 )。 </li></ul>
  55. 55. ⑵ 8259 的引脚功能 <ul><li>8259 芯片有 28 条引脚,双列直插式封装,如图 6.10 所示。 </li></ul>图 6.10 8259 芯片引脚定义
  56. 56. 2. 8259A 的中断过程 CAS0 ~ CAS2 D 0 ~ D 7 -SP/-EN IR 0 ~ IR 7 CPU 响应周期 8259A 工作波形 INT 第 1 个总线周期 T 1 T 2 T 3 T 4 ALE CLK 第 2 个总线周期 T 1 T 2 T 3 T 4 第 1 个 -INTA 前保持高电平 -INTA -LOCK 中断向量 主片输出级联信号 从片接收
  57. 57. 3. 8259A 的工作方式 普通全嵌套方式 特殊全嵌套方式 自动循环方式 特殊循环方式 优先权固定方式 优先权循环方式 <ul><li>设置优先权方式 </li></ul>普通中断结束方式 特殊中断结束方式 自动中断结束方式 非自动中断结束方式 <ul><li>结束中断方式 </li></ul><ul><li>中断屏蔽方式 </li></ul>普通屏蔽方式 特殊屏蔽方式 <ul><li>中断触发方式 </li></ul>边沿触发方式 电平触发方式 <ul><li>数据线连接方式 </li></ul>缓冲方式 非缓冲方式 <ul><li>与 CPU 配合方式 </li></ul>与 8080/8085 CPU 配合 与 8086/8088 CPU 配合 <ul><li>级连方式 </li></ul>级连 不级连
  58. 58. ( 1 )中断结束处理方式 什么是 8259A 的中断结束? <ul><li>8259A 利用中断服务寄存器 ISR 判断: </li></ul><ul><ul><li>某位为 1 ,表示正在进行中断服务; </li></ul></ul><ul><ul><li>该位为 0 ,就是该中断结束服务。 </li></ul></ul><ul><li>这里说明如何使 ISR 某位为 0 ,不反映 CPU 的工作状态。 </li></ul>
  59. 59. ( 1 )中断结束处理方式(续) <ul><li>自动中断结束方式 </li></ul><ul><li>普通中断结束方式 </li></ul><ul><ul><li>配合全嵌套优先权方式使用 </li></ul></ul><ul><ul><li>当 CPU 用输出指令往 8259A 发出普通中断结束 EOI 命令 时, 8259A 就会把所有正在服务的中断中优先权最高的 ISR 位复位。 </li></ul></ul><ul><li>特殊中断结束方式 </li></ul><ul><ul><li>配合循环优先权方式使用 </li></ul></ul><ul><ul><li>CPU 在程序中向 8259A 发送一条特殊中断结束命令,这个命令中指出了要清除哪个 ISR 位。 </li></ul></ul>
  60. 60. ( 2 ) 缓冲方式 <ul><li>缓冲方式 </li></ul><ul><ul><li>8259A 的数据线需加缓冲器予以驱动 </li></ul></ul><ul><ul><li>8259A 把 SP*/EN* 引脚作为输出端,输出允许信号,用以锁存或开启缓冲器 </li></ul></ul><ul><li>非缓冲方式 </li></ul><ul><ul><li>SP*/EN* 引脚为输入端 </li></ul></ul><ul><ul><li>若 8259A 级连,由其确定是主片或从片 </li></ul></ul>
  61. 61. ( 3 )嵌套方式 <ul><li>普通全嵌套方式 </li></ul><ul><ul><li>8259A 的中断 优先权顺序固定不变 ,从高到低依次为 IR0 、 IR1 、 IR2 、…… IR7 </li></ul></ul><ul><ul><li>中断请求后, 8259A 对 当前请求中断中优先权最高的中断 IRi 予以 响应 ,将其向量号送上数据总线,对应 ISR 的 Di 位置位,至到中断结束( ISR 的 Di 位复位) </li></ul></ul><ul><ul><li>在 ISR 的 Di 位置位期间, 禁止再发生同级和低级优先权的中断 ,但允许高级优先权中断的嵌套 </li></ul></ul><ul><li>特殊全嵌套方式 </li></ul><ul><li>优先权自动循环方式 </li></ul><ul><li>优先权特殊循环方式 </li></ul>
  62. 62. ( 4 ) 中断屏蔽方式 <ul><li>普通屏蔽方式 </li></ul><ul><ul><li>将 IMR 的 Di 位置 1 ,则对应的中断 IRi 被屏蔽 ,该中断请求不能从 8259A 送到 CPU </li></ul></ul><ul><ul><li>如果 IMR 的 Di 位置 0 ,则允许 IRi 中断产生 </li></ul></ul><ul><li>特殊屏蔽方式 </li></ul><ul><ul><li>将 IMR 的 Di 位置 1 ,对应的中断 IRi 被屏蔽的同时,使 ISR 的 Di 位置 0 </li></ul></ul>
  63. 63. ⑸ 优先级的控制 <ul><li>① 固定优先级 </li></ul><ul><li>所谓固定优先级,即是指 8259 的 8 个中断源中, IR0 优先级最高, IR1 优先级次之,依次降低,直到 IR7 优先级最低,这个顺序固定不变。 </li></ul><ul><li>② 循环优先级 </li></ul><ul><li>8259 将中断源 IR0 ~ IR7 按下标序号顺序构成一个环,有两种规定方式: </li></ul><ul><li>● 自动优先循环级。 </li></ul><ul><li>该方式规定:刚被服务过的中断源,其优先级别被改为最低级,而将最高优先级赋给原来比它低一级的中断源,其它中断源的优先顺序依中断源顺序环确定。例如: CPU 对 IR3 的中断服务刚结束时, IR3 的优先级别变为最低,这时 8259 的 8 个中断源优先顺序由高到低为 IR4 , IR5 , IR6 , IR7 , IR0 , IR1 , IR2 , IR3 。 </li></ul><ul><li>● 指定优先循环级。 </li></ul><ul><li>该方式规定:在 OCW2 中指定的中断源,其优先级别被设为最低级,其它中断源的优先顺序依中断源顺序环确定。例如: CPU 在对 IR3 的中断服务过程中,通过指令在 OCW2 中指定 IR5 具有最低优先级,则 IR3 中断服务结束时, 2859A 的 8 个中断源优先顺序由高到低为 IR6 , IR7 , IR0 , IR1 , IR2 , IR3 , IR4 , IR5 。 </li></ul>
  64. 64. 优先权方式 <ul><li>普通全嵌套方式 </li></ul><ul><ul><li>8259A 的中断 优先权顺序固定不变 ,从高到低依次为 : </li></ul></ul><ul><ul><li>IR0 、 IR1 、 IR2 、…… IR7 </li></ul></ul><ul><ul><li>中断请求后, 8259A 对 当前请求中断中优先权最高的中断 IRi 予以 响应 ,将其向量号送上数据总线,对应 ISR 的 Di 位置位,至到中断结束( ISR 的 Di 位复位) </li></ul></ul><ul><ul><li>在 ISR 的 Di 位置位期间, 禁止再发生同级和低级优先权的中断 ,但允许高级优先权中断的嵌套 </li></ul></ul><ul><li>特殊全嵌套方式 ——允许同级中断嵌套(用于级连主片) </li></ul><ul><li>优先权自动循环方式 ——最高优先权自动转移到相邻的低优先级中断源 </li></ul><ul><li>优先权特殊循环方式 ——最高优先权转移到由指令指定的中断源 </li></ul>
  65. 65. ( 6 ) 中断触发方式 <ul><li>边沿触发方式 </li></ul><ul><ul><li>8259A 将中断请求输入端出现的上升沿作为中断请求信号 </li></ul></ul><ul><li>电平触发方式 </li></ul><ul><ul><li>中断请求端出现的高电平是有效的中断请求信号 </li></ul></ul>
  66. 66. ( 7 ) 中断级连 <ul><li>一个系统中, 8259A 可以级连,有一个主 8259A ,若干个(最多 8 个)从 8259A </li></ul><ul><li>级连时,主 8259A 的三条级连线 CAS0 ~ CAS2 作为输出线,连至每个从 8259A 的 CAS0 ~ CAS2 </li></ul><ul><li>每个从 8259A 的中断请求信号 INT ,连至主 8259A 的一个中断请求输入端 IR </li></ul><ul><li>主 8259A 的 INT 线连至 CPU 的中断请求输入端 </li></ul><ul><li>SP*/EN* 在非缓冲方式下,规定该 8259A 是主片( SP* = 1 )还是从片( SP* = 0 ) </li></ul>
  67. 67. 级连方式 <ul><li>不级连 ——只用 1 片,如 PC/XT </li></ul><ul><li>级连 ——使用 2~9 片,如 PC/AT ( 2 片) </li></ul>-INTA INTR IR0 IR7 IR7 IR0 CAS0~CAS2=010 INT INT D0~D7
  68. 68. 4. 8259A 的编程 <ul><li>初始化编程 </li></ul><ul><ul><li>8259A 开始工作前, </li></ul></ul><ul><ul><li>用户必须对 8259A 进行初始化编程。通过写入 初始化命令字 ICW 对 8259A 进行初始化。 </li></ul></ul><ul><li>工作方式编程 </li></ul><ul><li>在 8259A 工作期间 </li></ul><ul><ul><li>可以随时向 8259A 写入 操作命令字 OCW ,使之按用户设置的新的工作方式进行工作,用户还可以通过写 操作命令字 OCW 通知 8259A ,下面的操作要读取 8259A 中的状态信息,以便了解其工作情况。 </li></ul></ul>
  69. 69. ⑴ 8259 的初始化编程 <ul><li>8259 初始化编程的主要任务有: </li></ul><ul><li>① 复位 8259 芯片。 </li></ul><ul><li>② 设定中断请求信号 INT 有效的形式,是高电平有效,还是上升沿有效。 </li></ul><ul><li>③ 设定 8259 工作在单片方式还是多片级联方式。 </li></ul><ul><li>④ 设定 8259 管理的中断类型号的基值,即 0 级 IR0 所对应的中断类型号。 </li></ul><ul><li>⑤ 设定各中断级的优先次序, IR0 最高, IR7 最低。 </li></ul><ul><li>⑥ 设定一次中断处理结束时的结束方式。 </li></ul>
  70. 70. ( 1 )初始化命令字 ICW <ul><li>初始化命令字 ICW 最多有 4 个 </li></ul><ul><li>8259A 在开始工作前必须写入 </li></ul><ul><li>必须按照 ICW1 ~ ICW4 顺序写入 </li></ul><ul><li>ICW1 和 ICW2 是必须送的 </li></ul><ul><li>ICW3 和 ICW4 由工作方式决定 </li></ul>流程 D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0
  71. 71. ICW1 ×—— 表示可以任意 为 1 为 0 都可以(建议为 0 ) 1—— 只能为 1 ,作为标志 中断触发方式: LTIM = 1 ,电平触发方式 LTIM = 0 ,边沿触发方式 规定单片或级连方式: SNGL = 1 ,单片方式 SNGL = 0 ,级连方式 是否写入 ICW4 IC4 = 1 ,要写入 ICW4 IC4 = 0 ,不写入 ICW4 ,即 ICW4 规定的位全为 0 IC4 SNGL × LTIM 1 × × × D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  72. 72. ICW2 <ul><li>设置中断向量号 </li></ul><ul><li>T7 ~ T3 为中断向量号的高 5 位 </li></ul><ul><li>低 3 位由 8259A 自动确定: </li></ul><ul><li>IR0 为 000 、 IR1 为 001 、……、 IR7 为 111 </li></ul>× × × T 3 T 4 T 5 T 6 T 7 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  73. 73. ICW3 <ul><li>级连命令字 </li></ul><ul><li>主片 8259A : Si = 1 对应 IRi 接有从片;否则 IRi 没有连接从片 </li></ul><ul><li>从片 8259A : ID0 ~ ID2 编码说明从片 INT 引脚接到主片哪个 IR 引脚 </li></ul>S 0 / ID 0 S 1 / ID 1 S 2 / ID 2 S 3 S 4 S 5 S 6 S 7 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  74. 74. ICW4 <ul><li>嵌套方式: </li></ul><ul><li>特殊全嵌套方式( SFNM = 1 ) </li></ul><ul><li>普通全嵌套方式( SFNM = 0 ) </li></ul><ul><li>数据线的缓冲方式: </li></ul><ul><li>缓冲方式( BUF = 1 ) </li></ul><ul><li>非缓冲方式( BUF = 0 ) </li></ul><ul><li>主片 / 从片选择: </li></ul><ul><li>主片( M/S=1 ) </li></ul><ul><li>从片( M/S=0 ) </li></ul><ul><li>中断结束方式: </li></ul><ul><li>自动中断结束( AEOI = 1 ) </li></ul><ul><li>非自动中断结束( AEOI = 0 ) </li></ul><ul><li>微处理器类型: </li></ul><ul><li>16 位 80x86 (  PM = 1 ) </li></ul><ul><li>8 位 8080/8085 (  PM = 0 ) </li></ul>μPM AEOI M/S BUF SFNM 0 0 0 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  75. 75. 8259 芯片的初始化流程 ICW4 ( A0=1 ) SNGL=0 ? ICW1 的 IC4=1 ? 初始化完,准备接受中断请求输入 是 是 否 ICW1 ( A0=0 , D4=1 ) ICW2 ( A0=0 ) ICW3 ( A0=0 ) 否
  76. 76. 初始化主片 8259A <ul><li>mov al,11h ; 写入 ICW1 </li></ul><ul><li>out 20h,al </li></ul><ul><li>jmp intr1 </li></ul><ul><li>intr1: mov al,08h ; 写入 ICW2 </li></ul><ul><li>out 21h,al </li></ul><ul><li>jmp intr2 </li></ul><ul><li>intr2: mov al,04h ; 写入 ICW3 </li></ul><ul><li>out 21h,al </li></ul><ul><li>jmp intr3 </li></ul><ul><li>intr3: mov al,1h ; 写入 ICW4 </li></ul><ul><li>out 21h,al </li></ul>中断控制器的初始化程序段
  77. 77. 初始化从片 8259A <ul><li>mov al,11h ; 写入 ICW1 </li></ul><ul><li>out 0a0h,al </li></ul><ul><li>jmp intr5 </li></ul><ul><li>intr5: mov al,70h ; 写入 ICW2 </li></ul><ul><li>out 0a1h,al </li></ul><ul><li>jmp intr6 </li></ul><ul><li>intr6: mov al,02h ; 写入 ICW3 </li></ul><ul><li>out 0a1h,al </li></ul><ul><li>jmp intr7 </li></ul><ul><li>intr7: mov al, 01h ; 写入 ICW4 </li></ul><ul><li>out 0a1h,al </li></ul>中断控制器的初始化程序段
  78. 78. ⑵ 工作方式编程 <ul><li>8259 工作方式编程主要完成的任务是对中断请求的屏蔽、优先级循环控制、中断结束方式、内部控制寄存器的查询等。 </li></ul><ul><li>8259A 工作期间,可以随时接受操作命令字 OCW </li></ul><ul><li>OCW 共有 3 个: OCW1 ~ OCW3 </li></ul><ul><li>写入时没有顺序要求,需要哪个 OCW 就写入那个 OCW </li></ul>D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0
  79. 79. OCW1 屏蔽命令字 内容写入中断屏蔽寄存器 IMR Di = Mi 对应 IRi ,为 1 禁止 IRi 中断; 为 0 允许 IRi 中断。各位互相独立。 M 0 M 1 M 2 M 3 M 4 M 5 M 6 M 7 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  80. 80. OCW2 R 、 SL 和 EOI 配合使用 产生中断结束 EOI 命令和改变优先权顺序 L2 ~ L0 的 3 位编码 指定 IR 引脚 L0 L1 L2 0 0 EOI SL R D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  81. 81. OCW3 ESMM 、 SMM 设置中断屏蔽方式 P 、 RR 和 RIS 规定随后读取的 状态字 含义 RIS RR P 1 0 SMM ESMM 0 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  82. 82. 读取状态字 <ul><li>CPU 可读出 IRR 、 ISR 、 IMR 和查询字 </li></ul><ul><li>A0 为低,由 OCW3 中 RR 和 RIS 位设定读取 IRR 或 ISR ,由 OCW3 中 P 位设定读取查询字 </li></ul><ul><li>而 A0 引脚为高电平时读取的都是 IMR </li></ul><ul><li>查询字反映 8259A 是否有中断请求 </li></ul>
  83. 83. 查询字 中断位 I 位为 1 , 有外设请求中断 W2 ~ W0 的编码 当前中断请求的最高优先级 W 0 W 1 W 2 - - - - I D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
  84. 84. 补充: 命令字和状态字的区别方法 <ul><li>⑴ 利用读写信号区别写入的控制寄存器和读出的状态寄存器 </li></ul><ul><li>⑵ 利用地址信号区别不同 I/O 地址的寄存器 </li></ul><ul><li>⑶ 由控制字中的标志位说明是哪个寄存器 </li></ul><ul><li>⑷ 由芯片内顺序控制逻辑按一定顺序识别不同的寄存器 </li></ul><ul><li>⑸ 由前面的控制字决定后续操作的寄存器 </li></ul>接口电路中常用的方法
  85. 85. ( 1 )与 CPU 的配合方式 <ul><li>与 8080/8085 CPU 配合—— 中断响应时, -INTA 信号 3 次 有效 , 8259A 送 CALL XXXXH 指令 ( 3 个字节)的机器代码到数据总线 ; </li></ul><ul><li>与 8086/8088 CPU 配合 ——中断响应时 , -INTA 信号 2 次 有效 , 8259A 送相应的 中断向量号 ( 1 个字节)到数据总线。 </li></ul>8080/ 85 CPU 8259A 8086/ 88 CPU 8259A CALL XXXXH 中断向量号 -INTA INTR -INTA INTR 5. 80X86 微机的中断控制器
  86. 86. ( 2 ) 与处理器接口 写入 ICW1 、 OCW2 和 OCW3 写入 ICW2 ~ ICW4 和 OCW1 读出 IRR 、 ISR 和查询字 读出 IMR 数据总线高阻状态 数据总线高阻状态 0 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 × 1 1 1 × × × 功能 -CS A 0 -RD -WR
  87. 87. 6.4.3 中断识别和中断优先权处理 <ul><li>问题 1 :系统有多个中断请求, </li></ul><ul><li>CPU 如何识别中断源? </li></ul>办法 1 : 向量中断(硬件) 办法 2 : 中断查询(软 / 硬件结合) 中断源的识别
  88. 88. 中断查询接口 A 0 ~ A 15 锁 存 器 INTR 三态 缓冲器 译码 8001H D 0 ~ D 7 中断 A 中断 B 中断 C 中断 H … … -IOR
  89. 89. 6.4.3 中断优先权 (续 1 ) <ul><li>问题 2 :有多个中断同时请求, </li></ul><ul><li>CPU 如何应对? </li></ul>办法 1 : 链式优先权排队电路 办法 2 : 优先权编码电路 中断优先级排队
  90. 90. 链式中断优先权排队电路 A2 A1 C2 C1 D2 D1 B2 B1 中断源 A 触发器 中断源 B 触发器 中断源 C 触发器 中断矢量 D 中断矢量 C 中断矢量 B 中断矢量 A 中断源 D 触发器 缓冲器 缓冲器 缓冲器 缓冲器 -INTA 高优先级
  91. 91. 中断优先权编码电路 比较器失效信号 (先前无中断请求时有效) 比较器 8:3 优先权 编码器 优先权 寄存器 D 0 ~ D 7 2 1 A < B 中断请求 0 中断请求 1 中断请求 2 A0 A1 A2 INTR B0 B1 B2 … 有中断请求
  92. 92. 6.4.3 中断优先权 (续 2 ) <ul><li>问题 3 :中断处理过程中, </li></ul><ul><li>又有中断提出请求,怎么办? </li></ul>办法 1 : 链式优先权排队电路 办法 2 : 优先权编码电路 中断嵌套
  93. 93. I/O 接口的典型结构 <ul><li>1. 接口电路的 内部结构 </li></ul><ul><li>2. 接口电路的 外部特性 </li></ul><ul><li>3. 接口芯片的 分类 </li></ul><ul><li>4. 接口芯片的 可编程性 </li></ul>
  94. 94. 1. 接口电路的内部结构 <ul><li>CPU 与外设主要有数据、状态和控制信息需要相互交换,于是从应用角度看内部: </li></ul><ul><li>⑴ 数据寄存器 </li></ul><ul><ul><li>保存外设给 CPU 和 CPU 发往外设的数据 </li></ul></ul><ul><li>⑵ 状态寄存器 </li></ul><ul><ul><li>保存外设或接口电路的状态 </li></ul></ul><ul><li>⑶ 控制寄存器 </li></ul><ul><ul><li>保存 CPU 给外设或接口电路的命令 </li></ul></ul>理解端口
  95. 95. 2. 接口电路的外部特性 <ul><li>面向 CPU 一侧的信号: </li></ul><ul><ul><li>用于与 CPU 连接 </li></ul></ul><ul><ul><li>主要是数据、地址和控制信号 </li></ul></ul><ul><li>面向外设一侧的信号: </li></ul><ul><ul><li>用于与外设连接 </li></ul></ul><ul><ul><li>提供的信号五花八门 </li></ul></ul><ul><ul><li>功能定义、时序及有效电平等差异较大 </li></ul></ul>
  96. 96. 3. 接口芯片的分类 <ul><li>接口电路核心部分往往是一块或数块大规模集成电路芯片(接口芯片): </li></ul><ul><li>通用接口芯片 </li></ul><ul><ul><li>支持通用的数据输入输出和控制的接口芯片 </li></ul></ul><ul><li>面向外设的专用接口芯片 </li></ul><ul><ul><li>针对某种外设设计、与该种外设接口 </li></ul></ul><ul><li>面向微机系统的专用接口芯片 </li></ul><ul><ul><li>与 CPU 和系统配套使用,以增强其总体功能 </li></ul></ul>
  97. 97. 4. 接口电路的可编程性 <ul><li>许多接口电路具有多种功能和工作方式,可以通过编程的方法选定其中一种 </li></ul><ul><li>接口需要进行物理连接,还需要编写接口软件 </li></ul><ul><li>接口软件有两类: </li></ul><ul><ul><li>初始化程序段——设定芯片工作方式等 </li></ul></ul><ul><ul><li>数据交换程序段——管理、控制、驱动外设,负责外设和系统间信息交换 </li></ul></ul>
  98. 98. IBM PC/AT 主机板的 I/O 译码电路 接口芯片内部译码 A 0 ~ A 4 DMA 控制器 1 中断控制器 1 定时计数器 并行接口电路 DMA 页面寄存器 中断控制器 2 DMA 控制器 2 协处理器 A 5 A 6 A 7 A 8 A 9 ALS138 译码器 HLDA MASTER Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 A B C E1 -E2 -E3
  99. 99. IBM PC/XT 主机板的 I/O 译码电路 Y 0 Y 1 Y 2 Y 3 Y 4 Y 5 Y 6 Y 7 A 5 A 6 A 7 A 8 A 9 AEN -IOW A B C -G2B -G2A G1 74LS138 - DMA CS ( 8237 ) -INTR CS ( 8259 ) -T/C CS ( 8253 ) -PPI CS ( 8255 ) -WRTDMAPG (写 DMA 页面寄存器) -WRTNMIREG (写 NMI 屏蔽寄存器)
  100. 100. 用门电路实现 I/O 地址译码 A 9 A 8 A 7 A 6 A 5 A 2 A 4 A 3 AEN A 1 A 0 74LS03 I/O 地址 3E7H
  101. 101. 6.4 DMA 传送方式 <ul><li>希望克服程序控制传送的不足: </li></ul><ul><li>外设 -> CPU -> 存储器 </li></ul><ul><li>外设← CPU ← 存储器 </li></ul><ul><li>直接存储器存取 DMA :不经 CPU ,不用指令 </li></ul><ul><li>外设 -> 存储器 ( DMA 写) </li></ul><ul><li>外设 ← 存储器 ( DMA 读) </li></ul><ul><li>扩展 : 外设 ↔ 外设 </li></ul><ul><li>CPU 出让系统总线(输出高阻),由 DMA 控制器( DMAC )接管系统总线 </li></ul>
  102. 102. 6.4.1 DMA 传送的工作过程 <ul><li>⑴ CPU 对 DMA 控制器进行初始化设置 </li></ul><ul><li>⑵ 外设、 DMAC 、 CPU , 3 者通过应答信号建立联系: CPU 将总线暂交 DMAC 控制,事后再将控制权返还。 </li></ul><ul><li>⑶ DMA 传送 </li></ul><ul><ul><li>DMA 读 :存储器 -> 外设 </li></ul></ul><ul><ul><li>DMA 写 :存储器 ← 外设 </li></ul></ul><ul><li>⑷ DMAC 的功能: </li></ul><ul><ul><li>对存储器寻址地址动加 1/ 减 1 </li></ul></ul><ul><ul><li>计数器减 1 </li></ul></ul><ul><ul><li>判断传送是否完成 </li></ul></ul>传送流程
  103. 103. DMA 传送( 以 DMA 写为例) -MEMW -IOR 数据总线 地址总线 输入设备 存储器 DMAC CPU ② ③ ④ ① HOLD HLDA
  104. 104. DMA 传送流程 HLDA 发存储器地址 传送数据 传送结束 ? DMA 结束 修改地址指针
  105. 105. 传送方式的比较 <ul><li>无条件传送 :慢速外设需与 CPU 保持同步 </li></ul><ul><li>查询传送 : 简单实用,效率较低 </li></ul><ul><li>中断传送 :外设主动,可与 CPU 并行工作,但每次传送需要大量额外时间开销 </li></ul><ul><li>DMA 传送 : DMAC 控制,外设直接和存储器进行数据传送,适合大量、快速数据传送 </li></ul>
  106. 106. 6.4.2 DMA 控制器 8237 <ul><li>每个 8237A 芯片有 4 个 DMA 通道,就是有 4 个 DMA 控制器 </li></ul><ul><li>每个 DMA 通道具有不同的优先权 </li></ul><ul><li>每个 DMA 通道可以分别允许和禁止 </li></ul><ul><li>每个 DMA 通道有 4 种工作方式 </li></ul><ul><li>一次传送的最大长度可达 64KB </li></ul><ul><li>多个 8237A 芯片可以级连,扩展通道数 </li></ul>
  107. 107. 1. DMA 控制器的功能 <ul><li>① 编程设定 DMA 的传输模式及其所访问内存的地址区域。 </li></ul><ul><li>② 屏蔽或接受外围设备的 DMA 请求( DREQ ),当有多个设备同时请求时,还要进行优先级排队,首先接受最高级的请求。 </li></ul><ul><li>③ 向 CPU 转达 DMA 请求, DMA 控制器要向 CPU 发出总线请求信号 HOLD( 高电平有效 ) ,请求 CPU 放弃总线的控制。 </li></ul><ul><li>④ 接收 CPU 的总线响应信号 (HLDA) ,接管总线控制权,实现对总线的控制。 </li></ul><ul><li>⑤ 向相应外围设备转达 DMA 允许信号 DACK 。于是在 DMA 控制器的管理下,实现外围设备和存储器之间的数据直接传送。 </li></ul><ul><li>⑥ 在传送过程中进行地址修改和字节计数。在传送完要求的字节数后,向 CPU 发出 DMA 结束信号 (EOP) ,撤消总线请求 (HRQ) ,将总线控制权交还给 CPU 。 </li></ul>
  108. 108. 2. 可编程 DMA 控制器 Intel8237DMAC 的主要性能和内部结构 <ul><li>内部结构和外部引脚都相对比较复杂 </li></ul><ul><li>应用观点,内部主要由两类寄存器组成 </li></ul><ul><ul><li>通道寄存器 </li></ul></ul><ul><ul><li>控制和状态寄存器 </li></ul></ul>首先分类展开外部引脚
  109. 109. 3. 8237 的 外部引脚
  110. 110. (1) 请求与响应信号 <ul><li>DREQ 0 ~ DREQ 3 : DMA 通道请求。当外设需要请求 DMA 服务时,将 DREQ 信号置成有效电平,并要保持到产生响应信号。 </li></ul><ul><li>HRQ : 总线请求。 8237A 输出有效的 HRQ 高电平,向 CPU 申请使用系统总线。 </li></ul><ul><li>HLDA : 总线响应。 8237A 接受来自 CPU 的响应信号 HLDA ,取得了总线的控制权。 </li></ul><ul><li>DACK 0 ~ DACK 3 : DMA 通道响应。 8237A 使请求服务的通道产生相应的 DMA 响应信号 。 </li></ul>3. 8237 的外部引脚
  111. 111. (2) DMA 传送控制信号 <ul><li>A 0 ~ A 7 :地址线。输出低 8 位存储器地址。 </li></ul><ul><li>DB 0 ~ DB 7 :数据线。输出高 8 位存储器地址;存贮器与存贮器的传送期间,用于数据传送。 </li></ul><ul><li>ADSTB : 地址选通。 DMA 传送开始时,输出高有效,把在 DB 0 ~ DB 7 上输出的高 8 位地址锁存在外部锁存器中。 </li></ul><ul><li>AEN : 地址允许。输出高有效,将锁存的高 8 位地址送入系统总线,与芯片此时输出的低 8 位地址组成 16 位存储器地址。 </li></ul>
  112. 112. (2) DMA 传送控制信号(续) <ul><li>MEMR* :存储器读。有效将数据从存储器读出 </li></ul><ul><li>MEMW* : 存储器写。有效将数据写入存储器 </li></ul><ul><li>IOR* : I/O 读。有效将数据从外设读出 </li></ul><ul><li>IOW* : I/O 。 有效将数据写入外设 </li></ul><ul><li>READY : 准备好。 DMA 传送的 S 3 下降沿检测到为低时,插入等待状态 Sw ,直到 READY 为高才进入第 4 个时钟周期 S 4 。 </li></ul><ul><li>EOP* :过程结束。 DMA 传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结 DMA 传送。 </li></ul>
  113. 113. (3) 处理器接口信号 <ul><li>DB0 ~ DB7 :数据线。用于 8237A 与微处理器进行数据交换。 </li></ul><ul><li>A0 ~ A3 :地址线。用以选择芯片内部寄存器。 </li></ul><ul><li>CS* :片选。低有效时,微处理器与 8237A 通过数据线通信,主要完成对 8237A 的编程。 </li></ul><ul><li>IOR* : I/O 读。读取 8237A 内部寄存器。 </li></ul><ul><li>IOW* : I/O 写。写入 8237A 内部寄存器。 </li></ul><ul><li>CLK : 时钟。控制芯片内部操作和数据传输。 </li></ul><ul><li>RESET : 复位。使 8237A 处于初始状态。 </li></ul>
  114. 114. 4. 8237 DMAC 的工作方式 <ul><li>DMA 传送方式 </li></ul><ul><ul><li>· 单字节传送方式 · 数据块传送方式 </li></ul></ul><ul><ul><li>· 请求传送方式 · 级连方式 </li></ul></ul><ul><li>DMA 传送类型 </li></ul><ul><ul><li>· DMA 读 · DMA 写 · DMA 检验 </li></ul></ul><ul><li>存储器到存储器的传送 </li></ul>工作模式(传送方式)和操作类型。
  115. 115. ① . DMA 传送-单字节方式 <ul><li>每次 DMA 传送时仅传送一个字节 </li></ul><ul><li>传送一个字节之后,字节数寄存器减 1 ,地址寄存器加 1 或减 1 , HRQ 变为无效 </li></ul><ul><li>8237A 释放系统总线,将控制权还给 CPU </li></ul><ul><li>若传送后使字节数从 0 减到 FFFFH ,则终结 DMA 传送或重新初始化 </li></ul><ul><li>特点: </li></ul><ul><ul><li>一次传送一个字节,效率略低 </li></ul></ul><ul><ul><li>DMA 传送之间 CPU 有机会重新获取总线控制权 </li></ul></ul>⑴ 工作模式 : ( 每个通道有 4 种工作模式 )
  116. 116. ② 数据块传送方式 <ul><li>由 DREQ 启动就连续地传送数据,直到字节数寄存器从 0 减到 FFFFH 终止计数,或由外部输入有效信号终结 DMA 传送 </li></ul><ul><li>DREQ 只需维持有效到 DACK 有效 </li></ul><ul><li>特点: </li></ul><ul><ul><li>一次请求传送一个数据块,效率高 </li></ul></ul><ul><ul><li>整个 DMA 传送期间 CPU 长时间无法控制总线(无法响应其他 DMA 请求、无法处理中断等) </li></ul></ul>
  117. 117. ③ 请求传送方式 <ul><li>DREQ 信号有效就连续传送数据 </li></ul><ul><li>DREQ 信号无效, DMA 传送被暂时中止, 8237A 释放总线, CPU 可继续操作 </li></ul><ul><li>DMA 通道的地址和字节数的中间值仍被保持 </li></ul><ul><li>DREQ 信号再次有效, DMA 传送就继续进行 </li></ul><ul><li>如果字节数寄存器从 0 减到 FFFFH ,或者由外部送来一个有效的信号,将终止计数 </li></ul><ul><li>特点: </li></ul><ul><ul><li>DMA 操作可由外设利用 DREQ 信号控制传送的过程 </li></ul></ul>
  118. 118. ④ 级联方式 <ul><li>用于通过多个 8237A 级连以扩展通道 </li></ul><ul><li>第二级的 HRQ 和 HLDA 信号连到第一级某个通道的 DREQ 和 DACK 上 </li></ul><ul><li>第二级芯片的优先权等级与所连通道的优先权相对应 </li></ul><ul><li>第一级只起优先权网络的作用,实际的操作由第二级芯片完成 </li></ul><ul><li>还可由第二级扩展到第三级等 </li></ul>
  119. 119. ⑵ 操作类型 <ul><li>DMA 读 ——把数据由存储器传送到外设 </li></ul><ul><ul><li>由 MEMR* 有效从存储器读出数据,由 IOW* 有效把这一数据写入外设 </li></ul></ul><ul><li>DMA 写 ——把外设输入的数据写入存储器 </li></ul><ul><ul><li>由 IOR* 有效从外设输入数据,由 MEMW* 有效把这一数据写入存储器。 </li></ul></ul><ul><li>DMA 检验 ——空操作 </li></ul><ul><ul><li>8237A 不进行任何检验 </li></ul></ul><ul><ul><li>外设可以进行 DMA 校验 </li></ul></ul><ul><ul><li>存储器和 I/O 控制线保持无效,不进行传送 </li></ul></ul><ul><li>存储器->存储器传送 </li></ul>
  120. 120. 存储器->存储器传送 <ul><li>固定使用通道 0 和通道 1 </li></ul><ul><li>通道 0 的地址寄存器存源区地址 </li></ul><ul><li>通道 1 的地址寄存器存目的区地址,通道 1 的字节数寄存器存传送的字节数 </li></ul><ul><li>传送由设置通道 0 的软件请求启动 </li></ul><ul><li>每传送一字节需用 8 个时钟周期 </li></ul><ul><ul><li>前 4 个时钟周期用通道 0 地址寄存器的地址从源区读数据送入 8237A 的临时寄存器 </li></ul></ul><ul><ul><li>后 4 个时钟周期用通道 1 地址寄存器的地址把临时寄存器中的数据写入目的区 </li></ul></ul>
  121. 121. 5. 8237 的控制字和编程 <ul><li>8237A 共有 10 种内部寄存器,对它们的操作有时需要配合 3 个软件命令 </li></ul><ul><li>8237A 的“ 软件命令 ” </li></ul><ul><ul><li>不需要通过数据总线写入控制字 </li></ul></ul><ul><ul><li>直接由地址和控制信号译码实现 </li></ul></ul>全部都用地址 A 0 ~ A 3 区分
  122. 122. (1) 当前地址寄存器 <ul><li>保持 DMA 传送的当前地址值 </li></ul><ul><li>每次传送后该寄存器的值自动加 1 或减 1 </li></ul><ul><li>这个寄存器的值可由 CPU 写入和读出 </li></ul>基地址寄存器 存放 初始值 ㈠ 内部寄存器
  123. 123. (2) 当前字节数寄存器 <ul><li>保持 DMA 传送的剩余字节数 </li></ul><ul><li>每次传送后,该寄存器的值减 1 </li></ul><ul><li>这个寄存器的值可由 CPU 写入和读出 </li></ul><ul><li>该寄存器的值减至 0 ,再减 1 (从 0 减到 FFFFH )时,终止计数 </li></ul>传送 N 个字节, 初始值 为 N - 1 传送 N 个字节, 初始值 为 N - 1 基字节数寄存器 存放 初始值
  124. 124. ⑶ 基地址寄存器和基字节计数寄存器 <ul><li>每个通道均有一个 16 位的基地址寄存器和一个 16 位的基字节计数寄存器。 </li></ul><ul><li>它们用来存放所对应的地址寄存器和字节计数器的初始值。 </li></ul><ul><li>在编程时,这两个寄存器由 CPU 以连续两字节方式与对应的当前寄存器同时写入,但它们的内容不能读出。 </li></ul><ul><li>在自动预置方式时,基本寄存器的内容被用来恢复当前寄存器的初始值。 </li></ul>
  125. 125. (4) 命令寄存器 <ul><li>存放 8237A 的命令字 </li></ul><ul><li>设置 8237A 芯片的操作方式 </li></ul><ul><li>影响每个 DMA 通道 </li></ul><ul><li>复位时使命令寄存器清零 </li></ul><ul><li>设置 D 2 = 1 才使 8237A 可以作为 DMA 控制器 </li></ul>请看 命令字 的格式
  126. 126. 命令字格式 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7 0 DACK 低有效 1 DACK 高有效 0 DREQ 高有效 1 DREQ 低有效 0 滞后写 1 扩展写 × 若 D3 = 1 0 固定优先权 1 循环优先权 0 正常时序 1 压缩时序 × 若 D0 = 1 0 允许 DMAC 工作 1 禁止 DMAC 工作 0 允许通道 0 地址改变 1 禁止通道 0 地址改变 × 若 D0 = 0 0 禁止存储器之间传送 1 允许存储器之间传送
  127. 127. (5) 方式寄存器 <ul><li>存放相应通道的方式控制字 </li></ul><ul><li>选择某个 DMA 通道的工作方式 </li></ul><ul><li>其中用最低 2 位选择哪个 DMA 通道 </li></ul>请看 方式字 的格式
  128. 128. 方式字格式 00 请求模式 01 单字节模式 10 数据块模式 11 级联模式 0 地址增量(加 1 ) 1 地址减量(减 1 ) 0 禁止自动初始化 1 允许自动初始化 00 DMA 校验 01 DMA 写 10 DMA 读 11 非法 ×× 若 D7D6 = 11 00 通道 0 01 通道 1 10 通道 2 11 通道 3 D 1 D 0 D 3 D 2 D 4 D 5 D 7 D 6
  129. 129. (6) 请求寄存器 <ul><li>存放软件 DMA 请求状态 </li></ul><ul><li>除硬件 DMA 请求外,当工作在数据块传送方式时也可以通过软件发出 DMA 请求 </li></ul><ul><li>若是存贮器到存贮器传送,则必须由软件请求启动通道 0 </li></ul>请看 请求字 的格式
  130. 130. 请求字格式 D 1 D 0 D 2 D 7 D 6 D 5 D 4 D 3 任意 0 复位 1 置位 00 通道 0 01 通道 1 10 通道 2 11 通道 3
  131. 131. (7) 屏蔽寄存器 <ul><li>控制外设硬件 DMA 请求是否被响应(为 0 允许),各个通道互相独立。 3 种方法: </li></ul><ul><ul><li>单通道屏蔽字只对一个 DMA 通道屏蔽位进行设置 </li></ul></ul><ul><ul><li>主屏蔽字对 4 个 DMA 通道屏蔽位同时进行设置 </li></ul></ul><ul><ul><li>清屏蔽寄存器命令使 4 个屏蔽位都清零(允许) </li></ul></ul><ul><li>复位使 4 个通道全置于屏蔽状态 </li></ul><ul><li>当一个通道的 DMA 过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次 DMA 传送 </li></ul>请看 屏蔽字 的格式
  132. 132. 单通道屏蔽字格式 D 1 D 0 D 2 D 7 D 6 D 5 D 4 D 3 任意 0 清屏蔽位 1 置屏蔽位 00 通道 0 01 通道 1 10 通道 2 11 通道 3
  133. 133. 主屏蔽字格式 Di = 0 清通道 I 屏蔽位 Di = 1 置通道 I 屏蔽位 D 0 D 1 D 2 D 3 D 7 D 6 D 5 D 4 任意
  134. 134. (8) 状态寄存器 <ul><li>可由 CPU 读取 </li></ul><ul><li>低 4 位反映读命令这个瞬间每个通道是否产生 TC (为 1 ,表示该通道传送结束) </li></ul><ul><li>高 4 位反映每个通道的 DMA 请求情况(为 1 ,表示该通道有请求) </li></ul><ul><li>状态位在复位或被读出后,均被清零 </li></ul>
  135. 135. (9) 暂存寄存器 <ul><li>在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元 </li></ul><ul><li>传送完成,临时寄存器只会保留最后一个字节,可由 CPU 读出 </li></ul><ul><li>复位使临时寄存器内容为零 </li></ul>
  136. 136. 补充 : 读写通道寄存器 <ul><li>CPU 与 8237A 之间通过 8 位数据总线交换信息, 8237A 的通道寄存器均为 16 位 </li></ul><ul><li>需要两次读写操作才能实现 CPU 与 8237A 之间的一个完整数据的交换 </li></ul><ul><li>8237A 内含一个 高 / 低触发器 ,用来控制读写通道寄存器的高、低字节 </li></ul>
  137. 137. 补充 : 高 / 低触发器 <ul><li>该触发器为 0 ,控制读写低字节 </li></ul><ul><li>该触发器为 1 ,控制读写高字节 </li></ul><ul><li>软、硬件复位后,触发器为 0 </li></ul><ul><li>每次读写通道寄存器,自动改变触发器状态。如果 对 16 位寄存器的操作用两次连续读写进行,就不必清除这个触发器 </li></ul><ul><li>清除高 / 低触发器 软件命令 ( A 3 A 2 A 1 A 0 = 1100 )将使高 / 低触发器清零 </li></ul>
  138. 138. (10) 软件命令 <ul><li>清除高 / 低触发器软件命令 </li></ul><ul><ul><li>A 3 A 2 A 1 A 0 = 1100 ,使高 / 低触发器清零 </li></ul></ul><ul><li>主清除命令 </li></ul><ul><ul><li>A 3 A 2 A 1 A 0 = 1101 , 使高 / 低触发器清零 </li></ul></ul><ul><ul><li>还使命令、状态、请求、临时寄存器清零 </li></ul></ul><ul><ul><li>使屏蔽寄存器置为全 1 (禁止 DMA 请求) </li></ul></ul><ul><ul><li>主清除命令与硬件的 RESET 信号具有相同的功能 </li></ul></ul><ul><li>清屏蔽寄存器命令 </li></ul><ul><ul><li>A 3 A 2 A 1 A 0 = 1110 , 使 4 个屏蔽位都清零(允许 DMA 请求) </li></ul></ul>
  139. 139. ㈡ 内部寄存器的寻址 <ul><li>对 8237 内部寄存器的寻址和执行与控制器有关的软件命令,都由芯片选择信号, I/O 读、 I/O 写和 A3 ~ A0 地址线的不同状态编码来完成。 = 0 表示访问该 8237DMAC 芯片; A3 = 0 则表示访问某个地址寄存器或字节计数器; A3=1 则表示访问控制寄存器和状态寄存器。 </li></ul><ul><li>或正在发出一条软件命令。 </li></ul><ul><li>在和 A3 都为 0 时, CPU 访问某个地址寄存器或字节计数器,并由 A2 ~ A1 编码状态给出通道号,而 A0=0 表示访问当前地址寄存器, A0 = 1 表示访问当前字节计数器。而用为低电平或为低电平表示是读操作还是写操作。 </li></ul><ul><li>对当前地址寄存器进行写入的同时,也写入基本地址寄存器;对当前字节计数器进行写入的同时,也写入基本字节计数器。 </li></ul>
  140. 140. ㈢ 8237 的编程步骤 ① 输出主清除命令; ② 写入基与现行地址寄存器; ③ 写入基与现行字节数址寄存器; ④ 写入模式寄存器; ⑤ 写入屏蔽寄存器; ⑥ 写入命令寄存器; ⑦ 写入请求寄存器; 若有软件请求,就写入到指定通道,就可以开始 DMA 传送过程;若无软件请求,则在完成了① -⑦ 的编程后,由通道的 DREQ 启动 DMA 传送过程。
  141. 141. 例:若要利用通道 0 ,由外设 ( 磁盘 ) 输入 32KB 的一个数据块,传送至内存 8000H 开始的区域 ( 增量传送 ) ,采用块连续传送的方式,传送完不自动初始化,外设的 DREQ 和 DACK 都为高电平有效。 要编程首先要确定端口地址。地址的低 4 位用以区分 8237 的内部寄存器,高 4 位地址 A7 ~ A4 经译码后,连至选片端 CS ,假定选中时高 4 位为 5 。 ① 模式控制字 D7 D6 D5 D4 D3 D2 D1 D0 1 0 0 0 0 1 0 0 ② 屏蔽字 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 ③ 命令字 D7 D6 D5 D4 D3 D2 D1 D0 1 0 1 0 0 0 0 0
  142. 142. DMA 通道 0 的刷新编程 OUT 5DH , AL ;输出主清除命令 MOV AL , 00H OUT 50H , AL ;输出基和现行地址的低 8 位 MOV AL , 80H OUT 50H , AL ;输出基和现行地址的高 8 位 MOV AL , 00H OUT 51H , AL MOV AL , 80H OUT 51H , AL ;给基和现行字节数赋值 MOV AL , 84H OUT 5BH , AL ;输出模式字 MOV AL , 00H OUT 5AH , AL ;输出屏蔽字 MOV AL , 0AOH OUT 58H , AL ;输出命令字 IBM PC/XT
  143. 143. 6. Intel 8237 的应用举例 <ul><li>㈠ 8088 访问 8237 的寻址 ( 自学 ) </li></ul><ul><li>㈡ 8237 的初始化编程 </li></ul><ul><li>在进行 DMA 传输之前, CPU 要对 8237 进行编程。 DMA 传输要涉及到 RAM 地址、数据块长、操作方式和传输类型,因此,在每次 DMA 传输之前,除自动预置外,都必须对 8237 进行一次初始化编程。若数据块超过 64KB 界限时,还必须将页面地址写入页面寄存器。 </li></ul><ul><li>㈢ 利用 8237 的 CHl 实现 DMA 数据传送 ( 自学 ) </li></ul>
  144. 144. 6.5 例题解析 <ul><li>略 </li></ul>
  145. 145. 第 6 章教学要求 1. 了解 8237A 引脚特点和工作时序 2. 掌握 8237A 的各种工作方式 3. 理解 8237A 内部寄存器的作用和编程 4. 了解 8237A 在 IBM PC 系列机上的应用情况

×