输入输出技术

560 views

Published on

Input and Output

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
560
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

输入输出技术

  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 系列机上的应用情况

×