8257 DMA 控制器的工作原理
最初,处理器对 8257 进行编程。在此,处理器充当主控器,而 8257 则以从机模式工作。通过从数据传输内存的起始地址写入地址寄存器来获取程序通道,并通过使用直接内存访问方案写入计数器寄存器,其中包含要传输的字节数。由最低有效 14 位指定的信息字节数。而最高有效 2 位指示要发生的哪种数据传输类型。之后,处理器写入控制端口,英特尔将其称为特殊模式寄存器。它指定启用的 DMA 通道,并区分它们是固定还是旋转的。当 I/O 端口需要 DMA 服务时,会激活通道的 DRQ 输入,而 8257 则依次激活 HRQ。HRQ 的输出再次连接到 8085 的 HOLD 输入,通过 DMA 请求激活 8085 的 HOLD 输入。然后 8085 完成当前机器周期,再次进入 HOLD 状态。在此,地址引脚 HOLD 状态地址引脚,RD*、WR* 和 IO/M* 引脚处于三态。在此,8085 与系统的其余部分断开连接。它声明 HLDA 输出由 HOLD 状态激活。
8057 之前是 8085 的从机,通过接收来自 8085 的命令,它成为计算机的主控器。
DMA 数据传输分类如下:
- 单字节传输
- 短突发模式
- 长突发模式
- 单字节传输 - 一些 I/O 端口(如英特尔 8272)用于为每个 DMA 数据传输字节生成 DMA 请求。对于每个数据传输字节,执行以下步骤。
英特尔 8272 激活 8257 的 DRQ 输入。
英特尔 8257 通过激活 HRQ 输出激活 8085 的 HOLD 输入。
英特尔 8085 进入 HOLD 状态,暂停程序执行并激活 HLDA 输出。
英特尔 8257 激活 DACK* 输出。
英特尔 8257 生成执行字节数据传输所需的控制信号。AR 增加,CR 减少。
英特尔 8272 取消激活 DRQ 请求。
英特尔 8257 通过取消激活 HRQ 输出取消激活 8085 的 HOLD 输入。
英特尔 8085 退出 HOLD 状态并取消激活 HLDA 输出。
英特尔 8085 恢复暂停的程序一段时间。
英特尔 8272 重新激活 DRQ,并重复该序列,直到达到 TC。
短突发模式 - 一些 I/O 端口(如英特尔 8275)会生成 DRQ 并保持其激活状态,直到传输多个字节。根据 8275 的编程方式,8257 的 DRQ 输入保持激活状态,最多可激活八次 DACK*。这会导致 8 字节的 DMA 数据传输。在相当长的一段时间内,DRQ 输出保持非活动状态。8257 的 HRQ 输出变为非活动状态,导致 8085 退出 HOLD 状态并进入活动状态,在此期间。然后根据上述序列,重复该操作,直到所有字节传输完毕并激活 TC 输出。这种数据传输称为短突发模式传输,因为 DRQ 输入保持激活状态,直到传输一小块数据。此方案用于速度适中的外设。
长突发模式 - 在此模式下,只有在传输所有字节后,I/O 端口才会撤回 DRQ 请求并激活 TC 输出。但 DACK* 输出会为每个数据传输字节脉冲。此方案用于高速外设,如硬盘控制器。