首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DMA 是什么以及如何工作的(3)

DMA 是什么以及如何工作的(3)

[url=]9.1.4 DMA 编程[/url]  被编程的 DMA 通道在装载任何设定之前应该总是被“屏蔽”。因为硬件可能会意想不到的给那个通道发送 DRQ 信号,而且 DMA 会回应,甚至在全部参数还没有被装载或者更新之前。
  一旦被屏蔽,主机必须指出数据传输的方向(内存到 I/O 或者 I/O 到内存), DMA 操作使用什么模式(Single, Block, Demand, Cascade 等等),而且最后还要明确地址和数据的长度。数据的长度比你希望 DMA 传输的数据的长度要短。地址和 数据长度的 LSB 和 MSB被写到同一个 8比特的 I/O 端口,因此另一个必须被提前 写入数据以保证 DMA 能接受第一个字节为 LSB 而第二个字节为 MSB。
  然后,确认更新页面计数器,这个计数器不在 DMA 里面而且也必须从不同的 I/O 端口去访问。
  一旦所有的设定准备好了,DMA 通道就会被打开。DMA 通道已经被确认 “武装”好了,将回应通道上传来的 DRQ 信号。
  请参考硬件数据书籍以获得详细的 8237 编程细节。可能你还要参考一些 PC 系统 I/O 端口映射的资料。这些资料描述了 DMA 和页面寄存器的具体位置。以下是一个完整的端口映射表格。
[url=]9.1.5 DMA 端口映射[/url]  所有基于 IBM-PC 和 PC/AT 的系统的 DMA 都位于相同的 I/O端口。以下是一个完整的列表。在非 AT 的设计中的 DMA 控制器 2 使用的端口是未定义的。
[url=]9.1.5.1 0x00-0x1f DMA 控制器 1 (通道 0, 1, 2 和 3)[/url]  DMA 地址和计数寄存器
0x00通道 0 开始地址
0x00通道 0 目前地址
0x01通道 0 初始字数统计
0x01通道 0 剩余字数统计
0x02通道 1 开始地址
0x02通道 1 目前地址
0x03通道 1 初始字数统计
0x03通道 1 剩余字数统计
0x04通道 2 开始地址
0x04通道 2 目前地址
0x05通道 2 初始字数统计
0x05通道 2 剩余字数统计
0x06通道 3 开始地址
0x06通道 3 目前地址
0x07通道 3 初始字数统计
0x07通道 3 剩余字数统计

  DMA 指令寄存器
0x08指令寄存器
0x08状态寄存器
0x09需求寄存器
0x09-
0x0a单屏蔽寄存比特位
0x0a-
0x0b模式寄存器
0x0b-
0x0c清除 LSB/MSB Flip-Flop
0x0c-
0x0d主 清除/重置
0x0d临时寄存器 (在较新的版本中没有)
0x0e清除屏蔽寄存器
0x0e-
0x0f写入所有屏蔽寄存器比特位
0x0f读出所有屏蔽寄存器比特位 (只有 Intel 82374 有)


[url=]9.1.5.2 0xc0-0xdf DMA 控制器 2 (通道 4, 5, 6 和 7)[/url]  DMA 地址和计数寄存器
0xc0通道 4 开始地址
0xc0通道 4 目前地址
0xc2通道 4 初始字数统计
0xc2通道 4 剩余字数统计
0xc4通道 5 开始地址
0xc4通道 5 目前地址
0xc6通道 5 初始字数统计
0xc6通道 5 剩余字数统计
0xc8通道 6 开始地址
0xc8通道 6 目前地址
0xca通道 6 初始字数统计
0xca通道 6 剩余字数统计
0xcc通道 7 开始地址
0xcc通道 7 目前地址
0xce通道 7 初始字数统计
0xce通道 7 剩余字数统计

  DMA 指令寄存器
0xd0指令寄存器
0xd0状态
0xd2需求寄存器
0xd2-
0xd4单屏蔽寄存器比特位
0xd4-
0xd6模式寄存器
0xd6-
0xd8清除 LSB/MSB Flip-Flop
0xd8-
0xda主 清除/重置
0xda临时寄存器 (Intel 82374 没有)
0xdc清楚屏蔽寄存器
0xdc-
0xde写所有屏蔽寄存器比特位
0xdf读所有屏蔽寄存器比特位 (只有 Intel 82374 有)


[url=]9.1.5.3 0x80-0x9f DMA 页面寄存器[/url]
0x87读/写通道 0 低位 (23-16) 页面寄存器
0x83读/写通道 1 低位 (23-16) 页面寄存器
0x81读/写通道 2 低位 (23-16) 页面寄存器
0x82读/写通道 3 低位 (23-16) 页面寄存器
0x8b读/写通道 5 低位 (23-16) 页面寄存器
0x89读/写通道 6 低位 (23-16) 页面寄存器
0x8a读/写通道 7 低位 (23-16) 页面寄存器
0x8f读/写低位页面刷新
继承事业,薪火相传
返回列表