(2)16K字节的数据共需要8K=8192次采集 ;8255A的端口地址
PORT_A EQU 0F0H ;A口地址 PORT_B EQU 0F1H ;B口地址 PORT_C EQU 0F2H ;C口地址
PORT_CTL EQU 0F3H ;控制口地址
;8255A控制字:A口和B口工作于方式0,A口、B口和C口的上半部分为输入,C 口的下半部分为输出 LEA DI,W_BUF MOV CX,8192
AD_CONT:MOV AL,10011010B ;方式字 OUT PORT_CTL,AL ;输出方式字 ;启动A/D转换 MOV AL,00H
OUT PORT_C,AL ;使CS,CE,CR/均为低 NOP ;延时 NOP
MOV AL,04H
OUT PORT_C,AL ;使CE=1,启动A/D转换 NOP NOP
MOV AL,03H
OUT PORT_C,AL ;使CE=0,CS=CR/=1,结束启动状态
READ_STS:IN AL,PORT_C ;读STS状态 TEST AL,80H ;转换(STS=0)完了吗? JNZ READ_STS ;否,则循环等待 ;转换完成,启动读操作 MOV AL,01H
OUT PORT_C,AL ;使CS=0,CE=0,CR/=1 NOP
MOV AL,05H ;使CE=1,CS=0,CR/=1 OUT PORT_C,AL
;读取数据,存入BX中
IN AL,PORT_A ;读入高4位数据 AND AL,0FH
MOV BH,AL ;存入BH
IN AL,PORT_B ;读入低8位 MOV BL,AL ;存入BL
MOV [DI],BX ;存入缓冲区 INC DI INC DI
;结束读操作
MOV AL,03H ;使CE=0,CS=1
OUT PORT_C,AL ;结束读操作
CALL DELAY_10MS ;延时10个毫秒 LOOP AD_CONT
第十二章
1. 一般DMA控制器应具有哪些基本功能? 答:(1)能向CPU提出DMA请求,请求信号加到CPU的HOLD引脚上。 (2)CPU响应DMA请求后,DMA控制器从CPU那儿获得对总线的控制权。在整个DMA 操作期间,由DMA控制器管理系统总线,控制数据传送,CPU暂停工作。 (3)能提供读/写存储器或I/O设备的各种控制命令。
(4)确定数据传输的起始地址和数据的长度,每传送一个数据,能自动修改地址,使地址 增1或减1,数据长度减1.
(5)数据传送完毕,能发出结束DMA传送的信号。
2. 什么是8237DMA控制器的主态工作方式?什么是从态工作方式?在这两种工作方式下, 各控制信号的功能是什么? 答:(1)在DMA控制器未取得总线控制权时,必须由CPU对DMA控制器进行编程,以 确定通道的选择、数据传送的方式和类型、内存单元起始地址、地址是递增还是递减以及要 传送的总字节数,CPU也可以读取DMA控制器的状态。此时,CPU处于主控状态,而DMA 控制器就和一般的I/O芯片一样,是系统总线的从属设备,DMA控制器的这种工作方式称 为从态方式。
(2)当DMA控制器取得总线控制权以后,系统就完全在它的控制之下,使I/O设备和存 储器之间或者存储器与存储器之间进行直接的数据传送,DMA控制器的这种工作方式称为 主态方式。
(3)CS:从态方式下片选信号
A3~A0:从态时,输入地址信号,寻址DMA控制器的内部寄存器,主态时,输出要 访问内存的最低4位地址。
A7~A4:主态时,输出4位地址信息
DB7~DB0:从态时,用于8237DMA编程,主态时,输出高8位地址和用来传送数据 IOR:从态时作为输入控制信号,读取内部寄存器,主态时作为输出控制信号,与 MEMW配合,控制数据由外设传送到存储器中
IOW:从态时输入控制信号,对8237A进行初始化编程,主态时,输出控制信号,与 MEMR配合,把数据从存储器传送到外设
MEMR:主态时,与IOW配合把数据从存储器读出送外设,也用于控制内存间数据 传送,使数据从源地址单元读出。从态时该信号无效。
MEMW:主态时,可与IOR配合把数据从外设写入存储器,也用于内存间数据传送, 控制把数据写入目的单元。从态时该信号无效。 DREQ3~DREQ0:通道3~0的DMA请求信号。 HRQ:保持请求信号 HLDA:保持响应信号
DACK3~DACK0:通道3~0的DMA响应信号。
EOP:传输过程结束信号。
3. 8237A DMA控制器的当前地址寄存器、当前字节寄存器、基地址寄存器和基字节寄存器 各保存什么值?
答:当前地址寄存器用于存放DMA传送的存储器地址值,每传送一个数据,地址值自动增 1或减1,以指向下一个存储单元。
当前字节寄存器也称为当前字计数寄存器,其初值比实际传送的字节数少1,该值在编 程时由CPU写入的,用于保存本次DMA传送的字节数。 基地址寄存器:用于存放对应通道当前地址寄存器的初值。
基字节寄存器:也称基字计数寄存器,用于存放对应通道当前字计数器的初值,主要 用于自动预置操作时使当前字计数器恢复初值。
4. 8237A具有几个DMA通道?每个通道有哪几种传送方式?各用于什么场合?什么叫自动 预置方式?
答:8237A具有4个DMA通道,每个通道有4种传送方式:
(1)单字节传送方式,此种方式下,每进行一次DMA操作,只传送一个字节的数据。 此方式能保证在两次DMA传送之间,CPU可执行一次完整的总线操作。
(2)数据块传输方式,此方式可使DMA操作连续传输数据,一直到一批数据传送完毕,8237A才释放总线。
(3)请求传送方式,此方式与数据块传送方式类似,可连续传送数据,但与其不同之处 在于,每传送一个字节后,8237A要对DREQ端进行测试,一旦检测到DREQ信号无效, 则立即停止传送,当DREQ有效后,可使DMA传输从断点处继续进行。
(4)级联传送方式,此方式可将多个8237A连在一起,以便扩充系统的DMA通道。 当DMA处于自动预置方式时,每当产生有效的EOP信号后,该通道将自动把基地址 寄存器和基字计数器的内容分别重新置入当前地址寄存器和当前字计数器中,达到重新初始 化的目的,这样既不需要CPU的干预,又能自动执行下一次DMA操作。 5. 8237A可执行哪几条软件命令?
答:8237A设置了3条软件命令,只要对特定的端口地址进行一次写操作,命令就会生效。 (1)清除先/后触发器
8237内部设有一个先/后触发器,用于控制读/写次序,当触发器清0时,读写低8位数 据,随后先/后触发器自动置成1,读写高8位数据,随后触发器清0,如此循环。为了按正 确的顺序访问寄存器中的高8位字节和低8位字节,CPU应使用清除先/后触发器指令,将 触发器清0。 (2)主清命令
也称复位命令,与RESET功能相同,可使命令寄存器、状态寄存器、请求寄存器、暂 存寄存器和内部先/后触发器均清0,将屏蔽寄存器置1. (3)清除屏蔽寄存器
该命令能清除4个通道的全部屏蔽位,允许各通道接收DMA请求。
6. 根据图12.12,表12.3和表12.4,说明如何产生DMA传送的20位存储器地址。 答:在DMA服务期间,直接从8237A的A7~A4和A3~A0输出低8位地址,在整个DMA 传输周期中这些地址信号都是稳定的。
在S1和S2状态,从数据线DB7~DB0输出高8位地址A15~A8,要用三态地址锁存 器锁存。
8237A只能提供16位地址,最大寻址64KB内存空间,为了实现对全部内存空间的寻 址,在PC/XT中设置了一个页面寄存器74LS670,用来产生存储器的高4为地址A19~A16,8237A管理低16位地址A15~A0.通过对页面寄存器的编程,既可以在1M内存范围内寻址, 但在DMA传输过程中,页面寄存器的值是固定的,即总是指向内存中某个64KB的地址范 围。
7. 若8237A的端口基地址为000H,要求通道0和通道1工作在单字节读传输,地址减1 变换,无自动预置功能。通道2和通道3工作在数据块传输方式,地址加1变化,有自动预 置功能。8237A的DACK为高电平有效,DREQ为低电平有效,用固定优先级方式启动8237A 工作,试编写8237A的初始化程序。 答:初始化程序如下:
DMA EQU 000H ;8237A的基地址为00H ;输出主清除命令
OUT DMA+0DH,AL ;发总清命令
;写入方式字:单字节读传输,地址减1变化,无自动预置功能,选择通道0 MOV AL,01101000B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入方式字:单字节读传输,地址减1变化,无自动预置功能,选择通道1 MOV AL,01101001B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入方式字:数据块传输方式,地址加1变化,有自动预置功能,选择通道2 MOV AL,10010010B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入方式字:数据块传输方式,地址加1变化,有自动预置功能,选择通道3 MOV AL,10010010B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入命令字:DACK为高电平有效,DREQ为低电平有效,用固定优先级方式 MOV AL,11000000 B ;命令字 OUT DMA+08H,AL ;写入8237A (完)