发新话题
打印

8237A的寄存器组

8237A的寄存器组


8237A的寄存器组
4 x$ L' ?9 |! g    8237A内部寄存器可以分成两类。一类是通道寄存器,即每个通道都有的现行地址寄存器、现行字节数寄存器、基地址寄存器和基字节数寄存器,这些都是16位寄存器。另一类是控制和状态寄存器,包括模式寄存器(6位寄存器,4个通道各有一个)、命令寄存器(8位)、状态寄存器(8位)、屏蔽寄存器(4位)、临时寄存器(8位)。这两类寄存器在寻址时由最低4位地址A3~A0区分。 8 `2 b' U6 i+ a
    1)现行地址寄存器 $ _+ H9 {+ Y9 \, ^5 r
    该寄存器用来寄存DMA传送的当前存储器地址,每次传送后自动加l或减1。CPU可读或写该寄存器。 $ H9 j6 V) p, H+ t6 E3 v: {4 c. L
  2)现行字节数寄存器 ! N  v3 X' Y' n$ o* L
  该寄存器保存还要传送的字节数,每次传送后减1。当其值从0减到FFFFH时,TC将产生。该寄存器的值可由CPU写入或读出。 , h; m2 w& I2 Y! s2 b0 P: [) Y
  3)基地址寄存器和基字节数寄存器 4 C/ O5 J$ m1 z" g) I
  这两个“基”寄存器存放着相对应的“现行”寄存器的初始值。在初始化时,分别与相对应的“现行”寄存器被CPU写入相同的值,但“基”寄存器的值一直保持不变,且不能读出。 " [% z* x0 ^1 p
如果编程为自动初始化,则在每次产生TC后,“基”寄存器的值被用来作为相对应的“现行”寄存器的初始值。
3 N+ f; M4 W& |) o$ q  需要指出,由于字节数寄存器从0减到FFFFH时,DMA传送才终结。所以,实际传送的字节数要比写入字节数寄存器的值多1。因此,如果需要传送N个字节,则编程写入字节数寄存器的值应为N-1。
- _6 E( j) R! v& P; G5 d6 c* w  4)模式寄存器 ' o8 O  v/ q' B  T, C# I: M1 b* \
  它寄存相应通道的模式控制字。模式控制字的格式参看图6.35,其中用最低2位选择写入哪个通道的模式寄存器。D4位用来允许或禁止自动初始化。所谓自动初始化,是指每当EOP(上划线)产生时(不论是内部的TC引起还是由外部输入),都用基地址寄存器和基字节数寄存器的内容,使相应的“现行”寄存器恢复为初始值。
) J) y; l: R, d这样就为下一次DMA传送做好了准备。" [  t3 _$ z+ ?9 W7 _
  o' x, |" J$ j1 C5 z& D
8 M# b# l" n7 m) @" Z: H

" N6 e3 l; P$ C5 I( `9 q) r2 x( M0 z7 L' X3 w$ W, O' b! X
! w3 V, b) w" |" a& z4 }) S
  5)命令寄存器
1 o  }' v, [9 u" _  H  v6 l  该寄存器用来寄存CPU写入控制8237A操作的命令字,复位时被清0。命令字的格式如图6.36所示。' }/ }9 O/ c1 r! |

8 }8 I" V- I8 u' k' k) c$ A) l* D( J( a" C. q
+ Z) u  m9 F7 q* a$ ?
  F$ J; ]% t6 t2 `8 T3 s3 ^
9 w' i; i" K6 n6 w% C
    D4位用来规定优先权模式。8237A有两种优先权管理模式:固定优先权模式和循环优先权模式。当采用固定优先权模式时,4个通道的优先权是固定的,即通道0优先权最高,通道1次之,通道2再次之,通道3最低。当采用循环优先权模式时,本次循环中最近一次服务的通道在下次循环中优先权变成最低,而原本优先级仅次于它的通道将具有最高优先权,其他通道也依次改变优先权。循环优先权模式可有效避免一个通道独占系统总线而其他通道的DMA请求得不到及时响应的情况。需要指出,不论采用哪一种优先权模式,经判优某个通道获得服务后,其他通道无论优先权高低,均被禁止,直到已服务的通道结束传送为止。
+ j; A. H$ x. ^6 V    DO位用来禁止或允许存储器到存储器的传送方式。若选择该方式,则用通道0的现行地址寄存器存放源地址。此时,若D1位也置位,则在整个存储器到存储器的传送过程中始终保持同一源地址,以便实现将一个目的存储区域的所有存储单元都置成同一个值。当D0位为0时,D1位不起作用。 0 ?/ Q" ~" _: L3 S4 I) G$ U- e
    在不影响系统性能的情况下,为获得较高的传输效率,8237A能将每次传输时间从正常时序的3个时钟周期变为压缩时序的2个时钟周期。在正常时序时,命令字的D5选择滞后写或扩展写。其不同之处在于写信号是滞后到S4状态有效(滞后写)还是扩展到S3状态有效(扩展写)。 ) w: T8 _; r# X2 Z2 }4 {# e; b& j
  6)请求寄存器   
5 y, A! V$ J8 ^( @6 d2 M8 ]! c  J4 F/ m" F

! b( I  T# G3 Z* }; ]8 c. z该寄存器为4位,寄存DMA请求DREQ,每位对应一个通道。DREQ请求可由硬件DREQ线引入,也可由软件发出DREQ请求(仅限于数据块传送时可用)。用软件发DREQ请求需要使用请求字,请求字的格式如图6.37所示。其中D1、D0两位决定写入的通道,D2位决定是请求(置位)还是复位。 5 B  }& ]+ G! v! S$ K$ y% U5 ^, l
    注意,对于存储器到存储器的传送,必须用软件请求启动通道0。 0 L& @# ^5 R& n% ]# H7 `( O
  7)屏蔽寄存器
! t9 Y- k: ?% j  该寄存器用来对某个。DMA通道设置为屏蔽或允许。8237A在复位后,4个通道全被置于屏蔽状态。所以,在编程时必须根据需要复位屏蔽位,以允许相应的通道产生DMA请求。还有一点需注意,当一个通道进行DMA传送后,产生面EOP(上划线)信号,如不是工作在自动初始化方式,则这一通道的屏蔽位被置位,必须再次编程为允许,才能进行下一次DMA传送。 1 e7 U& X8 F$ w4 R2 i6 [) M# ]
    对屏蔽寄存器的写人有两种格式:单通道屏蔽字和主屏蔽字,如图6.38所示。单通道屏蔽字一次仅能设置一个通道,而主屏蔽字可同时对4个通道进行设置。
- y3 z5 v9 f" Z$ B; b9 T- W, N  {" e( }, k+ m9 t

% b8 O% q6 u  c* e- h, U% y" B# ?* O9 H3 e) h& R4 c3 `( d

+ r* j- k9 k: D
. m7 M6 b  ?: _  8)状态寄存器 - f/ k7 x6 J7 v9 R+ s% T( R" a% W
  状态寄存器是为CPU能了解8237A的内部状态而设置。它的高   



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题