总线寄存器

1、PIO

总线上的数据的传递有两种形式。一种为程控输入/输出(PIO)另一种为直接存储器访问(DMA)。

使用PIO时,CPU是主模块,总线上数据的读取由CPU上运行的软件程序直接发起,传递的数据一定进过CPU(如下面的一、二所述)。

一、软件指令或者将已经存放在CPU数据寄存器中的数据发送到目标被控模块;

二、或者将目标被控模块里的一个数据读入,放到CPU的数据寄存器中。

例如:需要将数据从模块A---转移到----模块B,软件将这个任务分解为两个PIO操作:

第一步:从模块A读取数据,并存放到CPU的数据寄存器中;

第二步:将存放在CPU数据寄存器中的数据写入到模块B。

由于链接芯片与芯片之间的系统总线的时钟频率比CPU内部的时钟频率要低许多,用PIO读写大量的数据是一种非常低效的方式占用CPU的处理能力。所以需要利用专门的硬件来协助执行,在芯片与芯片之间或者模块与模块之间数据传输。这就是DMA。

2、DMA

此时软件只需要将传输数据要求使用PIO通知DMA硬件,DMA硬件按照要求执行数据的传输。这期间CPU继续进行其他工作。当DMA硬件执行完毕数据的传输任务之后,通过中断信号或这通过向主存储的某个特定地址写入特定的数值,通知软件。

一个DMA硬件通常包括多个DMA通道。每个通道一般用于一对模块之间的数据传输,通道之间相互独立。

DMA描述符用于指定如何传输数据块。一个DMA描述符至少包括数据传输的源地址(SA)、目的地址(DA)、需要传输的数据量(data size)、和每次总线传输的数据量(transfer size)。有些DMA模块要求软件将DMA描述符的数据结构存放在主存储器中,使用这个方法的好处时软件可以十分有效的建立DMA描述符。在DMA执行一个DMA数据传输任务之前,DMA先要用DMA的方法,将存放在CPU主存储的DMA描述符读到DMA模块中。

DMA将一个数据块的传输分为两个步骤。

第一步:从源地址的被控模块读取数据;

第二步:将读取的数据写入目的地址的被控模块。

根据DMA描述符的规定,DMA可以在传输了一个数据块之后,自动的将源地址和目的地址更新到下一个数据块地址,然后DMA开始传输下一个数据块,一直传输完实际要求传输的数量级。假设一个DMA开始传输的数据量是128Byte,每次传输的数据块是16Byte,为了完成这个DMA描述符指定的数据传输,DMA自动进行8次总线读取和8次总线写入。这些传输路径不经过CPU

时间: 2024-10-13 00:07:22

总线寄存器的相关文章

第三章 系统总线总结

3.1总线的基本概念: 一.为什么要用总线:简化.系统可扩充性好.便于维护 二.什么是总线: 简单来说就是计算机各个部分共享的传输介质 三.总线上信息传输的方式:1串行  2并行    串行是指每条线一位一位的传输二进制码  并行是指若干条传输线可以同时传输若干位二进制码 四.列举集中总线结构方式 1单总线结构 2面向CPU的双总线结构 这种结构以cpu位中心  一条为I/O总线(低速)  用于和I/O设备相连  一条是存储总线 (高速) 用于与寄存器相连 这种结构相比但总线结构来说  缺点是

利用ZYNQ SOC快速打开算法验证通路(6)——利用AXI总线实时配置sysGen子系统

利用ZYNQ验证算法的一大优势在于,可以在上位机发送指令借助CPU的控制能力和C语言易开发特点,实时配置算法模块的工作模式.参数等对来对其算法模块性能进行全面的评估.最重要的是无需重新综合硬件模块. 接着上篇该系列博文,在sysGen中设计模块功能为:根据模式选择输入,来完成乘2或除2两种运算,0乘1除. 测试激励选用From Workspace模块,从MATLAB工作空间导入数据.利用MALTAB脚本可以非常容易地生成任意数据集,极大体现了sysGen开发的优势. 设计完成调用xilinx w

数码相框(LCD、I2C)

一:项目介绍    该项目最终实现的功能很简单,手指在触摸屏左滑(下一张图片),右滑(上一张图片)    1.1软硬件资源    硬件:pc机,ARM Cortex-A9开发板    软件:linux 操作系统    1.3项目流程        本项目主要分为三大模块:        一:LCD驱动编写        二:I2C驱动编写        三:使用I2C读取触摸屏上的数据,判断是向左或者向右,再控制lcd进行图片的显示 大体流程图如下所示: 二:项目环境搭建 2.1安装交叉环境编译

Altium Designer常用库及部分元件名中英文对照表

-------------------------------------------- 常用库及部分元件名中英文对照表 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 原理图常用库文件: Miscellaneous Devices.ddb Dalla

第四课-第三讲04_03_管理及IO重定向

运算器,控制器:合成CPU存储器:RAM输入输出设备程序:指令和数据 地址总线:内存寻址数据总线:传输数据控制总线:控制指令 总线复用一根总线 寄存器:cpu内部的一个暂时瞬时存储器 I/O设备:硬盘,键盘从哪里读数据最后数据存在到哪里去?INPUT设备OUTPUT设备 系统设定默认的输入设备:也叫标准输人,STDIN, 描述符是0 默认的输出设备:也叫标准输出, STDOUT, 描述符是1 标准的错误输出: STDERR, 描述符是2 标准输入:键盘标准输出和错误输出:显示器 I/O 重定向:

kobox : dma_s3c.ko -v1 操作寄存器方式操作S3C2440的DMA

平台:TQ2440 linux版本:Linux EmbedSky 3.16.1-svn57 #56 Sat Oct 18 21:46:22 PDT 2014 armv4tl GNU/Linux 目标:v2中改成s3c2410_dma_xxx方式来操作DMA,看这里的寄存器映射是怎么使用系统接口来操作的! #include "dma.h" #define MEM_CPY_NO_DMA 0 #define MEM_CPY_DMA 1 //#define BUF_SIZE (512*1024

寄存器

寄存器 多个数连加,除了一开始,以后每次都有一个中间结果参与计算,这就需要一个保存中间结果的寄存器.一个触发器可以保存一个比特.一个寄存器通常由好多个边沿D触发器组成.如下图这个寄存器包含了5个上升沿D触发器,所有能用来保存一个5比特长的二进制数. 不管一个二进制数包含多少个比特,要保存它,只需要把每一个比特都保存起来即可.所有的触发器CP端都连在一起,这样就可以接收同一个控制命令.一旦"保存"开关按下,在CP脉冲的上升沿,所有触发器同时开始干活,二进制数的每一位都在同一时间被保存起来

I2C总线协议学习笔记 (转载)

1.I2C协议   2条双向串行线,一条数据线SDA,一条时钟线SCL.   SDA传输数据是大端传输,每次传输8bit,即一字节.   支持多主控(multimastering),任何时间点只能有一个主控.   总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.   系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet. 1.1 I2C位传输   数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit: 

总线(一)

计算机系统的五大部件之间的互连方式有两种1,使用单独连线2,各个部件连接到一组公共信息传输线上,称为总线连接. 早期计算机以运算器为中心,当IO交换信息时,都需要经过运算器,使运算器停止运算,影响CPU工作效率. 在同一时刻,只允许有一个部件向总线发送信息,而多个部件同时从总线上接收相同的信息.16条传输线组成的总线可以同时传输16位二进制代码. 以CPU为中心的双总线: CPU与IO设备交换数据还需要通过CPU所以CPU效率还是低. 单总线: 原则上IO与内存传输不影响CPU工作,但是当某一时