Skip to content

Latest commit

 

History

History
255 lines (164 loc) · 5.75 KB

File metadata and controls

255 lines (164 loc) · 5.75 KB

8237A DMA

DMAC

CPU与8237A通过8位数据总线交换信息

内部组成

  • 每个8237A芯片有4个DMA通道,就是有4个DMA控制器
  • 每个DMA通道具有不同的优先权
  • 每个DMA通道可以分别允许和禁止
  • 每个DMA通道有4种工作方式
  • 一次传送的最大长度可达64KB
  • 多个8237A芯片可以级连,扩展通道数

内部组成

  • 通道寄存器
  • 控制和状态寄存器
DREQ0-3 HRQ HLDA DACK0-3 ADSTB AEN
DMA通道请求 总线请求 总线响应 DMA通道响应 地址选通 地址允许

地址选通与地址允许

  • ADSTB:地址选通。DMA传送开始时,输出高有效,把在DB0~DB7上输出的高8位地址锁存在外部锁存器中。
  • AEN:地址允许。输出高有效,将锁存的高8位地址送入系统总线,与芯片此时输出的低8位地址组成16位存储器地址。

寄存器

10种内部寄存器

配合3个软件命令操作

“软件命令”

  • 不需要通过数据总线写入控制字
  • 直接由地址和控制信号译码实现

现行地址寄存器

保存DMA传送的当前地址值

每次传送后递增/减

可由CPU读写

现行字节数寄存器

传送N个字节 初始值为N-1

DMA传送剩余字节数

每次传送递减

可由CPU读写

值减为0后 再递减为FFFFH 终止计数

读写通道寄存器

8237A内含一个高/低触发器 控制读写通道寄存器的高低字节

0 低字节

1 高字节

复位后 触发器为0

模式寄存器

通道的方式控制字

最低二位选择通道

D7 D6 D5 D4 D3 D2 D1 D0
传送方式 地址增量 自动初始化 传送类型 通道

传送方式:

模式
00 请求
01 单字节
10 数据块
11 级联

地址增量

0 自增

1 自减

工作方式

传送类型
00 DMA校验
01 DMA写
10 DMA读
11 非法

命令寄存器

存放8237A的命令字

影响每个DMA通道

复位清零

D2=1设置8237A为DMAC

7 6 5 4 3 2 1 0
标志 DACK DREQ 优先权 时序 DMAC 通道0地址改变 存储器间传送
1 高有效 低有效 扩展写 循环 压缩 禁止DMAC工作 禁止 允许
0 滞后写 固定 正常

请求寄存器

存放DMA请求状态

D2 为置位复位

末两位为通道

屏蔽寄存器

主屏蔽

Di为通道i的屏蔽位

单通道屏蔽

D2 为屏蔽位

末两位为通道

状态寄存器

可由CPU读取

低4位:读命令瞬间每个通道是否产生TC(1表示通道传送结束)

高4位:每个通道的DMA请求情况(1表示通道有请求)

复位或读出后清零

临时寄存器

软件命令

$A_3A_2A_1A_0$

  • 清除高/低触发器软件命令
    • $A_3A_2A_1A_0$=1100,使高/低触发器清零
  • 主清除命令
    • $A_3A_2A_1A_0$=1101,使高/低触发器清零
    • 还使命令、状态、请求、临时寄存器清零
    • 使屏蔽寄存器置为全1(禁止DMA请求)
    • 主清除命令与硬件的RESET信号具有相同的功能
  • 清屏蔽寄存器命令
    • $A_3A_2A_1A_0$=1110,使4个屏蔽位都清零(允许DMA请求)

工作

状态

空闲周期:作为接口电路 受CPU控制的工作状态

有效周期:作为DMAC控制DMA传送的工作状态

方式

DMA传送方式

  • 请求传送方式

    • DREQ有效就传送 无效就暂时中止
    • 直到字节数寄存器为FFFFH或外部信号终结
    • 可由外设利用DREQ控制传送过程
  • 单字节传送方式

    • 每次传送一个字节后 交还系统总线控制权
    • 效率低
  • 数据块传送方式

    • DREQ启动就传送数据
    • 直到字节数寄存器为FFFFH或外部信号终结
    • 效率高
    • CPU长时间无法控制总线
  • 级联方式

    • 第二级的HRQHLDA连到第一级某通道的DREQDACK
    • 实际操作由第二级芯片完成
    • 第二级芯片优先权与所连2通道优先权对应

DMA传送类型

  • DMA读
    • 存储器->外设
    • MEMR* IOW*
  • DMA写
    • 外设->存储器
    • IOR* MEMW*
  • DMA检验:空操作
    • 8237A不进行检验
    • 外设可以进行DMA检验
    • 存储器和IO控制线无效 不传送

DMA通道优先权

  • 固定优先权:0 1 2 3
  • 循环优先权:最近服务的优先最低

时序

状态 任务/工作
$S_1$ 输出16位存储器地址
$S_2$ 输出DMA响应信号和控制信号
$S_3$和$S_w$ 检测数据传送是否能够完成 决定是否插入等待状态$S_w$
$S_4$ 完成数据传送

编程

初始化编程

  • 写入命令寄存器
  • 可先输出主清除命令 进行软件复位
  • 然后写入命令字