DMA控制器8237A「建议收藏」

DMA控制器8237A「建议收藏」1DMA系统简介DMA(directmemoryaccess)是一种外设与存储器或者存储器与存储器之间直接传输数据的方式,在进行DMA存取时,CPU让出总线控制权,不在采用输入输出指令的方法进行数据存取,而采用一个专门的硬件DMAC(DirectMemoryAccessControl)控制电路,减少了中间环节,从而提高了传输速率。1.1DMA基本原理DMA直接实现I/O与存储器之间的数据传送。①当I/O接口准备好,希望进行DMA操作时,就像DMAC发出DMA请求信号DRQ(DMARe

大家好,又见面了,我是你们的朋友全栈君。

1 DMA系统简介

DMA(direct memory access)是一种外设与存储器或者存储器与存储器之间直接传输数据的方式,在进行DMA存取时,CPU让出总线控制权,不在采用输入输出指令的方法进行数据存取,而采用一个专门的硬件DMAC(Direct Memory Access Control)控制电路,减少了中间环节,从而提高了传输速率。

1.1 DMA基本原理

DMA直接实现I/O与存储器之间的数据传送。
①当I/O接口准备好,希望进行DMA操作时,就像DMAC发出DMA请求信号DRQ(DMA Request)
②DMAC将此请求信号转变成对CPU的总线请求信号(Hold Request)
③CPU当前总线执行周期结束,相应DMAC操作,发出应答信号HLDA(Hold Acknowledgment),此时,由DMAC接管对总线的控制
④由DMAC对存储器寻址,并发出相应的控制信号(DACK,/RD,/WR),使存储器与I/O接口之间直接交换数据
⑤在传送一字节数据时,DMAC自动修改存储器地址和传送字节计数器,并检测传送是否结束
⑥DMA传送结束,DMAC向CPU发出结束信号(EOP),并释放总线,使得CPU重新获得总线控制,恢复正常工作
在这里插入图片描述

2 DMA控制器8237A

2.1 8237A概述

  1. 8237A是可编程DMA控制器;
  2. 每个8237A有4个独立的DMA通道,优先权不同;
  3. 每个DMA通道有4种工作方式;
  4. 一次传送的最大长度可达64KB;
  5. 多个8237A芯片可以级连,用于扩展通道数。

2.2 8237A内部结构

在这里插入图片描述

2.3 8237A引脚图

在这里插入图片描述

  1. 控制信号:
    (1) CLK:时钟(控制芯片内部操作和数据传输)
    (2) ADSTB:地址选通
    (3)/cs:片选
    (4) READY:准备好
    (5) AEN:地址允许
    (6)/MEMR:存储器读
    (7) RESET:复位
    (8)/MEMW:存储器写
    (9) /IOR:I/O读
    (10)/EOP :过程结束
    (11) / IOW :I/O写
  2. 请求和响应信号
    (1) DREQ0~DREQ3:DMA通道请求
    (2) HRQ:总线请求
    (3) HLDA:总线响应
    (4) DACK0~DACK3:DMA通道响应
  3. 数据和地址信号
    (1) A0~A7:地址线
    (2) DB0~DB7:数据线

2.4 8237A传送时序

在这里插入图片描述

(1) Si状态:空闲周期,Si的下降沿检测到有一个或几个DREQ请求,在Si的下一个上升沿向CPU发出DMA请求,HRQ有效;
(2) S0状态:等待CPU对总线请求的响应,S0的上升沿采样到HLDA信号有效, 下一周期进入S1状态;
(3) S1状态:地址允许信号AEN有效,存储单元高8位地址通过DB0DB7输出,发出地址选通信号ADSTB,下降沿对高8位地址进行锁存,地址低8位/由地址线A0A7 输出,且整个DMA传送期间保持;
(4) S2状态:8237A向外设输出DMA响应信号DACK,读写信号相继有效;
(5) S3状态和S4状态进行数据传送;
(6) 块传送方式下:S4后传送下一个字节 ,地址高8位不变,低8位变化,不需要S1直接进入S2,直到发生TC事件。
(7) 若S4之前不能完成数据传送,可令READY为低,在S3和S4之间插入Sw,以加宽DMA传送周期。

2.5 8237A工作方式

2.5.1 单字节传送方式

(1) 传送过程:8237A获取总线控制权后,传送一个字节,字节数寄存器减1,地址寄存器加1或减1,HRQ变为无效,释放总线,HRQ很快再次有效,接收到HLDA有效信号后,传送下一字节,重复以上过程,直到字节数从0减到FFFFH,发生TC事件,DMA传送结束。
(2) 特点:效率低,但能保证两次DMA传送之间CPU有机会重新获取总线控制权。

2.5.2 块传送方式

(1) 传送过程:由DREQ启动后就连续传送数据,直到TC事件发生或外部输入有效的/EOP信号为止。
(2) 特点:一次请求能传送一个数据块,效率高;但整个DMA传送期间CPU长时间无法控制总线。

2.5.3请求传送方式

连续传送数据,当出现以下三种情况之一时停止。
(1) 字节数寄存器从0减到FFFFH,发生TC事件;
(2) 由外部送来一个有效的 信号;
(3)外部输入的DREQ信号变为无效。
当第三种情况发生时,当外设准备好数据后,传送可以继续下去。
特点:DMA操作可由外设控制传送的过程。

2.5.4 级联传送方式

若干片8237A构成主从式DMA系统

2.6 8237A传送类型

  1. DMA读:数据由存储器传送到外设
  2. DMA写:外设输入的数据写入存储器
  3. DMA检验:空操作,时序信号、地址信号与读写时一样,但读写控制线无效,常用于校验。
  4. 存储器到存储器传送:通道0为源,通道1为目的,软件启动,每传送一个字节需8个时钟周期,前4个时钟周期用于从源区将数据读入8237A的临时寄存器,后4个时钟周期把临时寄存器中的数据写入目的区,直至TC事件发生或发来/EOP信号。

2.7 8237A寄存器组

  1. 现行地址寄存器:用于保存DMA传送的当前地址值。
  2. 现行字节数寄存器:保存着还要传送的字节数。
  3. 基地址寄存器:保存现行地址初值。
  4. 基字节数寄存器:保存现行字节数初值。
  5. 模式寄存器:保存相应通道模式控制字。
  6. 命令寄存器:设置8237A操作方式
    在这里插入图片描述
  7. 请求寄存器:数据块传送时可由软件发出DREQ请求,存储器到存储器传送时,必须由软件请求启动通道0。
    在这里插入图片描述
  8. 屏蔽寄存器:用于屏蔽外设发出的DREQ请求。
    在这里插入图片描述
    (2) 主屏蔽字格式
    在这里插入图片描述
  9. 状态寄存器:从CPU读取8237A的工作状态 。
  10. 临时寄存器: 在存储器到存储器传送方式下,保存数据

2.8 8237A的软件命令

237A共有10种内部寄存器,对它们的操作有时需要配合3个软件命令。8237A “软件命令”的特征:
(1) 不需要通过数据总线写入控制字;
(2) 直接由地址和控制信号译码实现。

  1. 清除高/低触发器软件命令
    高/低触发器控制16位寄存器的读写:
    触发器为0,操作低字节;
    触发器为1,操作高字节;
    16位寄存器进行一次操作,触发器
    状态自动改变;
    A3A2A1A0=1100,高/低触发器清零。
  2. 主清除命令
    与硬件的RESET信号具有相同的功能,
    A3A2A1A0=1101
  3. 清屏蔽寄存器命令
    使4个屏蔽位都清零(允许DMA请求)
    A3A2A1A0=1110
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145075.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • C语言小游戏——贪吃蛇—-小白专用

    C语言小游戏——贪吃蛇—-小白专用C语言贪吃蛇小游戏个人小白,后期也做了一些改进,附原视频地址(点击即可)废话在后面直接上程序该程序在VS2019上可完美运行。#include<stdio.h>#include<stdlib.h>#include<Windows.h>#include<time.h>#include<conio.h>constexprautomaphigh=28,mapwide=84;structvirus{ intx;

  • 表空间

    表空间

  • 运行疑难解答时出错0x8000FFFF_vs2010由于缺少调试目标

    运行疑难解答时出错0x8000FFFF_vs2010由于缺少调试目标发生错误,需要终止调试。有关更多详细信息,请参阅Microsoft帮助和支持网站。HRESULT=0x8000ffff。ErrorCode=0x0。工程目录太深会导致上述错误发生,把整个工程文件往外移即可

  • 带你详细了解,一致性哈希算法的实现原理

    带你详细了解,一致性哈希算法的实现原理一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。但现在一致性哈希算法在分布式系统中也得到了广泛应用,研究过Memcached缓存数据库的人都知道,Memcached服务器端本身不提供分布式Cache的一致性,而是由客户端来提供,具体在计算一致性哈希时采用如下步骤:

  • 我为什么放弃Go语言[通俗易懂]

    我为什么放弃Go语言[通俗易懂]我为什么放弃Go语言?有好几次,当我想起来的时候,总是会问自己:这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。开门见山地说,我当初放弃Go语言,就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论,但是我有足够详实的客观的论据。

  • gridbagconstraints什么意思_gridbaglayout布局

    gridbagconstraints什么意思_gridbaglayout布局GridBagConstraints的具体参考为:http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/awt/GridBagConstraints.html下面是构造函数:publicGridBagConstraints(intgridx,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号