65
7.1 概概 7.2 CPU 概概概概概 概概概概 7.3 概概概概概概 / 概概概 8253 7.4 概概概概概概概概概 7.5 概概概概 7.6 DMA 概概概 8237 7.7 D/A A/D 概概概概 概概概 概概 / 概概概概

7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5 并行接口 7.6 DMA 控制器 8237

Embed Size (px)

DESCRIPTION

第七章 输入 / 输出接口. 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5 并行接口 7.6 DMA 控制器 8237 7.7 D/A 和 A/D 转换技术. 7.6 DMA 控制器 8237. 1. 概述 2. 8237 的引脚功能 3. 8237 的编程结构 4. 8237 对内存和 I/O 的寻址. 概述. DMA=Direct Memory Access ,直接存储器存取. 数据通道. 数据通道. DMAC. CPU. 数据通道. 内存. 外设. - PowerPoint PPT Presentation

Citation preview

Page 1: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

7.1 概述7.2 CPU 与外设数据传送的方式7.3 可编程计数器 / 定时器 8253

7.4 串行通讯和串行接口7.5 并行接口7.6 DMA 控制器 8237

7.7 D/A 和 A/D 转换技术

第七章 输入 / 输出接口

Page 2: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

7.6 DMA 控制器 8237

1. 概述2. 8237 的引脚功能3. 8237 的编程结构4. 8237 对内存和 I/O 的寻址

Page 3: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

概述

DMA=Direct Memory Access ,直接存储器存取

CPU

内存 外设

数据通道 数据通道

非 DMA 方式( 包括程序控制方式和中断方式 )

DMAC

内存 外设数据通道

DMA 方式

Page 4: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

概述

DMAC 具有独立的控制三大总线来访问存储器和 I/O端口的能力,它能像 CPU 一样提供数据传送所需的地址信息和读写控制信息

DMAC 和 CPU 都挂在系统总线上,当进入 DMA 方式时, DMAC 成为总线主控。

在总线上,可以控制其他部件的部件称为总线主控或主控 (bus master) ,被控部件称为从控 (slave) 。任意时刻,总线上只有一个主控。

Page 5: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

概述

DMA 操作之前,应先对 DMAC 编程,把要传送的数据块长度、数据块在存储器中的起始地址,数据传送方向等信息发送给 DMAC

DMA 操作过程包括三个阶段:•DMA 请求•DMA 响应和数据传送•传送结束

Page 6: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

当外设要求以 DMA 方式为它服务时,发 DMA 请求信号 DREQ到 DMACDMAC 检查该信号是否被屏蔽及其优先权,如确认该信号有效则向 CPU 发送总线请求信号 HRQ( 连到 CPU的 HOLD)

DMA 请求阶段

CPU

DMAC

HRQ

外设DREQ

地址总线

数据总线 存储器

概述

Page 7: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

每个总线周期结束时 CPU 检测 HOLD ,如为高电平,则响应HOLD 请求进入保持态,使三态总线 CPU 侧呈高阻状态,并以总线保持响应信号 HLDA 通知 DMACDMAC 接管总线,并以 DACK 信号通知外设,使之成为 DMA传送时被选中的设备,同时 DMAC 给出内存地址以及 I/O 读写和存储器读写控制信号,在外设和存储器之间完成数据传送

DMA 响应和数据传送阶段

CPU

DMAC

HLDA

外设DACK

存储器

地址总线

数据总线

IOR/IOW

MEMR/MEMW

概述

Page 8: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

传送结束阶段

传送完成后, DMAC 放弃总线,撤消总线请求 (HRQ为低 ), CPU 检测到 HRQ(HOLD) 为低后,撤消HLDA , CPU 重新获得总线控制权

CPU

DMAC

HRQ

外设EOP

地址总线

数据总线 存储器

概述

Page 9: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

概述

PC 系列微机使用可编程 DMA 控制器 8237A( 简称 8237) 实现 DMA 功能

8237 有四个通道,每个通道都有独立的与相应外设接口相联系的信号,四个通道共享与 CPU 相连的控制信号、地址信号、数据信号

PC/AT 以上的微机使用两片 8237, Pentium 微机系统中没有独立的 8237 芯片,其功能集成在芯片组中

Page 10: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的引脚功能

Page 11: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的引脚功能

•请求 / 应答信号

外设接口电路向 8237 的请求信号: DREQ3~DREQ0

8237 对外设接口电路的应答信号: DACK3~DACK0

8237 向 CPU 申请总线的信号: HRQ (连至 CPU 的 HOLD )

CPU 向 8237 传送的允许使用总线信号: HLDA

Page 12: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的引脚功能

•地址信号

: CPU 初始化 8237 或读 8237 状态时所需的片选信号

A7~A0 (输出): 8237 访问存储器的地址信号的低 8位。

A3~A0 (输入): CPU 初始化 8237 或读 8237 状态时,用于寻址 8237 内部寄存器

Page 13: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的引脚功能

•数据信号 ( 双向 ) : DB7~DB0

CPU 为主控时,可以通过 I/O 读命令查询 8237 的状态寄存器的内容,或通过 I/O 写命令对 8237 的内部寄存器进行编程,数据传送通过 DB7~DB0

8237 为主控时, DB7~DB0 输出要访问的内存地址的高 8 位,并通过 ADSTB 锁存到外部地址锁存器中,和 A7~A0 输出的低 8 位地址一起构成 16 位地址

Page 14: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的引脚功能

•地址允许信号: AEN

8237 作为主控时( 8237 控制总线),输出 AEN=1 。

8237 作为从控时( CPU 控制总线),输出 AEN=0 。

•DMA 传输结束信号: (双向)

当 DMAC 内部任一通道传输结束, 8237 发出

若由外部给 DMAC 送入有效的 ,则强制 DMAC 内部所有通道结束传输。

Page 15: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的引脚功能

MEMR/MEMW :

8237 发出的存储器读 / 写信号

IOR/IOW :

8237 作为主控时,输出的 I/O 读 / 写信号。

8237 作为从控时, CPU 发出的 I/O 读 / 写信号,用于读 / 写 8237

Page 16: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的引脚功能

ADSTB :地址选通信号

用于启动地址锁存器

READY :存储器或 I/O 的就绪信号

Page 17: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

Page 18: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

控制寄存器

8 位, 4 个通道共用,用于设定 8237 的信号形式、工作时序、传输方向。 端口地址 08H

信号形式: DREQ/DACK 信号的有效形式。工作时序:普通时序( 3 个时钟周期完成一次传输)

压缩时序( 2 个时钟周期完成一次传输)传输方向:内存 I/O (常用)

I/O 内存(常用) 内存内存( PC 系列机未用)

Page 19: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

D7 : 0= DACK 低电平有效; 1=DACK 高电平有效 D6 : 0= DREQ 高电平有效; 1=DREQ 低电平有效D5 : 1= 扩展写信号, IOW/MEMW 比正常时序提前一个周期; 0= 不扩展写信号D4 : 0= 固定优先级,通道 0 优先级最高,通道 3 优先级最低; 1= 循环优先级D3 : 0= 正常时序 1= 压缩时序D2 : 0= 启动 (指允许 )8237 工作 ; 1=停止 (指禁止 ) 8237工作D1 :内存到内存传输时, D1=1 使源地址保持不变D0 : 0= 内存 I/O 间的传输; 1= 内存内存间的传输

Page 20: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

控制寄存器

8237 的编程结构

PC 系列微型机中, BIOS 初始化时将控制寄存器设为00H——禁止内存内存的传送,允许读 / 写操作,使用正常时序固定优先级不扩展写信号DREQ 高电平有效DACK 高电平有效

Page 21: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

状态寄存器

8 位, 4 个通道共用,与控制寄存器共用一个端口地址端口地址 08H记录每个通道是否有请求、传输是否结束

D3~D0 :分别对应通道 3~0 ,指出 4 个通道的 DMA传 送是否结束,结束为 1D7~D4 :分别对应通道 3~0 ,表示 4 个通道是否有 DMA 请求,有 DMA 请求为 1

Page 22: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

暂存寄存器

8 位 , 端口地址 0DH

在内存内存传输时,暂存数据。

注意:内存 I/O 传输时,数据不进入 8237 内部,只存在于数据总线上

8237 的编程结构

Page 23: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

模式寄存器

8 位,设定 DMA 的传输模式, 4 个通道的模式寄存器共用一个端口地址,端口地址 0BH

传输模式:•单字节传输模式•数据块传输模式•请求传输模式•级联传输模式

Page 24: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

单字节传输模式:每次 DMA 操作只传送一字节后,接着 8237释放总线

块传输模式: 8237 获得总线控制权后,连续传送多个字节,每传输一个字节,当前字节计数器减 1 ,当前地址寄存器加 1 或减 1 ,直到所要求的字节数传输完(当前字节计数器减至 0 ), 8237在 EOP 引脚上发出结束信号,然后释放总线。在块传输过程中,若向8237 的 EOP 引脚上输入低电平,可强行结束传输。

模式寄存器

8237 的编程结构

Page 25: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

请求传输模式:在传输过程中, 8237 要检测 DREQ 信号(询问外设),当 DREQ 为低时, 8237暂停传输(不释放总线),当 DREQ再次有效后,继续进行传输。 级联传输模式:多片 8237 级联时,可以构成主从式 DMA 系统。级联的方式是把从片的请求线 HRQ 连至主片的 DREQ 引脚,主片的 DACK 联至从片的 HLDA 引脚若主 8237 的某通道( DREQ )连接从 8237 的 HRQ ,主 8237 的该通道应设置为级联传输模式,但从 8237不设置级联传输模式,而是设置其它三种模式之一

模式寄存器

8237 的编程结构

Page 26: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

D7 , D6 :模式选择00= 请求传输模式 01=单字节传输模式10= 块传输模式 11= 级联传输模式

D5 :存储器地址增减选择, 0= 地址增 1 , 1= 地址减1D4 :自动预置功能, 0=禁止, 1= 允许自动预置:在当前字节计数器到达 0 时,当前字节计数器和当前地址寄存器从基本字节计数器和基地址寄存器中自动获得新的初值

Page 27: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

D3 , D2 :传输类型选择01= 写传输( I/O 内存), 10= 读传输(内存 I/O )00=校验传输 , 11=无意义校验传输用来对读传输和写传输功能进行校验,它是一种虚拟传输, 8237也会产生存储器地址信号,但不产生存储器读 / 写、 I/O 读 / 写信号,校验传输一般用于器件测试

D1 , D0 :通道选择00= 通道 0 01= 通道 110= 通道 2 11= 通道 3

Page 28: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

基地址寄存器和当前地址寄存器

每个通道一个基地址寄存器,一个当前地址寄存器,16 位 ,占用相同的端口地址

基地址寄存器: DMA 传输的内存地址初值,在初始化时由 CPU分两次写入。

当前地址寄存器: DMA 传输过程中,内存地址的当前值。每传输一字节,该寄存器的值增 1 或减 1 。 CPU 可分两次读出其值。

Page 29: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

基本字节计数器和当前字节计数器

每个通道一个基本字节计数器,一个当前字节计数器,16 位 ,占用相同的端口地址

基字节计数器: DMA 传输的字节数初值,在初始化时由 CPU分两次写入。 8237规定,初值比实际传输的字节数少 1

当前字节计数器: DMA 传输过程中,当前的计数值。每传输一字节,该寄存器的值减 1 。当计数值减到 FFFFH 时, 8237 发出结束信号 EOP 。 CPU 可分两次读出其值。

Page 30: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

先 / 后触发器

端口地址 0CH

CPU 写入基地址寄存器、基本字节计数器时,均分两次写入,先 / 后触发器用于控制写入的值是低 8 位还是高 8位

写入过程:①使先 / 后触发器 =0 。②写入低 8 位,先 / 后触发器自动置 1 。③写入高 8 位,先 / 后触发器自动置 0 。

Page 31: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

请求寄存器

四个通道的请求触发器构成一个请求寄存器( 8 位)一般情况下, DMA 请求由硬件信号 DREQ 发出,也可由软件设置请求触发器来发出 DMA 请求。

D2=1 设置 DMA 请求D1~D0 :指定软件 DMA 请求的通道

端口地址 09H

Page 32: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

屏蔽寄存器

四个通道的屏蔽触发器构成一个屏蔽寄存器( 8 位)

当屏蔽寄存器的屏蔽标志置 1 时,将禁止该通道的硬件 DMA 请求和软件 DMA 请求。

D2=1 ,设置屏蔽; D2 =0 ,清除屏蔽;

D1~D0 :选通道

端口地址 0AH

Page 33: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

综合屏蔽寄存器

8237 可以一次完成四个通道的屏蔽设置

D3~D0 :分别对通道 3~0 设置屏蔽

1 ,设置屏蔽; 0 ,清除屏蔽;

端口地址 0FH

Page 34: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

清除屏蔽寄存器

对端口 0EH 写入 0 ,可以一次清除四个通道的屏蔽触发器

端口地址 0EH

MOV DX, DMA+0EHMOV AL, 0OUT DX, AL

8237 的编程结构

Page 35: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

复位命令寄存器

对端口 0DH 写入 0 ,使 8237复位,其功能等同于硬件复位

端口地址 0DH

8237复位后的状态为:

控制寄存器 状态寄存器 请求寄存器 暂存器 先 / 后触发器

清 0 屏蔽寄存器 置 1

Page 36: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的编程结构

一片 8237占用连续 16 个端口地址,用 DMA+00H~DMA+0FH表示。其中, DMA表示该片 8237 的基地址。

在 AT 以上的微机中,使用 2 片 8237 ,其地址为:

第一片 8237 ,基地址 DMA=0000H ,使用 0000H~000F I/O 地址。第二片 8237 ,基地址 DMA=00C0H ,使用 00C0H~00CF I/O 地址。

Page 37: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

端口地址 读( =0) 写( =0)

DMA+00H 当前地址寄存器(0) 基地址寄存器(0)

+01H 当前字节计数器(0) 基字节计数器(0)

+02H 当前地址寄存器(1) 基地址寄存器(1)

+03H 当前字节计数器(1) 基字节计数器(1)

+04H 当前地址寄存器(2) 基地址寄存器(2)

+05H 当前字节计数器(2) 基字节计数器(2)

+06H 当前地址寄存器(3) 基地址寄存器(3)

+07H 当前字节计数器(3) 基字节计数器(3)

+08H 状态寄存器 控制寄存器

+09H   请求寄存器

+0AH   屏蔽寄存器

+0BH   模式寄存器

+0CH   清先/后触发器

+0DH 暂存器 复位命令寄存器

+0EH   清除屏蔽寄存器

+0FH   综合屏蔽寄存器

8237 的编程结构

Page 38: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 对内存和 I/O 的寻址

存储器寻址

在主控模式下, 8237 可以产生 16 位存储器地址信号,地址引脚 A7~A0 输出地址低 8 位,高 8 位地址由数据引脚 DB7~DB0 输 出,经地址锁存器后形成存储器地址的 A15~A8 。用 ADSTB 启动地址锁存器。当系统的存储器地址多于 16 位时,多余位地址由一个称为 DMA页面寄存器的接口电路提供

Page 39: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 对内存和 I/O 的寻址

存储器寻址

Page 40: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

在 PC/AT 系统中,需要 24 位地址,高 8 位地址 A23~A16 由 DMA页面寄存器电路 74LS612 提供。在 DMA 传输之前,用指令将高 8 位地址送入页面寄存器,在 DMA 传输过程中,由 AEN 信号使页面寄存器输出该 8 位地址。

存储器寻址

8237 对内存和 I/O 的寻址

在 Pentium 微机中, DMAC 和相关页面寄存器的功能由多功能芯片组实现

Page 41: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

I/O 寻址

8237 对内存和 I/O 的寻址

8237 的四个通道,每一个只接一个外设接口电路,不使用 I/O 地址来区分 I/O 设备

I/O 设备的端口地址只用于 CPU 对 I/O 设备的寻址

Page 42: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

I/O 寻址

8237 对内存和 I/O 的寻址

Page 43: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的应用

初始化编程

写入控制寄存器写入屏蔽寄存器——屏蔽要初始化的通道写入模式寄存器先后触发器置 0写入基地址和基本字节寄存器解除屏蔽写入请求寄存器

Page 44: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的应用

例: ROM-BIOS 对通道 2 初始化编程的代码片段

DMA EQU 0 ;DMA 通道起始端口1) 系统在启动时,对控制寄存器进行初始化

MOV AL, 0OUT DMA+8, AL

2) 清除先 / 后寄存器OUT DMA+12, AL

3) 设置模式寄存器MOV AL, 46H……OUT DMA+11, AL

Page 45: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

4) 送内存地址 计算内存的物理地址,将 20 位地址的高 4 位送页面寄存器 ,低 16 位先送低 8 位,再送高 8 位

…...OUT DMA+4, AL ;低 8 位……OUT DMA+4, AL ;高 8 位……OUT 81H, AL ; 20 位地址的高 4 位

5) 送传送字节数…...

6) 送屏蔽位MOV AL, 2OUT DMA+10, AL

8237 的应用

Page 46: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

8237 的应用例:利用主板上的 8237 通道 1 ,将内存起始地址为 80000H 的 300H字节直接输出给外设

MOV AL, 0;清除先 / 后触发器OUT 0DH, AL; 写地址OUT 02, ALOUT 02, ALMOV AL, 8OUT 83H, AL; 传送的字节数MOV AX, 300HDEC AXMOV 03, ALMOV AL, AHOUT 03, AL

; 写模式寄存器MOV AL, 49HOUT 0BH, AL;清除通道 1 屏蔽MOV AL, 1OUT 0AH, AL; 读通道 1 状态WAIT: IN 08AND AL, 02JZ WAIT; 完成后屏蔽通道 1MOV AL, 5OUT 0AH, AL

Page 47: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

7.7 D/A 和 A/D 转换技术

Page 48: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

数模转换

D/A 转换器

D/A 转换器简称 DAC=Digital to Analog Converter

DAC 把数字量转换为模拟量(电压或电流)。

数模转换原理

DAC 的核心是解码网络,如 T型解码网络

Page 49: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

数模转换

DAC0832

Page 50: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

数模转换

DAC0832

DAC0832 是 8 位 DAC ,内部有两级缓冲。当 LE1有效时,数据进入第一级(数据输入寄存器),当LE2 有效时,数据输入寄存器的值进入第二级( DAC 寄存器)。由于 DAC 寄存器的输出直接送 D/A 转换器,使 LE2 有效的命令又称转换命令

DAC0832 的输出为两个电流信号 IOUT1 和 IOUT2 ( IOUT1+IOUT2= 常数),内部提供了一个反馈电阻 R ,只需加一个运算放大器,利用内部的反馈电阻 R即可获得电压输出

Page 51: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

数模转换

DAC0832 的接口设计1. 使数据输入寄存器工作在锁存状态, DAC 寄存器工作在不锁存状态( LE2 始终有效, DAC 寄存器直通)。只使用一级缓冲。

Page 52: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

设 D/A 转换端口号为 PORTA ,设需转换的数据放在1000H单元,则 D/A 转换程序为:

MOV BX , 1000HMOV AL , [BX]MOV DX , PORTAOUT DX , AL

数模转换

DAC0832 的接口设计

Page 53: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

2. 使用两级缓冲

数模转换

DAC0832 的接口设计

Page 54: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

设 CS’ 由 A15~A1经译码产生,当 A15~A1=A0832时, CS’ 有效。在 CPU执行 OUT指令时,若 A0=0 ,DAC0832 内部 LE1 有效,数据总线上的值( AL )送入数据输入寄存器 ; 若 A0=1 , DAC0832 内部 LE2 有效,数据输入寄存器的值送 DAC 寄存器。

A0832 EQU 200HMOV DX , A0832+0 ; A0=0OUT DX , AL ; AL 的值为待转换的数字MOV DX , A0832+1 ; A0=1OUT DX , AL ; AL 的值无关

数模转换

DAC0832 的接口设计

Page 55: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换

模数转换原理方法有计数法、逐次逼近法等

•计数式 A/D 转换

Page 56: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

转换原理:由计数器对固定频率信号 CLK 进行计数,计数输出值送 DAC , DAC 的输出模拟量 Vo 与输入模拟量 Vi 在比较器中进行比较,随着计数的进行,Vo 不断增加,当 Vo>Vi ,计数器停止计数,此时的计数值即是模拟量 Vi 对应的数字量。

模数转换

模数转换原理

•计数式 A/D 转换

Page 57: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换

模数转换原理

•逐次逼近型 A/D 转换

Page 58: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换

模数转换原理•逐次逼近型 A/D 转换

转换原理:数字量由逐次逼近寄存器 SAR产生。 SAR使用对分搜索法产生数字量,以 8 位数字量为例, SAR首先产生 8 位数字量的一半,即 10000000B,试探模拟量的大小,若 Vo>Vi ,清除最高位,若 Vo<Vi ,保留最高位。在最高位确定后, SAR又以对分搜索法确定次高位,即以低 7 位的一半 y1000000B(y 为已确定位 ) 试探模拟量的大小。重复这一过程,直到最低位bit0 被确定,转换结束

Page 59: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换

ADC 0809

8 位 ADC ,逐次逼近型, 8 路模拟量输入

Page 60: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

内部有“ 8 选 1”MUX 。当 ALE 信号有效时, ADD_C 、 ADD_B 、 ADD_A 选择 IN0~IN7 。例如 ADD_C 、 ADD_B 、 ADD_A分别为 011 时,选择 IN3 通道。

数字输出:有三态缓冲器,当 Enable 有效时,从 D7~D0 引脚输出转换后的数字。

启动信号: START 。负脉冲启动。

转换结束信号: EOC ,高电平有效。

模数转换

ADC 0809

Page 61: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换

ADC 0809 的接口设计

Page 62: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换

ADC 0809 的接口设计

通道选择由系统地址信号 A2~A0 连至 ADD_C 、 ADD_B 、 ADD_A 实现。 ALE 信号由 A12~A3经译码后形成的 CS 信号和 IOW 信号或非获得。

设 A12~A3=220H 时, CS 有效,以下指令可以执行通道选择:

MOV DX , 220H+n ; n=0~7OUT DX , AL ; AL 的值无关

Page 63: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换

ADC 0809 的接口设计

START 信号与 ALE 信号相连,通道选择的同时,启动转换。转换结束信号 EOC 接 8255 的 PB0 ,应使用 8255PB 工作在方式 0 输入。 CPU 查询 PB0即可获知转换是否完成。数据输出允许信号 Enable 由和或非后驱动

以下指令可以读取转换后的数字:MOV DX , 220HIN AL , DX

Page 64: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

模数转换 ADC 0809 的接口设计

A0809 EQU 220H A8255 EQU 210H ; 8255 的地址为 210H~213HMOV AL , 1xxxx01xB ; 8255 初始化, PB 方式 0 输入MOV DX , A8255+3OUT DX, AL;转换通道 IN5 的程序MOV DX , A0809+5OUT DX , AL ;通道选择并启动转换NEXT :MOV DX, A8255+1 ; 8255PBIN AL , DXAND AL , 01HJZ NEXT ; PB0=0, 未完成MOV DX , A0809IN AL , DX ; AL= 转换结果

Page 65: 7.1 概述 7.2CPU 与外设数据传送的 方式 7.3 可编程计数器 / 定时器 8253 7.4 串行通讯和串行接口 7.5  并行接口 7.6 DMA 控制器 8237

作业

1. 使用 8250 作串行接口时,若要求以 1200bps 的波特率发送一个字符,字符格式为 7 个数据位,一个停止位,一个奇校验位,试编写初始化程序。2. 设 8255 的端口 A 、 B 、 C 和控制寄存器的地址为 F4H 、 F5H 、 F6H 、 F7H ,要使 A 口工作于方式 0 输出, B 口工作于方式 1 输入, C 口上半部输入,下半部输出,且要求初始化时PC6=0 ,试编写初始化程序3. 试述 8237的 DMA 请求 / 响应握手过程4. 使用 8237 的通道 3 ,实现从内存到 I/O 设备的传送,其中传送的数据所在的内存单元为 20000H~20FFFH