第6章 输入输出技术

145
6 章 输入输出技 6.3 中断方式 6.4 直接存贮器存取 6.5 例题解析 6.2 程序控制方式 6.1 输入输出的基本方

Upload: jugnootest

Post on 06-Jul-2015

113 views

Category:

Documents


4 download

DESCRIPTION

khhj

TRANSCRIPT

第 6 章 输入输出技 术

6.3 中断方式

6.4 直接存贮器存取

6.5 例题解析

6.2 程序控制方式

6.1 输入输出的基本方法

- 2- 目录 上页 下页 结束

第 6 章 基本输入输出接口教学重点

I/O 接口电路的典型结构

无条件传送方式

查询传送方式

中断工作过程

- 3- 目录 上页 下页 结束

6.1 输入输出的基本方法6.1.1 输入输出接口的概念及基本结构

为什么需要 I/O 接口(电路)?微机的外部设备多种多样

工作原理、驱动方式、信息格式、以及工作速度方面彼此差别很大

它们不能与 CPU 直接相连

必须经过中间电路再与系统相连

这部分电路被称为 I/O 接口电路

多种外设

1. 接口电路

- 4- 目录 上页 下页 结束

6.1.1 输入 / 输出接口概述(续 1 )

什么是 I/O 接口(电路)?

I/O 接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路

PC 机系统板的可编程接口芯片、 I/O总线槽的电路板(适配器)都是接口电路

CPUCPU 接口接口

电路电路

I/OI/O

设备设备

- 5- 目录 上页 下页 结束

6.1.1 输入 / 输出接口概述(续 2 )

什么是微机接口技术?

处理微机系统与外设间联系的技术

注意其软硬结合的特点

根据应用系统的需要,使用和构造相应的接口电路,编制配套的接口程序,支持和连接有关的设备

- 6- 目录 上页 下页 结束

2. 接口电路分类

⑴ 按接口电路的通用性

⑵ 按数据传送格式

⑶ 按接口是否可编程

⑷ 按时序控制方式

专用接口 通用接口

并行接口 串行接口

可编程接口 不可编程接口

同步接口 异步接口

- 7- 目录 上页 下页 结束

3. 接口的基本功能

⑴ 对输入输出数据进行缓冲和锁存输出接口有锁存环节

输入接口有缓冲环节

⑵ 对信号的形式和数据的格式进行变换微机直接处理:数字量、开关量、脉冲量

⑶ 对 I/O 端口进行寻址

⑷ 与 CPU 和 I/O 设备进行联络

⑸ 中断管理 /DMA 控制功能

- 8- 目录 上页 下页 结束

4. 接口电路的基本结构

控制总线 CB

地址总线AB

I/O 接口电路

数据

控制

状态

数据总线 DBCPU 外设

控制寄存器

状态寄存器

数据寄存器

- 9- 目录 上页 下页 结束

6.1.2 外设接口的编址方式

接口电路占用的 I/O 端口有两类编排形式

I/O 端口单独编址I/O 地址空间独立于存储地址空间

如 8086/8088

I/O 端口与存储器统一编址它们共享一个地址空间

如 M6800

- 10- 目录 上页 下页 结束

1. I/O 端口与存储器统一编址

优点:不需要专门的 I/O 指令

I/O 数据存取与存储器数据存取一样灵活

缺点:I/O 端口要占去部分存储器地址空间

程序不易阅读(不易分清访存和访问外设)

内存部分

I/O部分

存储空间

0

FFFFF

- 11- 目录 上页 下页 结束

2. I/O 端口单独编址 优点:

I/O 端口的地址空间独立

控制和地址译码电路相对简单

专门的 I/O 指令使程序清晰易读

缺点:I/O 指令没有存储器指令丰富

内存空间

I/O空间

FFFFF

0

FFFF

0

80x86 采用 I/O 端口独立编址

- 12- 目录 上页 下页 结束

补充 : 8088/8086 的输入输出指令

输入指令IN AL,i8/DX ; 字节输入

IN AX,i8/DX ; 字输入

输出指令OUT i8/DX,AL ; 字节输出

OUT i8/DX ; 字输出

功能演示

功能演示

- 13- 目录 上页 下页 结束

6.1.3 输入输出的基本方法

1. 程序控制方式

2. 中断控制方式

3. 直接存储器存取控制方式

4. 通道方式

5. 外围处理方式

- 14- 目录 上页 下页 结束

数据传送方式

程序控制下的数据传送——通过 CPU 执行程序中的 I/O 指令来完成传送,又分为:

无条件传送

查询传送

中断传送 直接存储器存取( DMA )——传送请求由外设向 DMA 控制器( DMAC )提出,后者向 CPU 申请总线,最后 DMAC 利用系统总线来完成外设和存储器间的数据传送

I/O 处理机—— CPU 委托专门的 I/O 处理机来管理外设,完成传送和相应的数据处理

- 15- 目录 上页 下页 结束

1. 无条件传送方式及其接口 在 CPU 与慢速变化的设备交换数据时,可以认为它们总是处于“就绪”状态,随时可以进行数据传送,这就是无条件传送,或称立即传送、同步传送

适合于简单设备,如 LED 数码管、按键 / 按纽等

无条件传送的接口和操作均十分简单

这种传送有前提:外设必须随时处于就绪状态传送流程

接口实例

6.2. 程序控制方式

- 16- 目录 上页 下页 结束

无条件传送:输入示例

IOR

三态缓冲器 OE

I/O装置地

址译码器CS

D7~ D0

A15~ A1

A00160H

MOV DX, 160HIN AL, DX

- 17- 目录 上页 下页 结束

无条件传送:输入实例

MOV DX, 160HIN AL, DX

74LS244+5V

10K x 8

G1 G2

数据总线

CS

RD

- 18- 目录 上页 下页 结束

无条件传送:输出示例

地址译码器

数据锁存器

A15

A0~ A14

-IOW

CS

0160H

输出设备

D7~ D0

MOV DX, 160HMOV AL, [BX]OUT DX, AL

- 19- 目录 上页 下页 结束

无条件传送:输出实例

MOV DX, 160HMOV AL, [BX]OUT DX, AL

+5V74LS373

300 x 8LE OE

数据总线

CSWR

- 20- 目录 上页 下页 结束

无条件传送:输入输出接口

K7

K1

K0

+5VD0~ D7

A0~

A15

CLKLS06反相

驱动器

LS2738D

锁存器

LS244三态

缓冲器

8000H

译码

+5V

LED0

LED7

-G

-IOW

-IOR

- 21- 目录 上页 下页 结束

无条件传送:输入输出接口

next: mov dx,8000h ;DX 指向数据端口

in al, dx ;从输入端口读开关状

not al ;反相

out dx, al ; 送输出端口显示

call delay ;调子程序延时

jmp next ; 重复

- 22- 目录 上页 下页 结束

就绪?

2. 查询传送方式及其接口

CPU先了解(查询)外设的工作状态,在外设就绪(可以交换信息的情况下)实现数据的输入或输出

对多个外设的情况,则 CPU 按一定顺序依次查询(轮询)。先查询的外设将优先进行数据交换

查询传送的特点是:工作可靠,适用面宽,但传送效率低

- 23- 目录 上页 下页 结束

查询传送的两个环节

查询环节寻址状态口

读取状态寄存器的标志位

若不就绪就继续查询,直至就绪

传送环节寻址数据口

是输入,通过输入指令从数据口读入数据

是输出,通过输出指令向数据口输出数据

输入状态

就绪?

数据交换

Y

N

传送流程

接口实例

- 24- 目录 上页 下页 结束

查询输入接口

-IOR+5V

8D锁存器

8 位三态

缓冲器

译码

1 位三态

缓冲器

A0~

A158000H

8001H

D0~

D7

D0

输入设备

-IOR-STB

RQD

- 25- 目录 上页 下页 结束

查询输入接口

mov dx,8000h ;DX 指向状态端口

status: in al,dx ; 读状态端口

test al,01h ;测试标志位 D0

jz status ;D0= 0 ,未就绪,继续查询

inc dx ;D0= 1 ,就绪, DX 指向数据

端口

in al,dx ;从数据端口输入数据

- 26- 目录 上页 下页 结束

查询输出接口

8D锁存器

译码

1 位三态

缓冲器

R

Q

A0~ A15

8000H

8001H

D0~ D7

D7

D+5V

-ACK

-IOW

-IOR

输出设备

- 27- 目录 上页 下页 结束

查询输出接口

mov dx,8000h ;DX 指向状态端口

status: in al,dx ; 读取状态端口的状态数据

test al,80h ;测试标志位 D7

jnz status ;D7= 1 ,未就绪,继续查询

inc dx ;D7= 0 ,就绪, DX 指向数据

端口

mov al,buf ; 变量 buf 送 AL

out dx,al ;将数据输出给数据端口

- 28- 目录 上页 下页 结束

6.3 中断传送方式

程序断点

主程序

中断请求 为外设

继续执行

返回断点

传送流程

CPU 在执行程序中,被内部或外部的事件所打断,转去执行一段预先安排好的中断服务程序;

服务结束后,又返回原来的断点,继续执行原来的程序

提供服务

中断服务程序入口

6.3.1 中断的基本概念1. 中断的概念

- 29- 目录 上页 下页 结束

2. 中断控制方式

中断传送是一种效率更高的程序传送方式

进行传送的中断服务程序是预先设计好的

中断请求是外设随机向 CPU 提出的

CPU 对请求的检测是有规律的:一般是在每条指令的最后一个时钟周期采样中断请求输入引脚

本书主要论述中断在输入和输出方面的应用

中断还有着非常广泛的应用

- 30- 目录 上页 下页 结束

3. 中断源 能够引发中断的事件被称为中断源。通常,中断源有两类:内部中断源和外部中断源。

由处理机内部产生的中断事件称为内部中断源。常见的内部中断源有计算溢出、指令的单步运行、执行特定的中断指令等。

由处理机之外的外围设备产生的中断事件称为外部中断源。常见的外部中断源有外设的输入 /输出请求、定时时间到、电源掉电、设备故障等。

- 31- 目录 上页 下页 结束

三态缓冲器

中断传送与接口(续)

D0~ D7

+5V

8D锁存器

8 位三态

缓冲器

RQ

译码

8001H

中断向量号

D0~ D7

INTR

D

输入设备

中断允许触发器

A0~ A15

中断请求触发器

-IOR

-INTA

-STB

- 32- 目录 上页 下页 结束

4. 中断处理过程

中断请求(外设)

中断响应( CPU )

关中断( CPU )

断点保护( CPU )

中断识别(硬件 / 软件)

现场保护(用户)

中断服务(用户)

恢复现场(用户)

开中断( CPU/ 用户)

中断返回(用户)

中断服务是进行数据交换的实质性环节

- 33- 目录 上页 下页 结束

5. 中断系统的功能

① 能进入中断和退出中断,即完成上述中断响应和中断返回的过程 .

② 能对某些中断进行屏蔽,并在必要时开放 .

③ 能进行优先权排队 .④ 提供中断嵌套能力 .

- 34- 目录 上页 下页 结束

6.3.2 8086 中断系统

8086 的中断系统采用向量中断机制

一共可处理 256 个中断

采用中断向量编号 0~ 255 ,对 256 个中断加以区别

可屏蔽中断需借助专用的中断控制器 Intel 8259A 对系统中的可屏蔽中断资源进行管理:扩充系统的可屏蔽中断资源,并管理它们:

实现中断优先权比较

实现中断源的识别

- 35- 目录 上页 下页 结束

1. 8086 中断类型

硬件中断 软件中断

⑴ 硬件中断

硬件中断,又称外部中断,它是由处理器外部的硬件、外围设备的请求而引起的中断。 8086 有两条硬件中断请求信号线: NMI (非屏蔽中断)和 INTR (可屏蔽中断)。

- 36- 目录 上页 下页 结束

8088 的中断类型

中断逻辑

INTO指令

单步

中断

除法

错误

INT N指令

CPU

NMI

8259A中断

控制器

IR0

IR1

IR2

IR3

IR4

IR5

IR6

IR7

外设中断源

-INTA

可屏蔽中断申请

INTR

不可屏蔽中断申请

可屏蔽中断源

不可屏蔽中断源

内部中断

- 37- 目录 上页 下页 结束

⑵ 软件中断 ( 内部中断 ) 内部中断——内部机制产生除法错中断( 0 号)——除运算结果溢出时产生

指令中断( n 号)——执行 int n 指令后产生(操作码CDH )

断点中断( 3 号)——执行 int 3 指令(单字节指令操作码CCH )用于在调试中设置断点,程序遇断点则中断

溢出中断( 4 号)——执行 into 指令,且前面运算有溢出( OF=1 )时产生

单步中断( 1 号)—— TF标志置 1 后,每执行一条子指令将发生一次

外部中断——外部引脚触发非屏蔽中断(外设提供向量号)——触发 INTR引脚产生可屏蔽中断( 2 号)—— 触发 NMI引脚产生

- 38- 目录 上页 下页 结束

⑶ 中断优先权

8086规定中断优先权从高到低的顺序为:

① 除法错、溢出中断指令 INTO 、中断指令 INT n 。

② 非屏蔽中断 NMI。 ③ 可屏蔽中断 INTR。 ④ 单步中断。

- 39- 目录 上页 下页 结束

2. 8088 的中断向量表 中断向量:指示中断服务程序的入口地址,该地址包括:偏移地址 IP 、段地址 CS (共 32 位)

每个中断向量的低字是偏移地址、高字是段地址,需占用 4 个字节(低对低,高对高)。

8088 微处理器从物理地址 000H 开始到3FFH ( 1KB ),依次安排各个中断向量,向量号从 0到 255。

256 个中断响亮所占用的 1KB区域,称中断向量表

• 几个概念:向量号 N/ 中断向量 / 中断服务程序的入口地址

• 中断向量的存放首址= N×4

4B

4B

中断向量表

1KB

3FFH

0H

0 号中断向量

IP

CS

- 40- 目录 上页 下页 结束

内部中断是由于 8086 内部执行程序出现特殊情况而引起的中断除法错中断: 向量号为 0

指令中断( int n ): 向量号为 n

断点中断( int 3 ): 向量号为 3

溢出中断( into ) : 向量号为 4

单步中断: 向量号为 1

内部中断的中断向量号已由 Intel公司确定

- 41- 目录 上页 下页 结束

外部中断是由于 8086 外部通过 CPU引脚提出中断请求而引起的中断非屏蔽中断( NMI ): 向量号为 2

外部通过非屏蔽中断 NMI 请求,必须响应

非屏蔽中断主要用于处理系统的意外或故障(如奇偶校验或协处理器运算错误等)

可屏蔽中断( INTR ): 向量号由中断控制器提供外部通过可屏蔽中断 INTR 请求,由标志位 IF 控制是否响应;响应时将产生有效的 – INTA 信号

可屏蔽中断主要用于外设中断请求(请求交换数据等服务)

标志位 IF 控制可屏蔽中断的响应

- 42- 目录 上页 下页 结束

中断标志 IF 的状态 IF= 0 :可屏蔽中断不会被响应(禁止中断,关中

断,中断屏蔽)系统复位,使 IF= 0

任何一个中断被响应,使 IF= 0

执行指令 CLI ,使 IF= 0

IF= 1 :可屏蔽中断会被响应(允许中断,开中断,中断开放)执行指令 STI ,使 IF= 1

执行指令 IRET 后 IF 将恢复为中断前的状态

明确 IF 标志的状态是关键

- 43- 目录 上页 下页 结束

3. 8086 中断处理过程

⑴ 可屏蔽中断的中断过程

中断源通过中断控制器 8259 向 CPU发出中断请求信号

CPU 在每一个指令周期的最后一个时钟周期采样INTR 信号线

当 CPU响应可屏蔽级的中断请求时,首先通过信号线向 8259 连续发出两个负脉冲的中断响应信号。

CPU暂停执行当前程序,而转去执行相应的中断处理程序

CPU 执行中断服务程序

返回断点,继续执行被打断的程序

- 44- 目录 上页 下页 结束

⑵ 非屏蔽中断和软件中断的执行过程

查询中断的先后顺序决定了各中断源的优先级别

软件中断除法错中断

指令中断

溢出中断

非屏蔽中断

可屏蔽中断

单步中断

- 45- 目录 上页 下页 结束

8086 的中断响应过程

NMI

N

软件中断

INTR

TF=1

中断响应周期读中断向量号

下条指令

现行指令

IF= 1

N

NN

N

Y

Y

Y

Y

Y

执行中断服务

- 46- 目录 上页 下页 结束

8086 的中断响应过程(续)

Y还有 NMI

TEMP= 1

标志寄存器入栈

TEMP= TF , IF= TF= 0

CS : IP 入栈

获取中断向量

执行服务程序

弹出 CS : IP

弹出标志寄存器

返回被中断程序

( 1 )

( 2 )

( 3 )

( 4 )

( 5 )

N

NY

( 6 )

单步中断

- 47- 目录 上页 下页 结束

8086 的中断响应过程(续)

8088各种中断源的优先权,实际上是指被识别的先后顺序

多种中断同时请求时,最先响应的则可能是单步中断或 NMI 中断

- 48- 目录 上页 下页 结束

6.3.3 8259 中断控制器 Intel 8259A 是可编程中断控制器 PIC 可配合 CPU ( I8080/85 、 I8086/88/286/386等)管理可屏蔽中断

8259A 的基本功能1 片 8259A 可以管理 8级中断,经级联最多可扩展至

64级

每一级中断都可单独被屏蔽或允许

在中断响应周期,可提供相应的调用指令(配合I8080/85 )或中断向量号(配合 I8086/88/286/386 )

8259A 设计有多种工作方式,通过初始化编程进行设置

- 49- 目录 上页 下页 结束

1. 8259A 的内部结构和引脚

D7~D0

-INTAINT

中断请求寄存器

中断屏蔽寄存器

数据总线

缓冲器IR0

IR7

读 /写控制逻辑

级联缓冲器比较器

-RD-WR

A0

-CS

CAS0CSA1CAS2

-SP/-EN

优先权判别电路

中断服务寄存器

控制逻辑

- 50- 目录 上页 下页 结束

⑴ 8259 的内部结构

中断请求寄存器 IRR保存 8 条外界中断请求信号 IR0~ IR7 的请求状态

Di 位为 1表示 IRi引脚有中断请求;为 0表示无请求

中断服务寄存器 ISR保存正在被 8259A服务着的中断状态

Di 位为 1表示 IRi 中断正在服务中;为 0表示没有被服务

中断屏蔽寄存器 IMR保存对中断请求信号 IR 的屏蔽状态

Di 位为 1表示 IRi 中断被屏蔽(禁止);为 0表示允许

- 51- 目录 上页 下页 结束

优先权判别器 PR 优先权判别器( PR )用来识别各中断请求的优先

级别 读 /写控制电路

读 /写控制电路接收来自 CPU 的读 /写控制命

令和片选控制信息 数据总线缓冲器

这是一个 8 位的双向三态缓冲器,使 8259 和CPU 数据总线 D7~ D0 直接挂接,完成命令和状态信息

的传送。

- 52- 目录 上页 下页 结束

控制电路 它是 8259 内部的控制器,根据 CPU 对

8259 编程设定的工作方式产生内部控制信号,向CPU发出中断请求信号 INT ,请求 CPU响应,同时产生与当前中断请求服务有关的控制信号,并在接收到来自 CPU 的中断响应信号后,将中断类型号送到数据总线。

级联缓冲 /比较器 该功能部件用来实现多个 8259 的级联连

接及数据缓冲方式。

- 53- 目录 上页 下页 结束

CAS0 IR0CAS1 IR1CAS2 IR2 IR3-INTA IR4 IR5INT IR6 IR7-SP/-EN

CAS0-INTA CAS1

CAS2INT IR0

IR1

-SP/-EN IR7CAS0 IR0CAS1 IR1CAS2 IR2 IR3-INTA IR4 IR5INT IR6 IR7-SP/-EN

-INTA

INTR

+5V

8259级联工作示意图

8259A 的级连

输出得到响应的从片编号

- 54- 目录 上页 下页 结束

中断级连

8259A 可以级连, 1 个主片最多可以级连 8 个从片

级连时,主片的级连线 CAS0~ CAS2 连至每个从片的 CAS0~ CAS2 ,输出被选中的从片编号,

每个从片的中断请求信号 INT ,连至主 8259A的一个中断请求输入端 IRx;主片的 INT 线连至 CPU 的中断请求输入端 INTR

在非缓冲方式下,引脚 -SP/-EN ,通过接地指定该片充当从片( -SP= 0 );反之若接高电平则该片充当主片( -SP= 1 )。

- 55- 目录 上页 下页 结束

⑵ 8259 的引脚功能

8259 芯片有28 条引脚,双列直插式封装,如图6.10所示。

图 6.10 8259 芯片引脚定义

- 56- 目录 上页 下页 结束

2. 8259A 的中断过程

CAS0~CAS2

D0~ D7

-SP/-EN

IR0~ IR7

CPU响应周期

8259A 工作波形

INT

第 1 个总线周期

T1 T2 T3 T4

ALE

CLK

第 2 个总线周期

T1 T2 T3 T4

第 1 个 -INTA前保持高电平

-INTA

-LOCK

中断向量

主片输出级联信号从片接收

- 57- 目录 上页 下页 结束

3. 8259A 的工作方式

普通全嵌套方式特殊全嵌套方式

自动循环方式特殊循环方式

优先权固定方式

优先权循环方式 设置优先权方式

普通中断结束方式特殊中断结束方式

自动中断结束方式

非自动中断结束方式

结束中断方式

中断屏蔽方式普通屏蔽方式

特殊屏蔽方式

中断触发方式 边沿触发方式电平触发方式

数据线连接方式缓冲方式

非缓冲方式

与 CPU 配合方式与 8080/8085 CPU 配合与 8086/8088 CPU 配合

级连方式级连不级连

- 58- 目录 上页 下页 结束

( 1 )中断结束处理方式

什么是 8259A 的中断结束?

8259A 利用中断服务寄存器 ISR判断:

某位为 1 ,表示正在进行中断服务;

该位为 0 ,就是该中断结束服务。

这里说明如何使 ISR某位为 0 ,不反映 CPU 的工作状态。

- 59- 目录 上页 下页 结束

( 1 )中断结束处理方式(续)

自动中断结束方式普通中断结束方式

配合全嵌套优先权方式使用 当 CPU 用输出指令往 8259A发出普通中断结束 EOI命令时, 8259A就会把所有正在服务的中断中优先权最高的 ISR 位复位。

特殊中断结束方式 配合循环优先权方式使用 CPU 在程序中向 8259A发送一条特殊中断结束命令,这个命令中指出了要清除哪个 ISR位。

- 60- 目录 上页 下页 结束

( 2 ) 缓冲方式

缓冲方式8259A 的数据线需加缓冲器予以驱动

8259A把 SP*/EN*引脚作为输出端,输出允许信号,用以锁存或开启缓冲器

非缓冲方式SP*/EN*引脚为输入端

若 8259A级连,由其确定是主片或从片

- 61- 目录 上页 下页 结束

( 3 )嵌套方式

普通全嵌套方式8259A 的中断优先权顺序固定不变,从高到低依次为

IR0 、 IR1 、 IR2 、…… IR7

中断请求后, 8259A 对当前请求中断中优先权最高的中断 IRi予以响应,将其向量号送上数据总线,对应 ISR 的 Di 位置位,至到中断结束( ISR 的 Di位复位)

在 ISR 的 Di 位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套

特殊全嵌套方式

优先权自动循环方式

优先权特殊循环方式

- 62- 目录 上页 下页 结束

( 4 ) 中断屏蔽方式

普通屏蔽方式将 IMR 的 Di 位置 1 ,则对应的中断 IRi 被屏蔽,该中断请求不能从 8259A 送到 CPU

如果 IMR 的 Di 位置 0 ,则允许 IRi 中断产生

特殊屏蔽方式将 IMR 的 Di 位置 1 ,对应的中断 IRi 被屏蔽的同时,使 ISR 的 Di 位置 0

- 63- 目录 上页 下页 结束

⑸ 优先级的控制 ① 固定优先级 所谓固定优先级,即是指 8259 的 8 个中断源中, IR0 优先级

最高, IR1 优先级次之,依次降低,直到 IR7 优先级最低,这个顺序固定不变。

② 循环优先级 8259将中断源 IR0~ IR7 按下标序号顺序构成一个环,有两种规定

方式:● 自动优先循环级。 该方式规定:刚被服务过的中断源,其优先级别被改为最低级,而将最高优先级赋给原来比它低一级的中断源,其它中断源的优先顺序依中断源顺序环确定。例如: CPU 对 IR3 的中断服务刚结束时, IR3 的优先级别变为最低,这时 8259 的 8 个中断源优先顺序由高到低为 IR4 , IR5 , IR6 , IR7 , IR0 , IR1 , IR2 , IR3。

● 指定优先循环级。 该方式规定:在 OCW2 中指定的中断源,其优先级别被设

为最低级,其它中断源的优先顺序依中断源顺序环确定。例如: CPU在对 IR3 的中断服务过程中,通过指令在 OCW2 中指定 IR5具有最低优先级,则 IR3 中断服务结束时, 2859A 的 8 个中断源优先顺序由高到低为 IR6 , IR7 , IR0 , IR1 , IR2 , IR3 , IR4 , IR5。

- 64- 目录 上页 下页 结束

优先权方式 普通全嵌套方式

8259A 的中断优先权顺序固定不变,从高到低依次为 :IR0 、 IR1 、 IR2 、…… IR7

中断请求后, 8259A 对当前请求中断中优先权最高的中断 IRi 予以响应,将其向量号送上数据总线,对应 ISR 的 Di 位置位,至到中断结束( ISR 的 Di 位复位)

在 ISR 的 Di 位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套

特殊全嵌套方式——允许同级中断嵌套(用于级连主片) 优先权自动循环方式——最高优先权自动转移到相邻的低优先级中断源

优先权特殊循环方式——最高优先权转移到由指令指定的中断源

- 65- 目录 上页 下页 结束

( 6 ) 中断触发方式

边沿触发方式8259A将中断请求输入端出现的上升沿作为中断请求信号

电平触发方式中断请求端出现的高电平是有效的中断请求信号

- 66- 目录 上页 下页 结束

( 7 ) 中断级连

一个系统中, 8259A 可以级连,有一个主8259A ,若干个(最多 8 个)从 8259A

级连时,主 8259A 的三条级连线 CAS0~CAS2 作为输出线,连至每个从 8259A 的CAS0~ CAS2

每个从 8259A 的中断请求信号 INT ,连至主8259A 的一个中断请求输入端 IR

主 8259A 的 INT 线连至 CPU 的中断请求输入端

SP*/EN* 在非缓冲方式下,规定该 8259A 是主片( SP*= 1 )还是从片( SP*= 0 )

- 67- 目录 上页 下页 结束

级连方式

不级连——只用 1 片,如 PC/XT级连——使用 2~9 片,如 PC/AT ( 2片)

-INTA

INTR

IR0

IR7

IR7

IR0

CAS0~CAS2=010

INT

INT

D0~D7

- 68- 目录 上页 下页 结束

4. 8259A 的编程

初始化编程 8259A 开始工作前,

用户必须对 8259A 进行初始化编程。通过写入初始化命令字 ICW 对 8259A 进行初始化。

工作方式编程在 8259A 工作期间

可以随时向 8259A写入操作命令字OCW ,使之按用户设置的新的工作方式进行工作,用户还可以通过写操作命令字 OCW 通知8259A ,下面的操作要读取 8259A 中的状态信息,以便了解其工作情况。

- 69- 目录 上页 下页 结束

⑴ 8259 的初始化编程

8259初始化编程的主要任务有:① 复位 8259 芯片。② 设定中断请求信号 INT 有效的形式,是高电平有效,还是上升沿有效。

③ 设定 8259 工作在单片方式还是多片级联方式。

④ 设定 8259 管理的中断类型号的基值,即 0级 IR0所对应的中断类型号。

⑤ 设定各中断级的优先次序, IR0 最高, IR7最低。

⑥ 设定一次中断处理结束时的结束方式。

- 70- 目录 上页 下页 结束

( 1 )初始化命令字 ICW

初始化命令字 ICW 最多有 4 个

8259A 在开始工作前必须写入

必须按照 ICW1~ ICW4顺序写入

ICW1 和 ICW2 是必须送的

ICW3 和 ICW4 由工作方式决定

流程

D7 D6 D5 D4 D3 D2 D1 D0

- 71- 目录 上页 下页 结束

ICW1

IC4SNGL×LTIM1×××

D0D1D2D3D4D5D6D7

×——表示可以任意

为 1 为 0 都可以(建议为0 )

1——只能为 1 ,作为标志中断触发方式:

LTIM= 1 ,电平触发方式

LTIM= 0 ,边沿触发方式

规定单片或级连方式:

SNGL= 1 ,单片方式

SNGL= 0 ,级连方式

是否写入 ICW4

IC4= 1 ,要写入 ICW4

IC4= 0 ,不写入 ICW4 ,即 ICW4规定的位全为 0

- 72- 目录 上页 下页 结束

ICW2

×××T3T4T5T6T7

D0D1D2D3D4D5D6D7

设置中断向量号T7~ T3 为中断向量号的高 5位

低 3 位由 8259A自动确定:

IR0 为 000 、 IR1 为 001 、……、 IR7 为 111

- 73- 目录 上页 下页 结束

ICW3

S0/

ID0

S1/

ID1

S2/

ID2

S3S4S5S6S7

D0D1D2D3D4D5D6D7

级连命令字

主片 8259A : Si= 1 对应 IRi 接有从片;否则 IRi 没有连接从片

从片 8259A : ID0~ ID2 编码说明从片 INT引脚接到主片哪个 IR引脚

- 74- 目录 上页 下页 结束

ICW4

μPMAEOIM/SBUFSFNM000

D0D1D2D3D4D5D6D7

嵌套方式:特殊全嵌套方式( SFNM=1 )

普通全嵌套方式( SFNM=0 )

数据线的缓冲方式:

缓冲方式( BUF= 1 )

非缓冲方式( BUF= 0 )

主片 /从片选择:

主片( M/S=1 )

从片( M/S=0 )

中断结束方式:自动中断结束( AEOI= 1 )

非自动中断结束( AEOI=0 )

微处理器类型:

16 位 80x86 (( PM=1 )

8 位 8080/8085 (( PM=0 )

- 75- 目录 上页 下页 结束

8259 芯片的初始化流程

ICW4 ( A0=1 )

SNGL=0?

ICW1 的 IC4=1 ?

初始化完,准备接受中断请求输入

ICW1 ( A0=0, D4=1 )

ICW2 ( A0=0)

ICW3 ( A0=0)

- 76- 目录 上页 下页 结束

初始化主片 8259Amov al,11h ;写入 ICW1

out 20h,aljmp intr1

intr1: mov al,08h ;写入 ICW2out 21h,aljmp intr2

intr2: mov al,04h ;写入 ICW3out 21h,aljmp intr3

intr3: mov al,1h ;写入 ICW4out 21h,al

中断控制器的初始化程序段

- 77- 目录 上页 下页 结束

初始化从片 8259Amov al,11h ;写入 ICW1out 0a0h,aljmp intr5

intr5: mov al,70h ;写入 ICW2out 0a1h,aljmp intr6

intr6: mov al,02h ;写入 ICW3out 0a1h,aljmp intr7

intr7: mov al, 01h ;写入 ICW4out 0a1h,al

中断控制器的初始化程序段

- 78- 目录 上页 下页 结束

⑵ 工作方式编程

8259 工作方式编程主要完成的任务是对中断请求的屏蔽、优先级循环控制、中断结束方式、内部控制寄存器的查询等。

8259A 工作期间,可以随时接受操作命令字OCW

OCW 共有 3 个: OCW1~ OCW3写入时没有顺序要求,需要哪个 OCW就写入那个 OCW

D7 D6 D5 D4 D3 D2 D1 D0

- 79- 目录 上页 下页 结束

OCW1

M0M1M2M3M4M5M6M7

D0D1D2D3D4D5D6D7

屏蔽命令字

内容写入中断屏蔽寄存器 IMR

Di= Mi 对应 IRi ,为 1禁止IRi 中断;

为 0允许 IRi 中断。各位互相独立。

- 80- 目录 上页 下页 结束

OCW2

L0L1L200EOISLR

D0D1D2D3D4D5D6D7

R 、 SL 和 EOI 配合使用

产生中断结束 EOI命令和改变优先权顺序

L2~ L0 的 3 位编码

指定 IR引脚

- 81- 目录 上页 下页 结束

OCW3

RISRRP10SMMESMM0

D0D1D2D3D4D5D6D7

ESMM 、 SMM

设置中断屏蔽方式

P 、 RR 和 RIS

规定随后读取的状态字含义

- 82- 目录 上页 下页 结束

读取状态字

CPU 可读出 IRR 、 ISR 、 IMR 和查询字

A0 为低,由 OCW3 中 RR 和 RIS 位设定读取 IRR或 ISR ,由 OCW3 中 P位设定读取查询字

而 A0引脚为高电平时读取的都是IMR

查询字反映 8259A 是否有中断请求

- 83- 目录 上页 下页 结束

查询字

W0W1W2----I

D0D1D2D3D4D5D6D7

中断位 I 位为1 ,

有外设请求中断

W2~ W0 的编码

当前中断请求的最高优先级

- 84- 目录 上页 下页 结束

补充: 命令字和状态字的区别方法

⑴ 利用读写信号区别写入的控制寄存器和读出的状态寄存器

⑵ 利用地址信号区别不同 I/O 地址的寄存器

⑶ 由控制字中的标志位说明是哪个寄存器

⑷ 由芯片内顺序控制逻辑按一定顺序识别不同的寄存器

⑸ 由前面的控制字决定后续操作的寄存器

接口电路中常用的方法

- 85- 目录 上页 下页 结束

( 1 )与 CPU 的配合方式 与 8080/8085 CPU 配合—— 中断响应时, -INTA 信号 3次有效, 8259A 送 CALL XXXXH 指令( 3 个字节)的机器代码到数据总线 ;

与 8086/8088 CPU 配合——中断响应时, -INTA 信号 2次有效, 8259A 送相应的中断向量号( 1 个字节)到数据总线。

8080/85

CPU8259A

8086/88

CPU8259A

CALL XXXXH 中断向量号

-INTA

INTR

-INTA

INTR

5. 80X86 微机的中断控制器

- 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 A0 -RD -WR

- 87- 目录 上页 下页 结束

6.4.3 中断识别和中断优先权处理

问题 1 :系统有多个中断请求,

CPU 如何识别中断源?

办法 1 : 向量中断(硬件)

办法 2 : 中断查询(软 / 硬件结合)

中断源的识别

- 88- 目录 上页 下页 结束

中断查询接口

A0~ A15

锁存器

INTR

三态缓冲器

译码

8001H

D0~ D7

中断 A中断 B中断 C

中断 H

… …

-IOR

- 89- 目录 上页 下页 结束

6.4.3 中断优先权(续 1 )

问题 2 :有多个中断同时请求,

CPU 如何应对?

办法 1 :链式优先权排队电路

办法 2 :优先权编码电路

中断优先级排队

- 90- 目录 上页 下页 结束

链式中断优先权排队电路

A2

A1

C2

C1

D2

D1B2

B1

中断源 A

触发器

中断源 B

触发器

中断源 C

触发器

中断矢量 D中断矢量 C中断矢量 B中断矢量 A

中断源 D

触发器

缓冲器缓冲器缓冲器缓冲器

-INTA

高优先级

- 91- 目录 上页 下页 结束

中断优先权编码电路

比较器失效信号(先前无中断请求时有效

比较器 8:3优先权编码器

优先权寄存器

D0~ D7

2

1 A< B

中断请求 0中断请求 1中断请求 2

A0A1A2INTR

B0B1B2

有中断请求

- 92- 目录 上页 下页 结束

6.4.3 中断优先权(续 2 )

问题 3 :中断处理过程中,

又有中断提出请求,怎么办?

办法 1 :链式优先权排队电路

办法 2 :优先权编码电路

中断嵌套

- 93- 目录 上页 下页 结束

I/O 接口的典型结构

1. 接口电路的内部结构

2. 接口电路的外部特性

3. 接口芯片的分类

4. 接口芯片的可编程性

- 94- 目录 上页 下页 结束

1. 接口电路的内部结构 CPU 与外设主要有数据、状态和控制信息需要相互交换,于是从应用角度看内部:

⑴ 数据寄存器保存外设给 CPU 和 CPU发往外设的数据

⑵ 状态寄存器保存外设或接口电路的状态

⑶ 控制寄存器保存 CPU给外设或接口电路的命令

理解端口

- 95- 目录 上页 下页 结束

2. 接口电路的外部特性面向 CPU 一侧的信号:

用于与 CPU 连接

主要是数据、地址和控制信号

面向外设一侧的信号:用于与外设连接

提供的信号五花八门

功能定义、时序及有效电平等差异较大

- 96- 目录 上页 下页 结束

3. 接口芯片的分类接口电路核心部分往往是一块或数块大规模集成电路芯片(接口芯片):

通用接口芯片支持通用的数据输入输出和控制的接口芯片

面向外设的专用接口芯片针对某种外设设计、与该种外设接口

面向微机系统的专用接口芯片与 CPU 和系统配套使用,以增强其总体功能

- 97- 目录 上页 下页 结束

4. 接口电路的可编程性

许多接口电路具有多种功能和工作方式,可以通过编程的方法选定其中一种

接口需要进行物理连接,还需要编写接口软件

接口软件有两类:初始化程序段——设定芯片工作方式等

数据交换程序段——管理、控制、驱动外设,负责外设和系统间信息交换

- 98- 目录 上页 下页 结束

IBM PC/AT主机板的 I/O 译码电路

接口芯片内部译码A0~ A4

DMA 控制器 1中断控制器 1定时计数器

并行接口电路

DMA页面寄存器

中断控制器 2DMA 控制器 2协处理器

A5

A6

A7

A8

A9

ALS138 译码器

HLDAMASTER

ABC

E1

-E2

-E3

Y0Y1Y2Y3Y4Y5Y6Y7

- 99- 目录 上页 下页 结束

IBM PC/XT主机板的 I/O 译码电路

Y0

Y1

Y2

Y3

Y4

Y5

Y6

Y7

A5

A6

A7

A8

A9

AEN

-IOW

AB

C

-G2B

-G2A

G1

74LS13874LS138

-DMA CS ( 8237 )

-INTR CS ( 8259 )

-T/C CS ( 8253 )

-PPI CS ( 8255 )

-WRTDMAPG(写 DMA页面寄存器)

-WRTNMIREG(写 NMI屏蔽寄存器)

- 100- 目录 上页 下页 结束

用门电路实现 I/O 地址译码A9

A8

A7

A6

A5

A2

A4

A3

AENA1

A0

74LS03

I/O 地址 3E7H

- 101- 目录 上页 下页 结束

6.4 DMA 传送方式

希望克服程序控制传送的不足:

外设→ CPU→ 存储器

外设← CPU← 存储器 直接存储器存取 DMA :不经 CPU ,不用指令

外设→存储器( DMA写)

外设←存储器( DMA 读)

扩展:外设↔ 外设 CPU 出让系统总线(输出高阻),由 DMA 控制器( DMAC )接管系统总线

- 102- 目录 上页 下页 结束

6.4.1 DMA 传送的工作过程

⑴ CPU 对 DMA 控制器进行初始化设置

⑵ 外设、 DMAC 、 CPU , 3 者通过应答信号建立联系: CPU将总线暂交 DMAC 控制,事后再将控制权返还。

⑶ DMA 传送DMA 读:存储器 → 外设

DMA写:存储器 ← 外设

⑷ DMAC 的功能:对存储器寻址地址动加 1/减 1计数器减 1判断传送是否完成

传送流程

- 103- 目录 上页 下页 结束

DMA 传送( 以 DMA 写为例)

-MEMW-IOR

数据总线

地址总线

输入设备

存储器

DMAC

CPU

③④

①HOLD

HLDA

- 104- 目录 上页 下页 结束

DMA 传送流程

HLDA

发存储器地址

传送数据

传送结束?

DMA 结束

修改地址指针

- 105- 目录 上页 下页 结束

传送方式的比较

无条件传送:慢速外设需与 CPU保持同步

查询传送: 简单实用,效率较低

中断传送:外设主动,可与 CPU并行工作,但每次传送需要大量额外时间开销

DMA 传送: DMAC 控制,外设直接和存储器进行数据传送,适合大量、快速数据传送

- 106- 目录 上页 下页 结束

6.4.2 DMA 控制器 8237每个 8237A 芯片有 4 个 DMA 通道,就是有 4 个 DMA 控制器

每个 DMA 通道具有不同的优先权

每个 DMA 通道可以分别允许和禁止

每个 DMA 通道有 4 种工作方式

一次传送的最大长度可达 64KB多个 8237A 芯片可以级连,扩展通道数

- 107- 目录 上页 下页 结束

1. DMA 控制器的功能 ① 编程设定 DMA 的传输模式及其所访问内存的地址区域。

② 屏蔽或接受外围设备的 DMA 请求( DREQ ),当有多个设备同时请求时,还要进行优先级排队,首先接受最高级的请求。

③ 向 CPU转达 DMA 请求, DMA 控制器要向 CPU发出总线请求信号 HOLD(高电平有效 ) ,请求 CPU放弃总线的控制。

④ 接收 CPU 的总线响应信号 (HLDA) ,接管总线控制权,实现对总线的控制。

⑤ 向相应外围设备转达 DMA允许信号 DACK。于是在 DMA 控制器的管理下,实现外围设备和存储器之间的数据直接传送。

⑥ 在传送过程中进行地址修改和字节计数。在传送完要求的字节数后,向 CPU发出 DMA 结束信号 (EOP) ,撤消总线请求 (HRQ) ,将总线控制权交还给 CPU。

- 108- 目录 上页 下页 结束

2. 可编程 DMA 控制器 Intel8237DMAC的主要性能和内部结构

内部结构和外部引脚都相对比较复杂

应用观点,内部主要由两类寄存器组成通道寄存器

控制和状态寄存器

首先分类展开外部引脚

- 109- 目录 上页 下页 结束

3. 8237 的外部引脚

- 110- 目录 上页 下页 结束

(1) 请求与响应信号

DREQ0~ DREQ3 : DMA 通道请求。当外设需要请求 DMA服务时,将 DREQ 信号置成有效电平,并要保持到产生响应信号。

HRQ :总线请求。 8237A 输出有效的 HRQ高电平,向 CPU 申请使用系统总线。

HLDA :总线响应。 8237A 接受来自 CPU的响应信号 HLDA ,取得了总线的控制权。

DACK0~ DACK3 : DMA 通道响应。 8237A 使请求服务的通道产生相应的DMA响应信号。

3. 8237 的外部引脚

- 111- 目录 上页 下页 结束

(2) DMA 传送控制信号

A0~ A7 :地址线。输出低 8 位存储器地址。

DB0~ DB7 :数据线。输出高 8 位存储器地址;存贮器与存贮器的传送期间,用于数据传送。

ADSTB :地址选通。 DMA 传送开始时,输出高有效,把在 DB0~ DB7上输出的高 8 位地址锁存在外部锁存器中。

AEN :地址允许。输出高有效,将锁存的高 8位地址送入系统总线,与芯片此时输出的低 8位地址组成 16 位存储器地址。

- 112- 目录 上页 下页 结束

(2) DMA 传送控制信号(续)

MEMR* :存储器读。有效将数据从存储器读出

MEMW* :存储器写。有效将数据写入存储器

IOR* : I/O 读。有效将数据从外设读出 IOW* : I/O。有效将数据写入外设 READY :准备好。 DMA 传送的 S3 下降沿检测到为低时,插入等待状态 Sw ,直到READY 为高才进入第 4 个时钟周期 S4。

EOP* :过程结束。 DMA 传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结 DMA 传送。

- 113- 目录 上页 下页 结束

(3) 处理器接口信号

DB0~ DB7 :数据线。用于 8237A 与微处理器进行数据交换。

A0~ A3 :地址线。用以选择芯片内部寄存器。

CS* :片选。低有效时,微处理器与 8237A通过数据线通信,主要完成对 8237A 的编程。

IOR* : I/O 读。读取 8237A 内部寄存器。 IOW* : I/O写。写入 8237A 内部寄存器。 CLK :时钟。控制芯片内部操作和数据传输。

RESET :复位。使 8237A 处于初始状态。

- 114- 目录 上页 下页 结束

4. 8237 DMAC 的工作方式

DMA 传送方式· 单字节传送方式 · 数据块传送方式

· 请求传送方式 · 级连方式

DMA 传送类型

· DMA 读 · DMA写 · DMA检验

存储器到存储器的传送

工作模式(传送方式)和操作类型。

- 115- 目录 上页 下页 结束

① . DMA 传送-单字节方式每次 DMA 传送时仅传送一个字节

传送一个字节之后,字节数寄存器减 1 ,地址寄存器加 1或减 1 , HRQ 变为无效

8237A释放系统总线,将控制权还给 CPU若传送后使字节数从 0减到 FFFFH ,则终结 DMA 传送或重新初始化

特点:一次传送一个字节,效率略低

DMA 传送之间 CPU 有机会重新获取总线控制权

⑴ 工作模式 : (每个通道有 4 种工作模式 )

- 116- 目录 上页 下页 结束

② 数据块传送方式

由 DREQ启动就连续地传送数据,直到字节数寄存器从 0减到 FFFFH终止计数,或由外部输入有效信号终结 DMA 传送

DREQ只需维持有效到 DACK 有效

特点:一次请求传送一个数据块,效率高

整个 DMA 传送期间 CPU长时间无法控制总线(无法响应其他 DMA 请求、无法处理中断等)

- 117- 目录 上页 下页 结束

③ 请求传送方式

DREQ 信号有效就连续传送数据 DREQ 信号无效, DMA 传送被暂时中止,

8237A释放总线, CPU 可继续操作 DMA 通道的地址和字节数的中间值仍被保持

DREQ 信号再次有效, DMA 传送就继续进行

如果字节数寄存器从 0减到 FFFFH ,或者由外部送来一个有效的信号,将终止计数

特点:DMA操作可由外设利用 DREQ 信号控制传送的过程

- 118- 目录 上页 下页 结束

④ 级联方式

用于通过多个 8237A级连以扩展通道第二级的 HRQ 和 HLDA 信号连到第一级某个通道的 DREQ 和 DACK上

第二级芯片的优先权等级与所连通道的优先权相对应

第一级只起优先权网络的作用,实际的操作由第二级芯片完成

还可由第二级扩展到第三级等

- 119- 目录 上页 下页 结束

⑵ 操作类型

DMA 读——把数据由存储器传送到外设由 MEMR* 有效从存储器读出数据,由 IOW* 有效把这一数据写入外设

DMA写——把外设输入的数据写入存储器由 IOR* 有效从外设输入数据,由 MEMW* 有效把这一数据写入存储器。

DMA检验——空操作8237A 不进行任何检验外设可以进行 DMA校验存储器和 I/O 控制线保持无效,不进行传送

存储器→存储器传送

- 120- 目录 上页 下页 结束

存储器→存储器传送

固定使用通道 0 和通道 1 通道 0 的地址寄存器存源区地址 通道 1 的地址寄存器存目的区地址,通道 1的字节数寄存器存传送的字节数

传送由设置通道 0 的软件请求启动每传送一字节需用 8 个时钟周期前 4 个时钟周期用通道 0 地址寄存器的地址从源区读数据送入 8237A 的临时寄存器

后 4 个时钟周期用通道 1 地址寄存器的地址把临时寄存器中的数据写入目的区

- 121- 目录 上页 下页 结束

5. 8237 的控制字和编程

8237A 共有 10 种内部寄存器,对它们的操作有时需要配合 3 个软件命令

8237A 的“软件命令”不需要通过数据总线写入控制字

直接由地址和控制信号译码实现

全部都用地址 A0~ A3区分

- 122- 目录 上页 下页 结束

(1) 当前地址寄存器

保持 DMA 传送的当前地址值

每次传送后该寄存器的值自动加 1或减 1 这个寄存器的值可由 CPU写入和读出

基地址寄存器存放初始值

㈠ 内部寄存器

- 123- 目录 上页 下页 结束

(2) 当前字节数寄存器

保持 DMA 传送的剩余字节数

每次传送后,该寄存器的值减 1 这个寄存器的值可由 CPU写入和读出

该寄存器的值减至 0 ,再减 1 (从 0减到FFFFH )时,终止计数

传送 N 个字节,初始值为 N - 1传送 N 个字节,初始值为 N - 1

基字节数寄存器存放初始值

- 124- 目录 上页 下页 结束

⑶ 基地址寄存器和基字节计数寄存器

每个通道均有一个 16 位的基地址寄存器和一个16 位的基字节计数寄存器。

它们用来存放所对应的地址寄存器和字节计数器的初始值。

在编程时,这两个寄存器由 CPU 以连续两字节方式与对应的当前寄存器同时写入,但它们的内容不能读出。

在自动预置方式时,基本寄存器的内容被用来恢复当前寄存器的初始值。

- 125- 目录 上页 下页 结束

(4) 命令寄存器

存放 8237A 的命令字 设置 8237A 芯片的操作方式影响每个 DMA 通道复位时使命令寄存器清零 设置 D2= 1才使 8237A 可以作为 DMA 控制器

请看命令字的格式

- 126- 目录 上页 下页 结束

命令字格式

D0D1D2D3D4D5D6D7

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- 目录 上页 下页 结束

(5) 方式寄存器

存放相应通道的方式控制字

选择某个 DMA 通道的工作方式

其中用最低 2 位选择哪个 DMA 通道

请看方式字的格式

- 128- 目录 上页 下页 结束

方式字格式

D1 D0D3 D2D4D5D7 D6

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

- 129- 目录 上页 下页 结束

(6) 请求寄存器

存放软件 DMA 请求状态除硬件 DMA 请求外,当工作在数据块传送方式时也可以通过软件发出DMA 请求

若是存贮器到存贮器传送,则必须由软件请求启动通道 0

请看请求字的格式

- 130- 目录 上页 下页 结束

请求字格式

D1 D0D2D7 D6 D5 D4 D3

任意0 复位

1 置位 00 通道0

01 通道1

10 通道2

11 通道3

- 131- 目录 上页 下页 结束

(7) 屏蔽寄存器 控制外设硬件 DMA 请求是否被响应(为 0允许),各个通道互相独立。 3 种方法:单通道屏蔽字只对一个 DMA 通道屏蔽位进行设置

主屏蔽字对 4 个 DMA 通道屏蔽位同时进行设置

清屏蔽寄存器命令使 4 个屏蔽位都清零(允许)

复位使 4 个通道全置于屏蔽状态

当一个通道的 DMA 过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次DMA 传送

请看屏蔽字的格式

- 132- 目录 上页 下页 结束

单通道屏蔽字格式

D1 D0D2D7 D6 D5 D4 D3

任意 0 清屏蔽位

1 置屏蔽位

00 通道0

01 通道1

10 通道2

11 通道3

- 133- 目录 上页 下页 结束

主屏蔽字格式

D0D1D2D3D7 D6 D5 D4

任意

Di= 0 清通道 I屏蔽位 Di= 1 置通道

I屏蔽位

- 134- 目录 上页 下页 结束

(8) 状态寄存器

可由 CPU 读取

低 4 位反映读命令这个瞬间每个通道是否产生 TC (为 1 ,表示该通道传送结束)

高 4 位反映每个通道的 DMA 请求情况(为 1 ,表示该通道有请求)

状态位在复位或被读出后,均被清零

- 135- 目录 上页 下页 结束

(9) 暂存寄存器

在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元

传送完成,临时寄存器只会保留最后一个字节,可由 CPU 读出

复位使临时寄存器内容为零

- 136- 目录 上页 下页 结束

补充 : 读写通道寄存器

CPU 与 8237A之间通过 8 位数据总线交换信息, 8237A 的通道寄存器均为16 位

需要两次读写操作才能实现 CPU 与8237A之间的一个完整数据的交换

8237A 内含一个高 /低触发器,用来控制读写通道寄存器的高、低字节

- 137- 目录 上页 下页 结束

补充 : 高 /低触发器

该触发器为 0 ,控制读写低字节

该触发器为 1 ,控制读写高字节

软、硬件复位后,触发器为 0每次读写通道寄存器,自动改变触发器状态。如果对 16 位寄存器的操作用两次连续读写进行,就不必清除这个触发器

清除高 /低触发器软件命令( A3A2A1A0= 1100 )将使高 /低触发器清零

- 138- 目录 上页 下页 结束

(10) 软件命令 清除高 /低触发器软件命令

A3A2A1A0= 1100 ,使高 /低触发器清零

主清除命令A3A2A1A0= 1101 ,使高 /低触发器清零

还使命令、状态、请求、临时寄存器清零

使屏蔽寄存器置为全 1 (禁止 DMA 请求)

主清除命令与硬件的 RESET 信号具有相同的功能

清屏蔽寄存器命令A3A2A1A0= 1110 ,使 4 个屏蔽位都清零(允许

DMA 请求)

- 139- 目录 上页 下页 结束

㈡ 内部寄存器的寻址 对 8237 内部寄存器的寻址和执行与控制器有关的软件命令,都由芯片选择信号, I/O 读、 I/O写和 A3~ A0 地址线的不同状态编码来完成。 = 0表示访问该 8237DMAC 芯片; A3= 0则表示访问某个地址寄存器或字节计数器; A3=1则表示访问控制寄存器和状态寄存器。

或正在发出一条软件命令。 在和 A3 都为 0 时, CPU 访问某个地址寄存器或字节计数器,并由 A2~ A1 编码状态给出通道号,而 A0=0表示访问当前地址寄存器, A0= 1表示访问当前字节计数器。而用为低电平或为低电平表示是读操作还是写操作。

对当前地址寄存器进行写入的同时,也写入基本地址寄存器;对当前字节计数器进行写入的同时,也写入基本字节计数器。

CS

- 140- 目录 上页 下页 结束

㈢ 8237 的编程步骤① 输出主清除命令;② 写入基与现行地址寄存器;③ 写入基与现行字节数址寄存器;④ 写入模式寄存器;⑤ 写入屏蔽寄存器;⑥ 写入命令寄存器;⑦ 写入请求寄存器;

若有软件请求,就写入到指定通道,就可以开始DMA 传送过程;若无软件请求,则在完成了① -⑦的编程后,由通道的 DREQ启动 DMA 传送过程。

例:若要利用通道 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- 目录 上页 下页 结束

DMA通道 0的刷新编程OUT 5DH , AL ;输出主清除命令MOV AL , 00HOUT 50H , AL ;输出基和现行地址的低 8 位MOV AL , 80HOUT 50H , AL ;输出基和现行地址的高 8 位MOV AL , 00HOUT 51H , ALMOV AL , 80HOUT 51H , AL ;给基和现行字节数赋值MOV AL , 84HOUT 5BH , AL ;输出模式字MOV AL , 00HOUT 5AH , AL ;输出屏蔽字MOV AL , 0AOHOUT 58H , AL ;输出命令字IBM PC/XT

- 143- 目录 上页 下页 结束

6. Intel 8237 的应用举例

㈠ 8088 访问 8237 的寻址 (自学 )㈡ 8237 的初始化编程

在进行 DMA 传输之前, CPU 要对8237 进行编程。 DMA 传输要涉及到 RAM 地址、数据块长、操作方式和传输类型,因此,在每次 DMA 传输之前,除自动预置外,都必须对 8237 进行一次初始化编程。若数据块超过 64KB界限时,还必须将页面地址写入页面寄存器。

㈢ 利用 8237 的 CHl实现 DMA 数据传送 (自学)

- 144- 目录 上页 下页 结束

6.5例题解析

第 6 章教学要求

1. 了解 8237A引脚特点和工作时序

2. 掌握 8237A 的各种工作方式

3. 理解 8237A 内部寄存器的作用和编程

4.了解 8237A 在 IBM PC 系列机上的应用情况