1 / 53

第 8 章 DMA 控制器

第 8 章 DMA 控制器. 内容 DMA 控制器的编程结构; DMA 控制器的作为主模块和从模块时的差别 8237A 的工作模式; 8237A 的时序; 结合例子了解 8237A 的编程方法。. DMAC 在系统中. CPU. 系统总线. DMAC. 存储器. 设备 接口. DMAC 在系统中(主). CPU. 系统总线. 存储器. 设备 接口. DMAC. DMAC 在系统中(从). DMA 控制器一般结构. 8237 A 原理. 4 个通道 控制寄存器 状态寄存器 每个通道 模式寄存器 16 位地址寄存器

lave
Download Presentation

第 8 章 DMA 控制器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 DMA控制器 内容 • DMA控制器的编程结构; • DMA控制器的作为主模块和从模块时的差别 • 8237A的工作模式; • 8237A的时序; • 结合例子了解8237A的编程方法。

  2. DMAC在系统中 CPU 系统总线 DMAC 存储器 设备 接口

  3. DMAC在系统中(主) CPU 系统总线 存储器 设备 接口 DMAC

  4. DMAC在系统中(从)

  5. DMA控制器一般结构

  6. 8237A原理 • 4个通道 • 控制寄存器 • 状态寄存器 • 每个通道 • 模式寄存器 • 16位地址寄存器 • 16位数据字节计数器 引脚?

  7. DMA工作时(输入) DMAC AB(A0-3, A4-7,DB0-7) MEMORY MEMW* DB IOR* 外设接口 每次传输一个字节 字节计数器-1 地址寄存器+1/-1 直到计数器减到0,DMA结束 设备 (磁盘驱动器)

  8. DMA工作时(输出) DMAC AB(A0-3, A4-7,DB0-7) MEMORY MEMR* DB IOW* 外设接口 每次传输一个字节 字节计数器-1 地址寄存器+1/-1 直到计数器减到0,DMA结束 设备 (磁盘驱动器)

  9. 8237A工作 • 从模块 • A3-A0:内部寄存器 • CS* • IOR*, IOW* • AEN=0 • DB7~0:数据总线 • 主模块 • 输出地址 • 低位:A7-A0 • 高位:DB7-DB0 • AEN=1 • IOR*, IOW*, MEMR*, MEMW*(输出)

  10. 工作模式字 • 单字节传输模式 • 块传输模式 • 请求传输模式 • 级联传输模式

  11. 1/4 单字节传输模式 特点 • 传输一个字节 • 字节计数器-1 • 地址寄存器+1/-1 • 8237A放弃总线,CPU得到总线

  12. 2/4 块传输模式 • 连续多个字节传输 • 计数器减到0,EOP*输出0 • 8237A放弃总线

  13. 3/4 请求传输模式 • 与块传输类似 • 每传输一个字节,测试DREQ • 如果DREQ无效,停止传输,测试继续进行

  14. 4/4 级联传输方式

  15. 级联的说明 • 最多5个8237级联 • 最多16个DMA通道 • 一个主8237,4个从8237

  16. 关于地址增减选择 memory • 地址增 每传输一个字节,地址计数器+1,指向存储器的下一个地址 • 地址减 每传输一个字节,地址计数器-1,指向下一个存储器地址 DMA 缓冲区

  17. SI(空闲状态) • 8237作为从模块 • 测试DREQ • 测试CS*

  18. S0:总线请求状态 • DREQ有效 • HREQ有效 • CPU还未响应DMA请求 • S0重复多次,直到CPU响应总线请求

  19. S1:CPU响应总线请求,(DMAC)锁存高8位地址 • ADSTB • DB0~7输出A8~A15 • 注意:需要修改A15~A8时,才有S1状态,否则直接进入S2状态

  20. S2:CPU响应总线请求,DMAC修改存储器的低16位地址S2:CPU响应总线请求,DMAC修改存储器的低16位地址 • DMAC送出16位地址 • DB0~7输出A8~A15 • A0~A7输出低8位地址 • Sw,如果外设速度慢 • 传输数据?

  21. S3:CPU响应总线请求,(DMAC)更新地址 • 普通时序用到S3(送A15..8) • 压缩时序直接进入S4(送A7..0) 普通时序 S2,S3,S4 压缩时序 S2,S4

  22. S4:CPU响应总线请求 模式测试,如 不是块传输模式,且不是请求传输模式, 进入S2

  23. Sw:等待状态 • 如果外部设备比较慢,在S2之后插入等待状态

  24. 8.5控制寄存器-内容 1.控制储存器->

  25. (1)存储器到存储器的传输 • 通道0的地址寄存器存放源地址 • 通道1,地址寄存器,计数器

  26. 存储器中进行数据块的拷贝 源 • 方法 • 1 程序实现:节省硬件,思考:如何实现? • 2 DMA方式:速度快 • 源数据->暂存寄存器 • 暂存寄存器->目的存储器 • 每传输一个字节需要两个总线周期 • 暂存器的地址 传输 目的

  27. (4)关于扩展写信号的功能 • 外部设备快-压缩时序,S2,S4 • 外部设备慢-普通时序,S2,S3,S4 • 外部设备更慢-通过ready信号插入Sw状态 • 有些设备,加宽IOW*, IOR*信号,并使其提前到来

  28. 2. 状态寄存器的格式

  29. 请求标志 • DMA请求产生的方式 • 硬件方式 • DREQ • 软件方式 • 设置请求标志:DMA请求寄存器

  30. 3.DMA请求寄存器和屏蔽寄存器 请求寄存器

  31. DMA的屏蔽 • 使用屏蔽寄存器 • 屏蔽标志:屏蔽单个通道 • 综合屏蔽命令:一次可屏蔽多个通道

  32. DMA屏蔽寄存器(单屏蔽寄存器)

  33. 综合屏蔽命令(全局屏蔽寄存器)

  34. 复位命令 • 复位 • 硬件复位 • 软件复位:向复位端口写0 • MOV AL,0 • MOV DX, BASE+0DH ;复位端口地址 • OUT DX,AL

  35. 6. 8237A各寄存器对应的端口地址 可写的寄存器:8个,每个寄存器对应一个唯一的地址 可读的寄存器:2个,每个寄存器对应一个唯一的地址

  36. 访问地址寄存器和 字节计数器时A3=0

  37. 先后触发器(即字节指针) • 先后触发器(字节指针)的用途 • 8237A数据线8位, • 地址寄存器和字节计数器16位 • 方法 • 先后触发器(字节指针)=0 • CPU先设置寄存器低8位,先后触发器变成1 • CPU设置寄存器高8位,先后触发器变成0 • 为了确保正确操作,设置地址寄存器和字节计数器时,先清除先后触发器。

  38. 例子:设置字节计数器步骤 • 清除先后触发器(字节指针) • 设置计数器低8位 • 设置计数器高8位 • ;下面的程序段设置通道0的字节计数器 • MOV AL,0 • MOV DX,BASE+0CH ;先后触发器(字节指针)的地址 • OUT DX,AL • MOV AX, 2000 • MOV DX, BASE+1;字节计数器(通道0) • OUT DX,AL • OUT DX,AH 思考:设置通道0的基址寄存器

  39. 8237寻址小结 • 寻址内部寄存器的地址线A0~A3 • BASE+0~7:基址寄存器和字节计数器 • BASE+8~15:控制/命令寄存器和状态/暂存器

  40. 8.7 8237的编程和使用 • 使8237停止工作(控制寄存器) • 总清(复位寄存器) • 写地址寄存器(总清时,已清除先后触发器) • 设置工作模式(模式寄存器) • 发控制命令(控制寄存器) • 清除屏蔽(屏蔽标志寄存器) 到此,8237开始工作

  41. 例1:8237A的编程和使用 • IBM PC 8237A的用法 • CH0: DRAM REFRESH(系统板) • CH2: FDISK-RAM(扩展) • CH3: HDISK-RAM(扩展) • CH1: OTHER, SUCH AS NETWORK(扩展) • 固定优先级ch0>ch1>ch2>ch3 • 初始化程序

  42. PC/XT 中的DMA电路

  43. 页面寄存器 • 74LS670 • 页面寄存器的作用 • 20位地址线 • 8237只能输出16位地址线 • 页面寄存器输出高4位地址A16~A19 • 8086系统一共有16个页面,每个页面64Kbyte

  44. PC/XT中的8237 • 端口地址:0000H~000FH • 页面寄存器:74LS670,地址0083H • 阅读程序P269

  45. MOV AL,42H OUT DX,AL MOV AL,43H OUT DX,AL MOV DX,DMA+8 MOV AL,0 OUT DX,AL MOV DX,DMA+0AH OUT DX,AL MOV AL,01 OUT DX,AL MOV AL,02 OUT DX,AL MOV AL,03 OUT DX,AL ;对1-3地址寄存器的值进行测试 MOV DX,DMA+2 MOV CX,0003 READ: IN AL,DX MOV AH,AL IN AL,DX CMP AX,0FFFFH JNZ HHH INC DX INC DX LOOP READ HHH: HLT ;初始化 MOV AL,04 MOV DX,DMA+8 OUT DX,AL MOV AL,00 MOV DX,DMA+0DH OUT DX,AL MOV DX,DMA MOV CX,0004 WRITE: MOV AL,0FFH OUT DX,AL OUT DX,AL INC DX INC DX LOOP WRITE MOV DX,DMA+0BH MOV AL,58H OUT DX,AL MOV AL,41H OUT DX,AL

  46. 例2:利用DMA进行网络通信 MEMORY CPU NIC (网卡) DMAC 以太网

  47. NIC的结构 发送 缓冲区 接收 缓冲区 与系统总线 的接口 ISA总线 控制逻辑 并串转换 串并转换 物理层收发器 网线

  48. NIC与内存数据传输 Memory NIC发 送buffer NIC接收 Buffer

  49. NIC接收工作 • NIC收到数据包(如1500字节) • NIC向DMAC发出DMA请求 • DMAC向CPU发总线请求 • CPU响应DMA请求 • 开始传输(把收到的数据包传输到内存缓冲区中) • DMA结束 • CPU处理收到的数据包

  50. NIC发送工作 • CPU把需要发送的数据放到内存缓冲区中 • 设置DMAC,使之工作 • 把内存缓冲区的数据传输到NIC的缓冲区中(通过DMA方式) • 一旦NIC得到许可,即可以把NIC缓冲区中的数据发送出去

More Related