网站大量收购闲置独家精品文档,联系QQ:2885784924

微机原理及应用CH11 DMA技术与DMA控制器.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微机原理及应用CH11DMA技术与DMA控制器要点

命令寄存器 命令寄存器是四个通道公用的一个8位寄存器,用以控制整个8237A的操作。即一片8237A只有一个命令寄存器,其内容对四个通道都有效。 命令字的格式如图11.6所示。 图11.6 8237A的命令字格式 请求寄存器 8237A的每个通道除了可以响应硬件的DMA请求信号DREQ外,当其工作在块传送方式时也可以响应由软件发出的DMA请求。 软件的DMA请求是通过使相应通道的“请求位”置位来实现的,它等效于外部产生一个有效的DREQ信号。 8237A每一个通道有一位“请求位”,四个通道的请求位构成一个4位的请求寄存器。 请求寄存器的命令字(请求命令字)格式如图11.8所示。 图11.8 8237A的请求寄存器的命令字格式 屏蔽寄存器 8237A每个通道有一位“屏蔽位”,当其通道的“屏蔽位”置1时,则外部对应的DREQ信号被屏蔽,不予响应,从而禁止了该通道的DMA操作。 四个通道的“屏蔽位”构成一个4位的屏蔽寄存器。 有两种屏蔽命令字格式, 单独对某一个通道的屏蔽位进行置位或复位,如图11.9(a)所示; 另一种是可以同时设定四个通道的屏蔽位,也称综合屏蔽命令字,如图11.9(b)所示。 (a)单通道屏蔽字格式 (b)四通道屏蔽字格式 图11.9 8237A屏蔽字的两种格式 状态寄存器 8237A有一个可由CPU读取的状态寄存器,如图11.10所示。 图11.10 8237A的状态寄存器格式 现行地址寄存器 每一个通道有一个16位的现行地址寄存器。在这个寄存器中保持用于DMA传送的地址值,在每次传送后这个寄存器的值自动增量或减量。在传送过程中地址的中间值就保存在这个寄存器中。 这个寄存器的值可由CPU写入或读出(分两次连续操作)。若编程为自动初始化,则在每次EOP#后,初始化为它的初始值(即保存在基地址寄存器中的值)。 现行字节数寄存器 每个通道有一个16位的现行字节数寄存器,它保持着要传送的字节数,在每次传送后此寄存器减量。在传送过程中字节数的中间值保存在这个寄存器中。当这个寄存器的值减为零,TC将产生。这个寄存器的值在程序状态可由CPU读出和写入。在自动初始化情况下,当EOP#产生时,它的值可初始化到起始状态。 基地址和基字节数寄存器 每一个通道有一对16位的基地址和基字节数寄存器,它们存放着与现行寄存器相联系的初始值。在自动初始化情况下,这两个寄存器中的值用来恢复相应的现行寄存器中的初始值。在程序状态,基寄存器与它们相应的现行寄存器是同时由CPU写入的。这些寄存器的内容不能读出。 临时寄存器 在存储器到存储器的传送方式下,临时寄存器保存从源单元读出的数据,又由它写入目的单元。在传送完成时,它保留传送的最后一个字节,此字节可由CPU读出。READY信号使其复位。 软件命令 8237在编程状态还有两种软件命令,软件命令不需要通过数据总线写入控制字,而由8237直接对地址和控制信号进行译码。有两种软件命令: (1)清除高/低触发器 8237内部的高/低触发器用以控制写入或读出16位寄存器的高字节还是低字节。如后表中所示,若触发器为零,则操作的为低字节;为“1”,则操作的为高字节。在复位以后,此触发器被清零,每当对16位寄存器进行一次操作,则此触发器改变状态。用此命令使它清零,以改变下面要进行的读/写操作的顺序。 (2)主清除命令 这个命令与硬件的RESET信号有相同的功能,即它使命令、状态、请求、临时寄存器以及内部的高/低触发器清零;使屏蔽寄存器各位全置为“1”(即屏蔽状态);使8237进入空闲周期,以便进行编程。 A3 A2 A1 A0 通道号 IOR# IOW# 0 0 0 0 0 0 0 1 0 读当前地址寄存器 读当前字节计数器 写基本(当前)地址寄存器 写基本(当前)字节计数器 0 0 1 0 0 0 1 1 1 读当前地址寄存器 读当前字节计数器 写基本(当前)地址寄存器 写基本(当前)字节计数器 0 1 0 0 0 1 0 1 2 读当前地址寄存器 读当前字节计数器 写基本(当前)地址寄存器 写基本(当前)字节计数器 0 1 1 0 0 1 1 1 3 读当前地址寄存器 读当前字节计数器 写基本(当前)地址寄存器 写基本(当前)字节计数器 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 公 共 读状态寄存器 —— —— —— —— 读暂存寄存器 —— —— 写控制寄存器 写请求寄存器 写屏蔽寄存器某一位 写方式寄存器 清除高/低触发器 主清除(软件复位) 清除屏蔽寄存器 写屏蔽寄存器所有位 2.8237A编程步骤: 8237A的编程通常

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档