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,直接存储器存取
CPU
内存 外设数据通道 数据通道非 DMA方式
(包括程序控制方式和中断方式 )
DMAC
内存 外设数据通道
DMA方式
概述
DMAC具有独立的控制三大总线来访问存储器和 I/O端口的能力,它能像 CPU一样提供数据传送所需的地址信息和读写控制信息
DMAC和 CPU都挂在系统总线上,当进入 DMA方式时,
DMAC成为总线主控。
在总线上,可以控制其他部件的部件称为总线主控或主控 (bus master),被控部件称为 从控 (slave)。任意时刻,总线上只有一个主控。
概述
DMA操作之前,应先对 DMAC编程,把要传送的数据块长度、数据块在存储器中的起始地址,数据传送方向等信息发送给 DMAC
DMA操作过程包括三个阶段:
DMA请求
DMA响应和数据传送
传送结束当外设要求以 DMA方式为它服务时,发 DMA请求信号 DREQ到 DMAC
DMAC检查该信号是否被屏蔽及其优先权,如确认该信号有效则向 CPU发送总线请求信号 HRQ(连到 CPU
的 HOLD)
DMA请求阶段
CPU
DMAC
HRQ
外设
DREQ
地址总线数据总线 存储器
概述每个总线周期结束时 CPU检测 HOLD,如为高电平,则响应
HOLD请求进入保持态,使三态总线 CPU侧呈高阻状态,并以总线保持响应信号 HLDA通知 DMAC
DMAC接管总线,并以 DACK信号 通知外设,使之成为 DMA传送时被选中的设备,同时 DMAC给出内存地址以及 I/O读写和存储器读写控制信号,在 外设和存储器之间完成数据传送
DMA响应和数据传送阶段
CPU
DMAC
HLDA
外设DACK
存储器地址总线数据总线
IOR/IOW
MEMR/MEMW
概述传送结束阶段传送完成后,DMAC放弃总线,撤消总线请求 (HRQ
为低 ),CPU检测到 HRQ(HOLD)为低后,撤消 HLDA,
CPU重新获得总线控制权
CPU
DMAC
HRQ
外设
EOP
地址总线数据总线 存储器
概述
概述
PC系列微机使用 可编程 DMA控制器 8237A(简称 8237)
实现 DMA功能
8237有四个通道,每个通道都有独立的与相应外设接口相联系的信号,四个通道共享与 CPU相连的控制信号、地址信号、数据信号
PC/AT以上的微机使用两片 8237,Pentium微机系统中没有独立的 8237芯片,其功能集成在芯片组中
8237的引脚功能
8237的引脚功能
请求 /应答信号外设接口电路向 8237的请求信号,DREQ3~DREQ0
8237对外设接口电路的应答信号,DACK3~DACK0
8237向 CPU申请总线的信号,HRQ(连至 CPU的 HOLD)
CPU向 8237传送的允许使用总线信号,HLDA
8237的引脚功能
地址信号
,CPU初始化 8237或读 8237状态时所需的片选信号
A7~A0(输出),8237访问存储器的地址信号的低 8位。
A3~A0(输入),CPU初始化 8237或读 8237状态时,
用于寻址 8237内部寄存器
8237的引脚功能
数据信号 (双向 ),DB7~DB0
CPU为主控时,可以通过 I/O读命令查询 8237的状态寄存器的内容,或通过 I/O写命令对 8237的内部寄存器进行编程,数据传送通过 DB7~DB0
8237为主控时,DB7~DB0输出要访问的内存地址的高 8位,并通过 ADSTB锁存到外部地址锁存器中,
和 A7~A0输出的低 8位地址一起构成 16位地址
8237的引脚功能
地址允许信号,AEN
8237作为主控时( 8237控制总线),输出 AEN=1。
8237作为从控时( CPU控制总线),输出 AEN=0。
DMA传输结束信号,(双向)
当 DMAC内部任一通道传输结束,8237发出若由外部给 DMAC送入有效的,则强制 DMAC内部所有通道结束传输。
8237的引脚功能
MEMR/MEMW:
8237发出的存储器读 /写信号
IOR/IOW:
8237作为主控时,输出的 I/O读 /写信号。
8237作为从控时,CPU发出的 I/O读 /写信号,用于读 /写 8237
8237的引脚功能
ADSTB:地址选通信号用于启动地址锁存器
READY:存储器或 I/O的就绪信号
8237的编程结构
8237的编程结构控制寄存器
8位,4个通道共用,用于设定 8237的信号形式、工作时序、传输方向。 端口地址 08H
信号形式,DREQ/DACK信号的有效形式。
工作时序:普通时序( 3个时钟周期完成一次传输)
压缩时序( 2个时钟周期完成一次传输)
传输方向:内存?I/O(常用)
I/O?内存(常用)
内存内存( PC系列机未用)
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=内存内存间的传输控制寄存器
8237的编程结构
PC系列微型机中,BIOS初始化时将控制寄存器设为
00H——
禁止内存内存的传送,
允许读 /写操作,
使用正常时序固定优先级不扩展写信号
DREQ高电平有效
DACK高电平有效
8237的编程结构状态寄存器
8位,4个通道共用,与控制寄存器共用一个端口地址端口地址 08H
记录每个通道是否有请求、传输是否结束
D3~D0:分别对应通道 3~0,指出 4个通道的 DMA传送是否结束,结束为 1
D7~D4:分别对应通道 3~0,表示 4个通道是否有
DMA请求,有 DMA请求为 1
暂存寄存器
8位,端口地址 0DH
在内存内存传输时,暂存数据。
注意,内存 I/O传输时,数据不进入 8237内部,
只存在于数据总线上
8237的编程结构
8237的编程结构模式寄存器
8位,设定 DMA的传输模式,4个通道的模式寄存器共用一个端口地址,端口地址 0BH
传输模式:
单字节传输模式
数据块传输模式
请求传输模式
级联传输模式单字节传输模式,每次 DMA操作只传送一字节后,接着 8237释放总线块传输模式,8237获得总线控制权后,连续传送多个字节,每传输一个字节,当前字节计数器减 1,当前地址寄存器加 1或减 1,直到所要求的字节数传输完
(当前字节计数器减至 0),8237在 EOP引脚上发出结束信号,然后释放总线。在块传输过程中,若向
8237的 EOP引脚上输入低电平,可强行结束传输。
模式寄存器
8237的编程结构请求传输模式,
在传输过程中,8237要检测 DREQ信号(询问外设),
当 DREQ为低时,8237暂停传输(不释放总线),当
DREQ再次有效后,继续进行传输。
级联传输模式,
多片 8237级联时,可以构成主从式 DMA系统。级联的方式是把从片的请求线 HRQ连至主片的 DREQ引脚,
主片的 DACK联至从片的 HLDA引脚若主 8237的某通道( DREQ)连接从 8237的 HRQ,主
8237的该通道应设置为级联传输模式,但从 8237不设置级联传输模式,而是设置其它三种模式之一模式寄存器
8237的编程结构
8237的编程结构
D7,D6:模式选择
00= 请求传输模式 01=单字节传输模式
10= 块传输模式 11=级联传输模式
D5:存储器地址增减选择,0=地址增 1,1=地址减 1
D4:自动预置功能,0=禁止,1=允许自动预置,在当前字节计数器到达 0时,当前字节计数器和当前地址寄存器从基本字节计数器和基地址寄存器中自动获得新的初值
8237的编程结构
D3,D2:传输类型选择
01=写传输( I/O?内存),10=读传输(内存? I/O)
00=校验传输,11=无意义校验传输 用来对读传输和写传输功能进行校验,它是一种虚拟传输,8237也会产生存储器地址信号,但不产生存储器读 /写,I/O读 /写信号,校验传输一般用于器件测试
D1,D0:通道选择
00=通道 0 01=通道 1
10=通道 2 11=通道 3
8237的编程结构基地址寄存器和当前地址寄存器每个通道一个基地址寄存器,一个当前地址寄存器,
16位,占用相同的端口地址基地址寄存器,DMA传输的内存地址初值,在初始化时由 CPU分两次写入。
当前地址寄存器,DMA传输过程中,内存地址的当前值。每传输一字节,该寄存器的值增 1或减 1。 CPU可分两次读出其值。
8237的编程结构基本字节计数器和当前字节计数器每个通道一个基本字节计数器,一个当前字节计数器,
16位,占用相同的端口地址基字节计数器,DMA传输的字节数初值,在初始化时由 CPU分两次写入。 8237规定,初值比实际传输的字节数少 1
当前字节计数器,DMA传输过程中,当前的计数值。
每传输一字节,该寄存器的值减 1。当计数值减到
FFFFH时,8237发出结束信号 EOP。 CPU可分两次读出其值。
8237的编程结构先 /后触发器端口地址 0CH
CPU写入基地址寄存器、基本字节计数器时,均分两次写入,先 /后触发器用于控制写入的值是低 8位还是高 8位写入过程:
①使先 /后触发器 =0。
②写入低 8位,先 /后触发器自动置 1。
③写入高 8位,先 /后触发器自动置 0。
8237的编程结构请求寄存器四个通道的请求触发器构成一个请求寄存器( 8位)
一般情况下,DMA请求由硬件信号 DREQ发出,也可由软件设置请求触发器来发出 DMA请求。
D2=1设置 DMA请求
D1~D0:指定软件 DMA请求的通道端口地址 09H
8237的编程结构屏蔽寄存器四个通道的屏蔽触发器构成一个屏蔽寄存器( 8位)
当屏蔽寄存器的屏蔽标志置 1时,将禁止该通道的硬件
DMA请求和软件 DMA请求。
D2=1,设置屏蔽; D2 =0,清除屏蔽;
D1~D0:选通道端口地址 0AH
8237的编程结构综合屏蔽寄存器
8237可以一次完成四个通道的屏蔽设置
D3~D0:分别对通道 3~0设置屏蔽
1,设置屏蔽; 0,清除屏蔽;
端口地址 0FH
清除屏蔽寄存器对端口 0EH写入 0,可以一次清除四个通道的屏蔽触发器端口地址 0EH
MOV DX,DMA+0EH
MOV AL,0
OUT DX,AL
8237的编程结构
8237的编程结构复位命令寄存器对端口 0DH写入 0,使 8237复位,其功能等同于硬件复位端口地址 0DH
8237复位后的状态为:
控制寄存器状态寄存器请求寄存器暂存器先 /后触发器清 0 屏蔽寄存器 置 1
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地址。
端口地址读 ( =0 ) 写 ( =0 )
DMA +0 0H 当前地址寄存器 ( 0 ) 基地址寄存器 ( 0 )
+01 H 当前字节计数器 ( 0 ) 基字节计数器 ( 0 )
+02 H 当前地址寄存器 ( 1 ) 基地址寄存器 ( 1 )
+03 H 当前字节计数器 ( 1 ) 基字节计数器 ( 1 )
+04 H 当前地址寄存器 ( 2 ) 基地址寄存器 ( 2 )
+05 H 当前字节计数器 ( 2 ) 基字节计数器 ( 2 )
+06 H 当前地址寄存器 ( 3 ) 基地址寄存器 ( 3 )
+07 H 当前字节计数器 ( 3 ) 基字节计数器 ( 3 )
+08 H 状态寄存器 控制寄存器
+09 H   请求寄存器
+0A H   屏蔽寄存器
+0B H   模式寄存器
+0C H   清先 / 后触发器
+0D H 暂存器 复位命令寄存器
+0E H   清除屏蔽寄存器
+0F H   综合屏蔽寄存器
8237的编程结构
8237对内存和 I/O的寻址存储器寻址在主控模式下,8237可以产生 16位存储器地址信号,
地址引脚 A7~A0输出地址低 8位,高 8位地址由数据引脚 DB7~DB0输 出,经地址锁存器后形成存储器地址的 A15~A8。用 ADSTB启动地址锁存器。
当系统的存储器地址多于 16位时,多余位地址由一个称为 DMA页面寄存器的接口电路提供
8237对内存和 I/O的寻址存储器寻址在 PC/AT系统中,需要 24位地址,高 8位地址
A23~A16由 DMA页面寄存器电路 74LS612提供。在
DMA传输之前,用指令将高 8位地址送入页面寄存器,
在 DMA传输过程中,由 AEN信号使页面寄存器输出该 8位地址。
存储器寻址
8237对内存和 I/O的寻址在 Pentium微机中,DMAC和相关页面寄存器的功能由多功能芯片组实现
I/O寻址
8237对内存和 I/O的寻址
8237的四个通道,每一个只接一个外设接口电路,
不使用 I/O地址来区分 I/O设备
I/O设备的端口地址只用于 CPU对 I/O设备的寻址
I/O寻址
8237对内存和 I/O的寻址
8237的应用初始化编程写入控制寄存器写入屏蔽寄存器 —— 屏蔽要初始化的通道写入模式寄存器先后触发器置 0
写入基地址和基本字节寄存器解除屏蔽写入请求寄存器
8237的应用例,ROM-BIOS对通道 2初始化编程的代码片段
DMA EQU 0 ;DMA通道起始端口
1) 系统在启动时,对控制寄存器进行初始化
MOV AL,0
OUT DMA+8,AL
2) 清除先 /后寄存器
OUT DMA+12,AL
3) 设置模式寄存器
MOV AL,46H
……
OUT DMA+11,AL
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,2
OUT DMA+10,AL
8237的应用
8237的应用例:利用主板上的 8237通道 1,将内存起始地址为 80000H的 300H
字节直接输出给外设
MOV AL,0;清除先 /后触发器
OUT 0DH,AL;写地址
OUT 02,AL
OUT 02,AL
MOV AL,8
OUT 83H,AL;传送的字节数
MOV AX,300H
DEC AX
MOV 03,AL
MOV AL,AH
OUT 03,AL;写 模式寄存器
MOV AL,49H
OUT 0BH,AL;清除通道 1屏蔽
MOV AL,1
OUT 0AH,AL;读通道 1状态
WAIT,IN 08
AND AL,02
JZ WAIT;完成后屏蔽通道 1
MOV AL,5
OUT 0AH,AL
7.7 D/A和 A/D转换技术
数模转换
D/A转换器
D/A转换器简称 DAC=Digital to Analog Converter
DAC把数字量转换为模拟量(电压或电流)。
数模转换原理
DAC的核心是解码网络,如 T型解码网络
数模转换
DAC0832
数模转换
DAC0832
DAC0832是 8位 DAC,内部有两级缓冲。当 LE1有效时,数据进入第一级(数据输入寄存器),当
LE2有效时,数据输入寄存器的值进入第二级
( DAC寄存器)。由于 DAC寄存器的输出直接送
D/A转换器,使 LE2有效的命令又称 转换命令
DAC0832的输出为两个电流信号 IOUT1和 IOUT2
( IOUT1+IOUT2=常数),内部提供了一个反馈电阻 R,只需加一个运算放大器,利用内部的反馈电阻 R即可获得电压输出
数模转换
DAC0832的接口设计
1,使数据输入寄存器工作在锁存状态,DAC寄存器工作在不锁存状态( LE2始终有效,DAC寄存器直通)。
只使用一级缓冲。
设 D/A转换端口号为 PORTA,设需转换的数据放在
1000H单元,则 D/A转换程序为:
MOV BX,1000H
MOV AL,[BX]
MOV DX,PORTA
OUT DX,AL
数模转换
DAC0832的接口设计
2,使用两级缓冲
数模转换
DAC0832的接口设计设 CS’由 A15~A1经译码产生,当 A15~A1=A0832时,
CS’有效。在 CPU执行 OUT指令时,若 A0=0,
DAC0832内部 LE1有效,数据总线上的值( AL)送入数据输入寄存器 ; 若 A0=1,DAC0832内部 LE2有效,
数据输入寄存器的值送 DAC寄存器。
A0832 EQU 200H
MOV DX,A0832+0; A0=0
OUT DX,AL ; AL的值为待转换的数字
MOV DX,A0832+1 ; A0=1
OUT DX,AL; AL的值无关
数模转换
DAC0832的接口设计
模数转换模数转换原理方法有计数法、逐次逼近法等
计数式 A/D转换转换原理:由计数器对固定频率信号 CLK进行计数,
计数输出值送 DAC,DAC的输出模拟量 Vo与输入模拟量 Vi在比较器中进行比较,随着计数的进行,Vo
不断增加,当 Vo>Vi,计数器停止计数,此时的计数值即是模拟量 Vi对应的数字量。
模数转换模数转换原理
计数式 A/D转换
模数转换模数转换原理
逐次逼近型 A/D转换
模数转换模数转换原理
逐次逼近型 A/D转换转换原理:数字量由逐次逼近寄存器 SAR产生。 SAR
使用对分搜索法产生数字量,以 8位数字量为例,SAR
首先产生 8位数字量的一半,即 10000000B,试探模拟量的大小,若 Vo>Vi,清除最高位,若 Vo<Vi,保留最高位。在最高位确定后,SAR又以对分搜索法确定次高位,即以低 7位的一半 y1000000B(y为已确定位 ) 试探模拟量的大小。重复这一过程,直到最低位 bit0被确定,
转换结束
模数转换
ADC 0809
8位 ADC,逐次逼近型,8路模拟量输入内部有,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
模数转换
ADC 0809的接口设计
模数转换
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~7
OUT DX,AL ; AL的值无关
模数转换
ADC 0809的接口设计
START信号与 ALE信号相连,通道选择的同时,
启动转换。
转换结束信号 EOC接 8255的 PB0,应使用 8255PB工作在方式 0输入。 CPU查询 PB0即可获知转换是否完成。
数据输出允许信号 Enable由和或非后驱动以下指令可以读取转换后的数字:
MOV DX,220H
IN AL,DX
模数转换 ADC 0809的接口设计
A0809 EQU 220H
A8255 EQU 210H ; 8255的地址为 210H~213H
MOV AL,1xxxx01xB ; 8255初始化,PB方式 0输入
MOV DX,A8255+3
OUT DX,AL;转换通道 IN5的程序
MOV DX,A0809+5
OUT DX,AL ;通道选择并启动转换
NEXT:
MOV DX,A8255+1 ; 8255PB
IN AL,DX
AND AL,01H
JZ NEXT ; PB0=0,未完成
MOV DX,A0809
IN AL,DX ; AL=转换结果作业
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