




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十二章DMA控制器 DMAC 12 1DMA传送的基本概念 1 DMA DirectMemoryAccess 直接存储器存取 习惯上称DMA传送 DMA传送 利用硬件完成高速外设与系统RAM之间的信息交换 2 DMAC DMA控制器 它是实现DMA传送的核心芯片 3 专用术语 DMA读传送 在DMAC控制下 读取RAM的内容 I O端口 DMA写传送 I O端口信息 系统RAM某单元 存储单元读 写传送 在DMAC控制下 实现系统RAM RAM 注意 在PC系列机中禁止RAM RAM传送 4 DMA传送的过程 HOLDCPUHLDA HRQDREQDMACHLDADACK I O接口 RAM 总线保持请求 总线响应 DMA请求 DMA响应 ABDBCB 系统的三总线分别受到CPU和DMAC的控制 CPU可以向地址总线 数据总线 控制总线上发送信息 DMAC也可以向地址总线 数据总线 控制总线上发送信息 但同一时间 三总线只能受一个器件的控制 所以 两者之间必须有联络信号 HOLDCPUHLDA HRQDREQDMACHLDADACK I O接口 RAM 总线保持请求 总线响应 DMA请求 DMA响应 ABDBCB 高速外设 通过其接口电路向DMAC发出 DMA请求 信号 请求DMAC为其传送数据 DMAC检测到有DMA请求之后 即向CPU提出总线保持请求 请求CPU脱离总线 HOLDCPUHLDA HRQDREQDMACHLDADACK I O接口 RAM 总线保持请求 总线响应 DMA请求 DMA响应 ABDBCB CPU执行完当前指令的当前总线周期之后脱离系统总线 并向DMAC发出 总线保持响应 信号 DMAC收到 总线响应 信号之后 接管系统总线的控制权 并向I O接口发出DMA响应信号 HOLDCPUHLDA HRQDREQDMACHLDADACK I O接口 RAM 总线请求 总线响应 DMA请求 DMA响应 ABDBCB 在这之后 由DAMC控制系统总线 进行DMA传送 a 若进行DMA读传送 DMAC把RAM地址 地址总线上DMAC发出存储器读命令和I O写命令b 若进行DMA写传送DMAC把RAM地址 地址总线上DMAC发出I O读命令和存储器写命令 HOLDCPUHLDA HRQDREQDMACHLDADACK I O接口 RAM 总线请求 总线响应 DMA请求 DMA响应 ABDBCB 预定的字节数全部传送完毕 DMAC脱离系统总线 CPU再次控制系统总线 完成被中断指令的后继总线周期 5 DMA传送与中断方式的比较 响应时间 CPU接到 中断请求 后要等到当前指令执行完毕才响应 而CPU接到DMAC的 总线请求 后 只要当前指令的当前总线周期执行完毕就响应 数据传送速度 DMAC传送比中断传送要快 中断服务程序 保护现场 I O端口 CPUCPU RAM送中断结束命令恢复现场IRET 由此看出 中断传送是由软件完成的 执行一次中断服务程序 就完成一字节的I O写传送 而DMA传送是由硬件完成的 每传送一个字节只占用CPU的一个总线周期 中断请求分为内部中断和外部中断 DMA请求的方式也有两种 硬件DMA请求和软件DMA请求 12 28237DMA控制器 一片8237有4个DMA通道 一 8237内部结构 8237提供4种DMA传送方式 单字节读 写传送数据块读 写传送请求传送级连传送 一次DMA传送的最大字节数是64K 8237每个通道只能访问64KRAM PC系列机由于增加了 页面寄存器 所以一个通道能访问16兆内存 控制寄存器 请求寄存器 状态寄存器 屏蔽寄存器 请求触发器 屏蔽触发器 方式寄存器 基地址寄存器 当前地址寄存器 基本字节寄存器 当前字节寄存器 通道0 暂存寄存器 通道1 通道2 通道3 READYDREQ0DACK0 DREQ1DACK1DREQ2DACK2DREQ3DACK3 HRQHLDA CLK AEN ADSTB DB7 DB0 A3 A0A7 A4 IORMEMRIOWMEMW HOLDHLDA CLK 8237A的内部结构框图 二 8237内部寄存器组分二类 一类是4个通道共用的 一类是每个通道专用的 1 控制寄存器 共用 寄存器初始化命令字 命令字格式如下页图 D7D6D5D4D3D2D1D0 0 禁止存储器到存储器传送1 允许存储器到存储器传送 存储器到存储器传送时 0 源地址不保持1 源地址保持不变 0 启动8237工作1 停止8237工作 0 正常时序1 压缩时序 0 DACK低电平有效1 DACK高电平有效 0 DREQ高电平有效1 DREQ低电平有效 0 不扩展写信号1 扩展写信号 0 固定优先级1 循环优先级 8237A控制寄存器格式 注意 系统机加电后 由BIOS完成DMAC的初始化 控制命令字 0 即 各个通道禁止RAM RAM 允许读 写传送 使用正常时序 不扩展写信号 DMA请求高电平有效 DMA应答信号低电平有效 各通道的DMA请求是固定优先级 即 DREQ0最高 REQ3最低 用户没有必要也不应当改变控制寄存器的内容 2 方式寄存器 共用 寄存方式字 选择各通道的传送方式 方式字格式 如下页图 D7D6D5D4D3D2D1D0 通道选择 00选择通道001 选择通道110 选择通道211 选择通道3 传送类型的选择 00校验传送01 写传送10 读传送11 无意义 通道传送方式选择 00 请求传送方式01 单字节传送方式10 数据块传送方式11 级联方式 地址增减方式选择0 地址加11 地址减1 自动重装功能选择 0 禁止1 允许 8237A方式寄存器格式 8237DMAC规定4种传送方式 即 单字节读 写传送 数据块读 写传送 单字节请求读 写传送 级联传送 各通道还有一个6位的方式寄存器 8237根据共用的方式寄存器D1 D0位 再截取D7 D2位 相应通道的方式寄存器中 假设 方式命令字 01001001 单字节传送 地址加1修改 无自动重装功能 读传送 通道1 表示 令CH1进行单字节读传送 自动加1变址 没有自动重装功能 MOVAL 01001001BOUT方式寄存器口地址 AL 基地址寄存器 16位 每个通道有一对 3 基地址寄存器和当前地址寄存器 各通道专用 基地址寄存器 16位 初始化编程时 低16位RAM地址 基地址寄存器 后者自动转存到当前地址寄存器中 基地址寄存器 16位 进行DMA读 写传送时 当前地址寄存器的内容 系统地址线上 选中某一单元 基地址寄存器 16位 一个字节传送完毕 当前地址寄存器中的内容自动 1或 1 由方式寄存器D5的选择而定 基地址寄存器 16位 预定字节传送完毕 若方式寄存器D4位 1 则基地址寄存器中的内容自动重装 当前地址寄存器 4 基本字节寄存器和当前字节寄存器 各通道专用 每通道有一对 初始化时 欲传送的字节数 1 基本字节寄存器 后者自动写入当前字节寄存器 每传送一个字节 当前字节寄存器自动 1 当前字节寄存器的值由0 1时 引脚EOP 表明预定的字节数传送完毕 若方式寄存器D4 1 则完成计数值自动重装 当前字节寄存器 5 先 后触发器 共用 地址寄存器 字节寄存器都是16位 而8237A与CPU之间的数据线只有8根 所以地址值 字节值 要分2次写入 先 后触发器规定了写入地址寄存器中的初值 以及写入字节寄存器中的初值的写入顺序 先 后触发器为0 则先写入的是低8位 后写入的是高8位 初始化时 使先 后触发器为0低8位RAM地址 基本地址寄存器中8位RAM地址 基本地址寄存器 欲传送的字节数 1 其低8位 基本字节寄存器 欲传送的字节数 1 其高8位 基本字节寄存器 6 屏蔽寄存器 共用 功能 屏蔽某一通道的DMA请求 8237A有2个屏蔽寄存器 单通道屏蔽寄存器 多通道屏蔽寄存器 无用 D2D1D0 1 使相应通道的屏蔽触发器为10 使相应通道的屏蔽触发器为0 D1D0 选中 00011011 CH0CH1CH2CH3 每写入一次 只能预置一个通道的屏蔽触发器 单通道屏蔽寄存器 多通道屏蔽寄存器 共用 D3D2D1D0 无用 选中CH0 Di 1 使相应通道的屏蔽触发器为1Di 0 使相应通道的屏蔽触发器为0 写入一次 可使4个通道的屏蔽寄存器分别置1或置0 CH1 CH2 CH3 7 软件请求寄存器 共用 无用 1 使相应通道的请求触发器置10 使相应通道的请求触发器置0 D1D0 选中 00011011 CH0CH1CH2CH3 D2D1D0 硬件DMA请求 由引脚DREQ0 3的有效信号 使通道的 请求触发器 置1 软件DMA请求 由于预置 请求寄存器 而从内部使通道的 请求触发器 置1 实验表明 某通道的屏蔽触发器置1后 该通道的硬件 软件DMA请求都将被屏蔽 8 状态寄存器 CH3CH2CH1CH0CH3CH2CH1CH0 D7D4D3D0 Di 1表示有DMA请求 Di 1表示该通道DMA传送结束 12 38237A在PC系列机中的应用 1 用2片8237A级连提供7个DMA通道 HRQDREQ0DACK0DREQ1DACK1DREQ2DACK2DREQ3DACK3 DACK0DACK1DACK2DACK3 HRQDREQ0DACK0DREQ1DACK1DREQ2DACK2DREQ3DACK3 HRQ至CPUDACK5DACK6DACK7 DREQ0DREQ1DREQ2DREQ3 DMAC1 DMAC2 DREQ5DREQ6DREQ7 8237A的每个通道地址寄存器是16位 进行DMA传送时 当前地址寄存器的内容 系统地址线上 我们知道 16位地址可寻址64K内存20位地址可寻址1兆内存24位地址可寻址16兆内存在PC XT中 内存为1兆 高四位地址由谁给出 在PC AT中 内存为16兆 高8位地址由谁给出 为此 在DMA接口电路中 以8237A为核心为每一通道增加了一个 页面寄存器 用来存放高4位 AT机中为高8位 地址 2 如何扩充8237A的寻址范围 增设页面地址寄存器 地址锁存器 当前地址寄存器 3 页面寄存器口地址 CH0CH1CH2CH3 DMAC1 DMAC2 CH0CH1CH2CH3 页面寄存器口地址 87H83H81H82H 8BH89H8AH 12 48237A的初始化编程 1 命令字写入控制寄存器 2 屏蔽字写入屏蔽寄存器 屏蔽要初始化的通道 3 方式字写入方式寄存器 为通道规定传送类型及工作方式 4 置0先后触发器 为后继的地址寄存器和字节寄存器规定写入顺序 5 计算存储单元的20位物理地址 6 将物理地址的高8位存入页面寄存器 低16位 基本地址寄存器 字节数 1 基本字节寄存器 7 解除屏蔽 准备响应DMA请求 4 DMA读 写传送实验举例按图完成电路接线 采用 硬件DMA请求 的方式 将用户程序数据段3行测试电文写入到实验电路中的6116存储器 它们是本实验的I O端口寄存器 然后再将6116存储器中的电文传送到用户程序的数据段缓冲区 最后把缓冲区中的电文显示在屏幕上 验证DMA读写传送的结果 电文如下 THEQUICKBROWNFOXJUMPSOVERLAZYDOG A8 A1 B8 B1 G DIR 74LS245 6116 D7 D0 A10 A0 CS WR RD Q10 Q0 2 74LS393 清0端 进位脉冲 5V DMA按键 总线B18 DRQ1 DMA请求电路 IOR IOW DACK1 IOW IOR DACK1 清0电路 2Kx8 程序清单 DISPMACROVARMOVAH 9MOVDX OFFSETVARINT21HENDMSCANKEYMACROLOCALLLLLLL MOVAH 1INT16HJZLLLMOVAH 0INT16HENDM DATASEGMENTTEXTDB THEQUICKBROWNFOXJUMPSOVERLAZYDOG DB0DH 0AHDB THEQUICKBROWNFOXJUMPSOVERLAZYDOG DB0DH 0AHDB THEQUICKBROWNFOXJUMPSOVERLAZYDOG DB0DH 0AH COUNTEQU TEXTBUFDBCOUNTDUP MESGDB TomakeaDMArequest DB thenstrikeanyKey 0DH 0AH DATAENDSCODESEGMENTASSUMECS CODE DS DATABEG MOVAX DATAMOVDS AX CALLI8237R DMACH1读出初始化DISPMESG 给出操作提示SCANKEYLAST1 INAL 08H 读DMA状态寄存器ANDAL 02HJZLAST1 CH1传送未结束 转CALLI8237W DMACH1写入初始化DISPMESG 给出操作提示SCANKEYLAST2 INAL 08H 读DMA状态寄存器ANDAL 02HJZLAST2 CH1传送未结束 转DISPBUF 显示DMA读 写传送的最后结果MOVAH 4CHINT21H I8237RPROC DMACH1读出初始化MOVAL 05HOUT0AH AL 置CH1屏蔽触发器置1MOVAL 01001001B CH1方式字 单字节读传送OUT0BH AL 自动加1变址 不自动预置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论