转:FIFO和DMA

FIFO

SPI端口增加了FIFO,使得传输数据有了缓冲区间。

FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。主要有三个方面的作用:1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据;2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担;3)允许系统进行DMA操作,提高数据的传输速度。这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成数据的存储工作。更详细的介绍参考FIFO的定义与作用

 

DMA

DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率。
      DMA 传送方式的优先级高于程序中断,两者的区别主要表现在对CPU的干扰程度不同。中断请求不但使CPU停下来,而且要CPU执行中断服务程序为中断请求服务,这个请求包括了对断点和现场的处理以及CPU与外设的传送,所以CPU付出了很多的代价;DMA请求仅仅使CPU暂停一下,不需要对断点和现场的处理,并且是由DMA控制外设与主存之间的数据传送,无需CPU的干预,DMA只是借用了一点CPU的时间而已。还有一个区别就是,CPU对这两个请求的响应时间不同,对中断请求一般都在执行完一条指令的时钟周期末尾响应,而对DMA的请求,由于考虑它的高效性,CPU在每条指令执行的各个阶段之中都可以让给DMA使用,是立即响应。

缓存一致性问题

DMA 会导致缓存一致性问题。想像 中央处理器 带有缓存与外部存储器的情况,DMA 的运作则是去访问外部存储器,当中央处理器访问外部存储器某个地址的时候,暂时先将新的值写入缓存中,但并未将外部存储器的数据更新,若在缓存中的数据尚未更新到外部存储器前发生了 DMA,则 DMA 过程将会读取到未更新的数据。

相同的,如果外部设备写入新的值到外部存储器内,则 中央处理器 若访问缓存时则会访问到尚未更新的数据。

这些问题可以用两种方法来解决:

  1. 高速缓存同调系统(Cache-coherent system):以硬件方法来完成,当外部设备写入存储器时以一个信号来通知缓存控制器某存储器地址的值已经过期或是应该重新更新数据。
  2. 非同调系统(Non-coherent system):以软件方法来完成,操作系统必须确认缓存读取时,DMA 程序已经开始或是禁止 DMA 发生。

第二种的方法会造成 DMA 的系统负担。

说明:1)这里的device是controller,如spi  controller,对应的slave 接在device上

2)一般device与DMA之间还有FIFO

一个 DMA 传输的例子  

      这个例子展示了 DMA 传输的触发和执行。在这个例子里,软盘控制器 (FDC) 从软盘读入了一个字节,然后需要 DMA 把这个字节放到内存的 0x00123456 处。整 个过程由 FDC 对 DMA 控制器发出 DRQ2 (对第二个通道发出 DRQ 信号)信号开始。.1.1 一个 DMA 传输的例子

DMA 控制器会注意到接收到了一个 DRQ2信号。然后控制器会确定第二个 DMA 通道已经被编程而且被标记为 unmasked (开启)。然后控制器也会确定其他的通道是活动的而且有更高的优先权。一旦这些工作完成,DMA 就要求 CPU 把总线放开,以便自己可以使用。DMA 通过总线发出 HRQ 信号直达 CPU。

依靠处理器,CPU 在空闲的时候就可以执行一些附加的指令。但是最终 CPU 在执行从内部处理器缓存或管道读取内容的命令的时候, 还是要等待。

  既然 DMA “取得了管理权”,那么 DMA 就会激活 -MEMR,-MEMW, -IOR,-IOW 输出信号,来自 DMA 的地址输出也会被设定为 0x3456。这个输出将用来引导将被传输的字节到确定的内存地址。

  DMA 然后让需求 DMA 传输数据的设备知道传输就要开始了。这个开始的信号 就是 -DACK,如果这个设备是软盘控制器, 那么就使用 -DACK2 信号。

  软盘控制器会负责把要传输的字节放到总线数据线上。除非软盘控制器需要更多的时间从总线上获取数据(而且,如果外围设备的确需要更多的时间,这个设备会 使用 READY 信号警告 DMA。),DMA 就会等待一个 DMA 时钟周期,然后去除掉 -MEMW 和 -IOR 信号以便内存可以关闭和保存总线上的字节,然后软盘控制器就知道 那个字节已经被传输。

  因为 DMA 周期一次只传输一个字节,软盘控制器现在就会丢掉 DRQ2 信号, 因此 DMA 就知道这个不再需要了。DMA 也丢掉 -DACK2 信号,以便软盘控制器知道它必须停止往总线上传输数据。

  DMA 会检查任何一个 DMA 通道有没有动静。如果任意通道都没有 DRQ 信号,那 么 DMA 控制器就会第三次发出 -MEMR,-MEMW,-IOR,-IOW 和地址信号。

  最后,DMA 会去掉 HRQ 信号。CPU 看见这个信号后,也会去掉 HOLDA 信号。 然后 CPU 激活 -MEMR,-MEMW,-IOR,-IOW 和地址信息,然后再回去执行命令并访 问内存和外围设备。

  对于一个典型的软盘区段,上述过程会重复 512 次,每次一个字节。每个字节传输的时候,DMA 中的地址寄存器会增加一,显示还有多少字节要传输的数据计数器则会减一。

  当这个计数器变为 0 的时候,DMA 会发出 EOP 信号,意味着 DMA 知道计数 器为 0,没有数据需要传输了,并等待再次被 CPU 召唤执行其他任务。这个事件也 叫作 终端计数 (Terminal Count, or TC)。只有一个 EOP 信号,而且,既然每次只 会有一个 DMA 通道是活动的,那么这个活动的通道就只可能是刚刚完成任务的通道。

  当缓存的传输结束以后,如果一个外围设备需要发出中断信号,就可以试验一 下把 -DACKn 信号和 EOP信号一起发出去。如果有这样的情况发生,就意味着 DMA 在没有 CPU 干预的情况下,不会再给那个设备传送任何的数据了。外围设备就可以发出中断信号来取得处理器的注意。在 PC 架构下,DMA 芯片自己是不能发出中断信号的。只有外围设备以及相应的硬件才负责发送中断信号。因此,就有可能有使用 DMA 而不使用中断的外围设备。

  应该懂得,尽管 CPU 在 DMA 需要的时候,总是把总线释放给 DMA,这个动作在应用程序和操作系统里面是不可见的,只是当 DMA 是活动的时候,CPU 执行指令的时间会有一点点的差别。因此,处理器会不时的探测外围设备的状态,探测 DMA 芯片中的寄存器,或者当 DMA 传输结束的时候,从外围设备接收中断信号以确定 情况。

时间: 2024-09-28 06:13:12

转:FIFO和DMA的相关文章

【转载】串口中怎样接收一个完整数据包的解析

这里以串口作为传输媒介,介绍下怎样来发送接收一个完整的数据包.过程涉及到封包与解包.设计一个良好的包传输机制很有利于数据传输的稳定性以及正确性.串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2C的总线下的数据传输.在单片机通信系统(多机通信以及PC与单片机通信)中,是很常见的问题. 一.根据帧头帧尾或者帧长检测一个数据帧 1.帧头+数据+校验+帧尾 这是一个典型的方案,但是对帧头与帧尾在设计的时候都要注意,也就是说帧头.帧尾不能在所传输的数据域中出现,一旦出现可能就被误判.如果用中断来

13.串口通讯的高级方式

1.FIFO模式及其作用(1)典型的串口设计,发送/接收缓冲区只有1字节,每次发送/接收只能处理1帧数据.这样在单片机中没什么问题,但是到复杂SoC中(一般有操作系统的)就会有问题,会导致效率低下,因为CPU需要不断切换上下文.(2)解决方案就是想办法扩展串口控制器的发送/接收缓冲区,譬如将发送/接收缓冲器设置为64字节,CPU一次过来直接给发送缓冲区64字节的待发送数据,然后transmitter慢慢发,发完再找CPU再要64字节.但是串口控制器本来的发送/接收缓冲区是固定的1字节长度的,所以

mini2440裸机音乐播放器(很久以前的笔记)

[这是好久以前写的,有点乱,没时间整理,当做记录用的.] 图片粘贴失效,没上传图,想要的直接下载文档吧. 项目目的:通过IIS,触摸屏,LCD模块实现音乐播放器功能(按钮上一首.下一首.播放.暂停的音频控制功能,并实现播放歌曲时显示相应的歌曲图片,不播放时显示hello music图片) 项目设备:windows7(32位),mini2440,uboot(nandflash),ADS1.2开发环境,jlink v8,耳机: 功能模块LCD.触摸屏.IIS 分别介绍: Main函数中主频设置: U

mini2440裸机试炼之IIS——音乐播放器

IIS 信号频率设置 IIS(Inter-IC Sound)由飞利浦公司开发,是一种常用的音频设备接口,主要用于CD.MD.MP3等设备. s3c2440一共有5个引脚用于IIS:IISDO.IISDI.IISSCLK.IISLRCK和CDCLK.前两个引脚用于数字音频信号的输出和输入,另外三个引脚都与音频信号的频率有关,可见要用好IIS,就要把信号频率设置正确. IISSCLK为串行时钟,每一个时钟信号传送一位音频信号.因此IISSCLK的频率=声道数×采样频率×采样位数,如采样频率fs为44

windows 2000/xp WDM设备驱动程序开发 (2)

4. WDM环境 a  安装VC6.0: b  安装相应操作系统的DDK(组件一定要全选): c  安装DriverStudio: d  用VC6.0打开Compuware\Driver Studio\DriverWorks\Source\VdwLibs.dsw工程: 1)用DriverStudio的driverWizard来创建工程 创建RegSample完后编译出现错误,删掉没有的函数,然后去掉了ntstrsafe.lib 链接库 2)EzDriverInstaller (driverstu

SD初始化过程以及Cmd解析

D: 1条CMD线,所有的命令和回应都是通过这条线一位一位的传输.不同模式或不同版本下,命令有不同含义.(SD(SD[0],SD[3:0]),SPI)) 1条时钟线,时钟源是来自APH总线时钟 4条数据线,SPI模式下用了两条(一条输出,一条输入),SD的一位模式下一条(输出输入),也可以用完四条(输出输入,DATA[0]将分时复用). SD卡是以块为单位,初始化时有配置,一般为512字节,一个扇区有4096个块. 2410_SDI控制器: 封装了命令和数据的移位操作,支持SDI_1.0规范.有

I2S音频总线学习

IIS音频总线学习(一)数字音频技术 一.声音的基本概念 声音是通过一定介质传播的连续的波. 图1 声波 重要指标: 振幅:音量的大小 周期:重复出现的时间间隔 频率:指信号每秒钟变化的次数 声音按频率分类: 图2 声音的频率(语音信号频率范围:300Hz-3kHz) 声音的传播携带了信息,它是人类传播信息的一种主要媒体. 声音的三种类型: 波形声音:包含了所有声音形式 语音:不仅是波形声音,而且还有丰富的语言内涵(抽象→提取特征→意义理解) 音乐:与语音相比,形式更规范.音乐是符号化的声音.

mini2440系统引导(五)串口UART

S3C2440A 的通用异步收发器(UART)配有 3 个独立异步串行 I/O(SIO)端口,每个都可以是基于中断或基于 DMA 模式的操作.换句话说,UART 可以通过产生中断或 DMA 请求来进行 CPU 和 UART 之间的数据传输.UART 通过使用系统时钟可以支持最高 115.2Kbps 的比特率. uart中断触发的时机 UART LINE控制寄存器ULCON,用于控制uart的奇偶校验模式选择,停止位长度,以及一次发送的数据个数设定. UART 控制寄存器UCON,用于设定是否启用

RT600 I2S外设介绍及应用

恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核与高性能Cadence Tensilica HiFi 4 音频DSP内核相结合,适用于32位沉浸式音频播放和视频用户界面应用.i.MX RT600旨在通过安全.功率优化的嵌入式处理器充分挖掘语音辅助终端节点的潜力,因此针对音频数据的采集.传输和处理,i.MX RT600都有丰富的硬件资源进行支持.其