DMA的作用以及DMA与CPU干扰问题
DMA(Direct memory access):直接存储器存储。
目前网上对于DMA有两种说法,一种是在DMA传输时,CPU可以正常工作,一种说法是不可以,这两种说法其实有对也有错,经过我的大量查询后,终于得出了一个靠谱的答案。那么想弄清楚这点,需要先了解总线与时钟的关系(先凑合看,回头写个总线架构专讲)
时钟:计算机的最小时间单位,用于同步控制电路,计算机中每个动作所用时都是以时钟周期为单位的,多个时钟周期或一个时钟周期等于一个机械周期,多个机械周期等于一个指令周期(写多个是因为不同芯片上他的不同周期的比值不同),指令周期执行指令集中的一条指令所需要的时间。
总线:计算机中各个单元中的数据传输。STM中分为多种总线,有与外设沟通的也有与各种存储器沟通的,也有DMA的总线,但是DMA的总线用于连接AHB总线的。此外,总线本身是连接到总线矩阵的,这是为了使得总线之间的读取更加灵活,使得主设备与从设备之间可以相互访问,如果没有总线矩阵的话,主控主线与被控主线之间就无法进行访问。总线矩阵中,当两组主从总线之间进行访问时,如果XY两线其中任意一条发生冲突,则采取总线调度进行分配,且两组传输无法进行
总线与时钟的关系:SYSCLK是时钟,但是AHB是总线,虽然频率相同,APB是总线,但是HCLK是时钟。
那么这里要注意了,当总线矩阵冲突时,也就是CPU执行代码中的总线传输和DMA冲突时,则无法进行DMA和CPU的同时传输!!!
在这里,DMA总线连接到了AHB总线上,而AHB只负责CPU与外设之间的通信。而不影响CPU与代码的通信。也就是说,当DMA传输时,CPU无法与外设之间进行通信,但是可以正常执行代码,只不过当代码中需要操控外设时,需要等待DMA传输完成或是使用交替的方式与DMA决定谁使用总线。
打个比方的话,就是一总线可以看作是一条条城市之间的高速公路,成本足够的话,我们自然希望这些道路是专门的,是互不干扰的。但是由于现实中的成本等等问题,导致我们不得不将一些道路重复利用,设置红绿灯等东西来调节重复利用以避免道路冲突造成的堵车问题。
另外,DMA在传输过程中虽然不使用总线,但是DMA向CPU申请总线使用权的时候,会通过AHB总线向CPU发送总线申请,以及在DMA传输总线时,归还总线也会和发送与总线申请类似的请求数据,当CPU收到DMA发来的这些数据后,会执行一些操作,如回应DMA的信息或是将总线释放(将总线设为高阻状态)。这些动作都会使用CPU资源。
另外多一句,DMA的总线申请等与CPU交流的信息,高于一切异常的优先级!
那么可能有些同学可能会有疑问,当DMA传输时CPU无法工作的总线架构下,是不是就不需要总线了呢?其实不然。DMA的传输速度是比CPU要快很多的,要不也对不起DMA高速传输的称号了。CPU执行一条代码的速度是多个指令周期的,一个指令周期又等于多个机械周期,一个机械周期又等于多个时钟周期,这是为了使得CPU有处理更加复杂事情的能力,如运算等等。而DMA是专门为了传输而生的,不需要多余的动作。所以当遇到对速度有高要求的传输时,还是使用DMA吧。
DMA理论知识
祭出官方框图
DMA传输流程
外设通过AHB总线发送给DMA一个传输请求,DMA与其之间
数据流与请求通道
通道:外设的传输请求。(8个数据流对应1个通道,共64个)
数据流:数据的传输链路。(每个数据流可选择8个通道,共8条数据流)
通道与数据流之间的关系是:每个通道对应一种外设的传输请求,每个数据流可选八个通道的其中一个与之对应,并在接收到传输请求后,使用数据流传输数据。
仲裁器(优先级)
当多个数据流的数据来到DMA时,DMA同一时间只能服务一条数据流,那么就通过DMA优先级来决定谁先传输,优先级共四级(低,中,高,非常高),如果优先级相同,则比较数据流的号码(1-7),谁的数据流高,则为谁先提供服务。
FIFO介绍:传输缓冲器,用于源与目的直接的数据缓冲。FIFO大小为16个字节(4字)
数据传输的模式1(直接模式与FIFO模式)
DMA申请总线后,当数据通过数据流传输到DMA后(DMA传输一次为传输一个MSIZE(即为源的一次传输的大小)),
直接模式:数据传入FIFO,FIFO收到一字节数据后,直接发走,不在FIFO多做停留。
FIFO模式:数据传入FIFO,FIFO收到数据后,只有当数据达到阈值后,再发走
数据传输的模式2(单独模式与突发模式)
当数据要从FIFO向目的传输时,如何申请总线
单独模式:申请一个MSIZE的传输,多次申请,直到发完FIFO内的数据
突发模式:申请多个MSIZE的传输,将多组数据一次传输出去。
突发模式的传输与FIFO的传输有关系,这里设计到节拍的概念,一次节拍的意思可简单理解为传输一次MSIZE,4节拍二次突发的意思就是当一次传输两个MSIZE。
DMA事物与循环模式以及双缓冲模式
DMA事物包含传输的三个动作
①:通过DMA某个寄存器中获取源地址,并依据地址找到源数据并加载到DMA中
②:通过DMA某个寄存器中获取目标地址,并依据地址传输加载到DMA中的数据
③:DMA计数器减一,表示以完成一个动作
DMA一次请求最多传输65535个bit的数据,当数据完成后,即为这个最大为65535事物寄存器减到0,可配置是否继续循环传输。
双缓冲模式:即为多使用一个地址寄存器,使用一个后再换一个,循环使用,使用一个指针传输时,加载另一个指针,减少了传输动作。
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 ADR06AKSZ 的参考设计
- LTC1664IN 微功率四路 10 位 DAC 的典型应用
- LT3066IMSE-5 LED 驱动器和电流源的典型应用电路
- LTC2376-18、18 位、250ksps、低功率 SAR ADC 的典型应用电路
- LTC2939CMS 12V、5V、3.3V、2.5V、1.8V、1.2V 6 电源监视器的典型应用电路
- DC2459A-A,具有 LT1812 16 位、50Msps DAC、单端 ±1V 输出的 LTC1668 演示板
- LF60CV 6V 低压灯泡闪烁器的典型应用
- 具有关断低压差线性稳压器的 LT3007HTS8 3.3V、20mA 电源的典型应用电路
- LTC3835EGN-1 高效 9.5V、3A 降压转换器的典型应用电路
- LT8304IS8E 4V 至 80Vin、5Vout 隔离反激式转换器的典型应用电路
- 【FDCAN】STM32G0B1+FDCAN+HAL库调试记录
- S3c2440ARM异常与中断体系详解2---CPU模式(Mode)状态(State)
- ZDS2022十全十美示波器之4MptsFFT分析功能
- alpitronic用英飞凌CoolSiC™模块及驱动器 打造50 kW超级充电桩
- iPhone 14共四款机型:立讯拿下高端代工
- Ajax Systems携手豪威集团制造无线室外入侵探测器
- Galaxy S22 Ultra所有5种颜色高清渲染
- 新能源车会在未来取代燃油车已经成为了大家的共识
- NVIDIA 发布适用于医疗设备和计算传感系统的 AI 计算平台
- Synopsys长期 AI 投资正在取得回报