630 likes | 819 Views
第 12 章. 8237 A DMA 控制器及其应用. 中国科学技术大学 何克东. 在通常情况下 , 计算机系统中的数据传送是由 CPU 来控制的。不管是查询方式还是中断方式 , 每传送一个字节或者一个字 , 都需要 CPU 不断的检查数据是否传送完毕 , 是否要传送下一个数据。另外在查询方式或者中断方式下 , 需要执行相应的查询或者中断服务程序 , 这样就会大大降低数据的传送速度。
E N D
第 12 章 8237A DMA控制器及其应用 中国科学技术大学 何克东
在通常情况下,计算机系统中的数据传送是由CPU来控制的。不管是查询方式还是中断方式,每传送一个字节或者一个字,都需要CPU不断的检查数据是否传送完毕,是否要传送下一个数据。另外在查询方式或者中断方式下,需要执行相应的查询或者中断服务程序,这样就会大大降低数据的传送速度。 DMA (Direct Memory Access 直接存储器存取)方式是用硬件实现存储器与存储器之间、存储器与I/O设备之间直接进行高速数据传送,不需要CPU的干预,减少了中间环节,而且存储器地址的修改和传送完成的报告均由硬件自动完成,所以极大地提高了传送速度。 DMA传送方式通常用来高速传送大批量的数据块。如磁盘存取、图像处理及高速数据采集系统等。
在DMA期间由DMAC(直接存储器存取控制器)控制总线,负责一批数据的传输,数据传送完成后,再把总线的控制权交还给CPU。由于DMA传送期间,CPU让出总线控制权,这就可能影响诸如中断请求的及时响应和处理;又因为DMA传送方式的高速度是以增加系统的复杂性和成本为代价的(即用硬件控制代替软件控制)。所以,在一些小系统中,当对传送速度和传送量要求不高时,一般并不用DMA方式。
DMA传送包括以下三种操作: ①DMA读传送,存储器→I/O设备。 ②DMA写传送,I/O设备→存储器。 ③存储单元之间传送,存储器→存储器。
实现DMA传送的关键部件是DMA控制器(DMAC)。系统总线分别受到CPU和DMAC这两个部件的控制,即CPU 可以向地址总线、数据总线和控制总线发送信息(非DMA方式),DMAC也可以向地址总线、数据总线和控制总线发送信息(DMA方式)。 但在同一时刻,系统总线只能接受一个部件的控制。究竟哪个部件来控制系统总线,是通过这两个部件之间的“联络信号”控制实现的。
DMA传送过程大致有以下几个步骤: ①I/O设备向DMAC发出DMA请求(DREQ)。 ②DMAC在接到I/O设备发出的DMA请求后,向CPU发出总线请求(HRQ),请求CPU脱离对系统总线的控制,而由DMAC接管对系统总线的控制。 ③CPU在执行完当前指令的当前总线周期后(不一定是最后一个总线周期,注意和中断的区别),向DMAC发出总线响应信号(HLDA)。 ④CPU脱离对系统总线的控制,处于等待状态(但一直监视DMA总线请求信号),由DMAC接管对系统总线的控制。
⑤DMAC向I/O设备发出DMA应答信号(DACK)。 ⑥DMAC把存储器与I/O设备之间进行数据传送所需要的有关地址,送到地址总线,通过控制总线向存储器和I/O设备发出读或写信号,从而完成一个字节的传送。 ⑦当设定的字节数据传送完毕后(DMAC自动计数),DMAC将总线请求信号变成无效,同时脱离对系统总线的控制,CPU检测到总线请求信号变成无效后(CPU一直在监视总线请求信号),也将总线响应信号变成无效,CPU恢复对系统总线的控制,继续执行被DMAC中断的、当前指令的当前总线周期。
DMA控制器在系统中的两种工作状态 DMA控制器(DMAC)是作为存储器与I/O设备或者存储器与存储器之间实现高速数据传送的专用处理器。在系统中它有两种工作状态:从态和主动态。当DMAC处于从态时,称其为受控器,当DMAC处于主动态时,称其为主控器。 • 从态 在DMAC获得总线控制权之前,DMAC受CPU控制。此时,CPU可对DMAC进行初始化编程,也可从DMAC中读出状态。当DMAC上电或复位时,DMAC自动处于从态。 • 主动态 在DMAC获得总线控制权之后,DMAC取代CPU而成为系统总线的主控者,接管和控制系统总线。通过总线向存储器或I/O设备发出地址、读/写信号,以控制在两个实体之间的数据传送。
12.1 8237A的组成和工作原理 • 每个8237A芯片有4个DMA通道,就是有4个DMA控制器 • 每个DMA通道具有不同的优先权 • 每个DMA通道可以分别允许和禁止 • 每个DMA通道有4种工作方式 • 一次传送的最大长度可达64KB • 多个8237A芯片可以级连,扩展通道数
一、 8237A的内部结构 • 内部结构和外部引脚都相对比较复杂 • 应用观点,内部主要由两类寄存器组成 • 通道寄存器 • 控制和状态寄存器
(A15~A8) (6×4) 8237A的内部结构
时序和控制逻辑 当8237A作为从控器时,该部分接收系统送来的控制信号,完成相应的控制在操作。当8237A作为主控器时,该部分向系统存储器和I/O接口电路发出相应的控制信号。 • 优先级控制逻辑 该部分电路根据CPU在初始化8237A时写入的命令,对同时提出DMA请求的多个通道进行优先级管理,以决定哪个通道的优先级最高。8237A有固定优先级和循环优先级两种优先级管理方式。无论采用那种优先级管理方式,一旦某个DMA请求被系统响应后,即使有高优先级的DMA请求出现,也必须等到该DMA处理过程结束,才能被系统响应。这一点和中断处理时,高优先级中断请求可以打断低优先级中断请求是不一样的。
I/O缓冲器 I/O缓冲器包括数据缓冲器和地址缓冲器两部分。 DB7~DB0:当8237A作为从控器时,DB7~DB0作为数据线,用于传送CPU的控制命令和内部寄存器的内容。当8237A作为主控器时,DB7~DB0作为地址线,传送16位地址的高8位A15~A8,并由ADSETB选通信号将其锁存在高8位地址锁存器中。若8237A工作在存储器到存储器传送方式,源存储器的数据先经由DB7~DB0读入8237A的暂存寄存器,再传送到目的存储器。 A3~A0:四位I/O缓冲器。当8237A作为从控器时,用于选择8237A的内部寄存器。当8237A作为主控器时,输出16位地址的最低4位。 A7~A4:四位输出缓冲器。当8237A作为主控器时,输出16位地址的A7~A4部分。
命令控制逻辑 当8237A处于在从态时,该部分电路接收CPU送来的A3~A0,经译码后,选择8237A内部相应的寄存器。在写入方式控制字、请求命令字或屏蔽命令字时,对其中的最低两位(D1D0)进行译码,以确定通道号。A3~A0与IOR、IOW配合可以组合成各种操作命令。
内部寄存器 8237A内部包含4个独立的通道,每个通道包含两个16位的地址寄存器(基地址寄存器、当前地址寄存器)、两个16位的字节计数器(基字节计数器、当前字节计数器)、一个6位的方式寄存器、一个DMA请求触发器和一个DMA屏蔽触发器。 4个通道共用一个8位的命令寄存器、一个8位的状态寄存器、一个8位暂存寄存器、一个4位屏蔽寄存器和一个4位请求寄存器。 上述这些寄存器都是可编程的,另外还有不可编程的字节数暂存器和地址暂存器等寄存器。
1. 请求与响应信号 • DREQ0~DREQ3:DMA通道请求。当外设需要请求DMA服务时,将DREQ信号置成有效电平,并要保持到产生响应信号。 • HRQ:总线请求。8237A输出有效的HRQ高电平,向CPU申请使用系统总线。 • HLDA:总线响应。8237A接受来自CPU的响应信号HLDA,取得了总线的控制权。 • DACK0~DACK3:DMA通道响应。8237A使请求服务的通道产生相应的DMA响应信号。
2. DMA传送控制信号 • A0~A7:地址线。输出低8位存储器地址。 • DB0~DB7:数据线。输出高8位存储器地址;存贮器与存贮器的传送期间,用于数据传送。 • ADSTB:地址选通。DMA传送开始时,输出高有效,把在DB0~DB7上输出的高8位地址锁存在外部锁存器中。 • AEN:地址允许。输出高有效,将锁存的高8位地址送入系统总线,与芯片此时输出的低8位地址组成16位存储器地址。
2. DMA传送控制信号(续) • MEMR:存储器读。有效将数据从存储器读出 • MEMW:存储器写。有效将数据写入存储器 • IOR:I/O读。有效将数据从外设读出 • IOW:I/O写。有效将数据写入外设 • READY:准备好。DMA传送的S3下降沿检测到为低时,插入等待状态Sw,直到READY为高才进入第4个时钟周期S4。 • EOP:过程结束。DMA传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结DMA传送。
3. 处理器接口信号 • DB0~DB7:数据线。用于8237A与微处理器进行数据交换。 • A0~A3:地址线。用以选择芯片内部寄存器。 • CS:片选。低有效时,微处理器与8237A通过数据线通信,主要完成对8237A的编程。 • IOR:I/O读。读取8237A内部寄存器。 • IOW:I/O写。写入8237A内部寄存器。 • CLK:时钟。控制芯片内部操作和数据传输。 • RESET:复位。使8237A处于初始状态。
8237A的两种工作状态 8237A具有两种工作状态 • 空闲周期: 作为接口电路,受CPU控制的工作状态 • 有效周期: 作为DMAC控制DMA传送的工作状态 于是,引脚分成两种作用
三、 8237A的寄存器 • 8237A共有10种内部寄存器,对它们的操作有时需要配合3个软件命令 • 8237A的“软件命令” • 不需要通过数据总线写入控制字 • 直接由地址和控制信号译码实现 全部都用地址A0~A3区分
1. 当前地址寄存器 • 存放DMA传送过程中的内存地址,每次传送一个字节后,地址自动加1(或减1),它的初值和“基地址寄存器”的内容相同。两者由CPU同时写入统一端口。自动预置时,EOP信号使当前地址寄存器的内容重新预置为基地址值,可读、可写。 • 该寄存器的值减至0,再减1(从0减到FFFFH)时,终止计数
2. 当前字节数寄存器 • 保持DMA传送的剩余字节数 • 每次传送后,该寄存器的值减1 • 这个寄存器的值可由CPU写入和读出 • 该寄存器的值减至0,再减1(从0减到FFFFH)时,终止计数 传送N个字节,初始值为N-1
3、基地址寄存器 • 存放本通道DMA传送时要控制的存储区的首地址或末地址。在初始化时,由CPU以先低位字节后高位字节顺序与当前地址寄存器的值一起被写入;数据传送过程中,基地址寄存器的内容不变。在自动预置方式下,当EOP有效时,8237A将基地址寄存器的内容重新装入“当前地址寄存器”。只能写,不能读。
4、基字节数寄存器 • 存放本通道DMA传送过程中的总字节数。在初始化时,由CPU以先低位字节后高位字节顺序写入;传送过程中,基本字节计数器的内容不变。其作用是在自动预置时,将它的内容重新装入“当前字节计数器”。只能写,不能读。
5. 命令寄存器 • 存放8237A的命令字 • 设置8237A芯片的操作方式 • 影响每个DMA通道 • 复位时,命令寄存器清零
命令字格式 0 禁止存储器之间传送 1 允许存储器之间传送 0 固定优先权 1 循环优先权 0 允许通道0地址改变 1 禁止通道0地址改变 × 若D0=0 0 滞后写 1 扩展写 × 若D3=1 0 允许8237工作 1 禁止8237工作 0 DREQ高有效 1 DREQ低有效 0 正常时序 1 压缩时序 × 若D0=1 0 DACK低有效 1 DACK高有效
禁止/允许存储器到存储器传送方式 • 当进行存储器之间的数据传送时,8237A约定:由通道0提供源地址,通道1提供目的地址,并把准备传送的字节数写入通道l的字节计数器。存储器到存储器传送方式下,每传送一个字节需要两个总线周期,第一个总线周期把源地址单元的数据读入8237A的暂存器,第二个总线周期把暂存器的内容放到数据总线上,在写信号的控制下,写入目的地址单元。然后两通道的地址各自加1或减1。通道1的字节计数器减1,直到产生EOP信号时,结束DMA方式。
禁止/允许通道0地址保持不变 在存储器向存储器传送时, D1=1,保持源(通道0)地址不变,这样就可以把某个源地址单元的数据写到不同的目的地址单元中。 • 正常/压缩时序 8237A有两种工作时序。当D3=0时,选择正常时序,每传输一个数据字节一般用S2、S3、S4,3个状态周期。当D3=1时,选择压缩时序 ,每传输一个数据字节只需S2、S4,2个状态周期。此时,S2状态修改低8位地址,把读和写操作都压缩在S4状态中完成。如果系统各部分的速度比较高,在DMA期间,便可用压缩时序,这样可提高DMA的传输速率。但命令字的D0=1(存储器到存储器传送)时,不能用压缩时序
固定/循环优先级 固定优先级时,通道0的优先级最高,通道3的优先级最低;循环优先级时,每次DMA操作后,各个通道的优先级都发生变化。已服务过的通道的优先级变为最低,而它的下一个通道的优先级变为最高,如此循环。 • 注意:DMA的优先级排序只是用来决定同时请求DMA服务的通道的响应次序,而任何一个通道一旦进入DMA服务后,其他的通道必须等到该通道的服务结束后,才可进行DMA服务,这与中断的嵌套处理不同。
扩展写 扩展写是把在正常时序下在S4状态下出现的写信号(IOW或MEMW),提前(扩展)到S3状态,与写信号同时变的有效,写信号被扩展到2个时钟周期。这样可以使写入设备有更多的写入时间。当命令字的D5=1时,就采用扩展写方式。但命令字的D3=1(采用压缩时序)时,不能扩展写。
6. 工作方式寄存器 • 存放相应通道的方式控制字 • 选择某个DMA通道的工作方式 • 其中用最低2位选择哪个DMA通道
方式字格式 0 地址增量(加1) 1 地址减量(减1) 00 DMA校验 01 DMA写 10 DMA读 11 非法 ×× 若D7D6=11 00 通道0 01 通道1 10 通道2 11 通道3 0 禁止自动预置 1 允许自动预置 00 请求方式 01 单字节方式 10 数据块方式 11 级联方式
DMA传送类型 • DMA读——把数据由存储器传送到外设 • 由MEMR有效从存储器读出数据,由IOW有效把这一数据写入外设 • DMA写——把外设输入的数据写入存储器 • 由IOR有效从外设输入数据,由MEMW有效把这一数据写入存储器。 • DMA校验——空操作 • 用于对器件进行测试 • 存储器和I/O控制线保持无效,不进行传送
自动预置方式 • 每当DMA过程结束信号EOP产生时(不论是内部终止计数还是外部输入该信号),用基地址寄存器和基字节数寄存器的内容,使相应的现行寄存器恢复为初始值,包括恢复屏蔽位、允许DMA请求,这样就作好了下一次DMA传送的准备。
DMA传送方式-单字节方式 • 每次DMA传送时仅传送一个字节 • 传送一个字节之后,字节数寄存器减1,地址寄存器加1或减1,HRQ变为无效 • 8237A释放系统总线,将控制权还给CPU • 若传送后使字节数从0减到FFFFH,则终结DMA传送或重新初始化 • 特点: • 一次传送一个字节,效率略低 • DMA传送之间CPU有机会重新获取总线控制权
DMA传送方式-数据块方式 • 由DREQ启动就连续地传送数据,直到字节数寄存器从0减到FFFFH终止计数,或由外部输入有效信号终结DMA传送 • DREQ只需维持有效到DACK有效 • 特点: • 一次请求传送一个数据块,效率高 • 整个DMA传送期间CPU长时间无法控制总线(无法响应其他DMA请求、无法处理中断等)
DMA传送方式-请求方式 • DREQ信号有效就连续传送数据 • DREQ信号无效,DMA传送被暂时中止,8237A释放总线,CPU可继续操作 • DMA通道的地址和字节数的中间值仍被保持 • DREQ信号再次有效,DMA传送就继续进行 • 如果字节数寄存器从0减到FFFFH,或者由外部送来一个有效的信号,将终止计数 • 特点: • DMA操作可由外设利用DREQ信号控制传送的过程
DMA传送方式-级连方式 • 用于通过多个8237A级连以扩展通道 • 第二级的HRQ和HLDA信号连到第一级某个通道的DREQ和DACK上 • 第二级芯片的优先权等级与所连通道的优先权相对应 • 第一级只起优先权网络的作用,实际的操作由第二级芯片完成
7. 请求寄存器 • 存放软件DMA请求状态 • 除硬件DMA请求外,当工作在数据块传送方式时也可以通过软件发出DMA请求 • 若是存贮器到存贮器传送,则必须由软件请求启动通道0
请求字格式 00 通道0 01 通道1 10 通道2 11 通道3 任意 0 复位 1 置位
8. 屏蔽寄存器 • 控制外设硬件DMA请求是否被响应(为0允许),各个通道互相独立。3种方法: • 单通道屏蔽字只对一个DMA通道屏蔽位进行设置 • 主屏蔽字对4个DMA通道屏蔽位同时进行设置 • 清屏蔽寄存器命令使4个屏蔽位都清零(允许) • 复位使4个通道全置于屏蔽状态 • 当一个通道的DMA过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次DMA传送。
单通道屏蔽字格式 任意 00 通道0 01 通道1 10 通道2 11 通道3 0 清屏蔽位 1 置屏蔽位
主屏蔽字格式 Di=0 清通道I屏蔽位Di=1 置通道I屏蔽位 任意
9. 状态寄存器 • 可由CPU读取 • 低4位反映读命令这个瞬间每个通道是否产生TC(为1,表示该通道传送结束) • 高4位反映每个通道的DMA请求情况(为1,表示该通道有请求) • 状态位在复位或被读出后,均被清零
状态字格式 1: 通道1已达TC 1: 通道1有请求 1: 通道2已达TC 1: 通道2有请求 1: 通道3已达TC 1: 通道3有请求 1: 通道0已达TC 1: 通道0有请求
10. 临时寄存器 • 在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元 • 传送完成,临时寄存器只会保留最后一个字节,可由CPU读出 • 复位使临时寄存器内容为零
11、软件命令 • 82C37A DMA控制器有3条特殊的“软命令”,软命令就是只要对特定的地址进行一次写操作即可(写任何数都可以)。