如何理解DMA突发传输模式?

 2024-02-25 00:04:43  阅读 0

突发模式[编辑]

数据块合二为一。 一旦DMA被CPU传到总线上,它就将总线数据块中的所有字节数据传回到CPU,但CPU的时间很长。 该模式也是“块模式”。 它还用于停止数据。

循环模式[编辑]

循环模式用于 CPU 不适合突发模式的情况。 在循环模式下,DMA到总线的方式与突发模式下相同,使用BR(Bus)和BG(Bus Grant),这是CPU和DMA的两个。 ,在循环模式下,一个字节的数据后,总线的经BG到CPU。

然后再次通过BR,每一个字节的数据,直到数据块已经完成。 由总线、DMA 和数据组成。 CPU 一个,然后 DMA 一个数据值,依此类推。 一方面数据块不像突发模式那样循环模式,但另一方面CPU也不像突发模式那么长时间空闲。 循环模式适用于实时数据。

模式[编辑]

模式花费最多的时间来处理一个数据块,但它也是最多的模式。 在DMA模式下,只有当CPU不使用总线时才传输数据。 模式是CPU永远不会停止它并且DMA在时间上是空闲的,而模式是当CPU不使用总线时需要,这可以是。

以下是我的理解

维基百科上有三种传输模式:

突发模式 循环传输模式 透明模式

传输模式com是什么_传输模式c=1_传输模式com

DMA和CPU共享总线,因此这三种模式提供了三种方法来解决如何共享总线。

突发模式:当DMA成功申请总线后,会不断地传输数据,不给CPU使用总线的机会,直到数据传输完成。 例如STM32设置突发传输为4节拍,传输宽度为8位。 那么一个DMA请求会连续传输4个字节,是单次传输的4倍。

循环传输模式:这应该是常用的DMA模式,即一个DMA请求申请一次总线,传输1个字节。

透明模式:DMA在总线空闲时传输。 stm32不应该有这个模式。

至于何时使用突发模式,应该是《stm32参考手册》中提到的封装/解封装:

传输模式c=1_传输模式com_传输模式com是什么

在封装/解封装数据的过程中,如果在数据完全封装/解封装之前中断操作,则存在数据损坏的风险。

因此,为了保证数据的一致性,可以将数据流配置为产生突发传输:在这种情况下,

每组传输都是不可分割的(参见第 8.3.11 节:单次和突发传输)。

为什么封装/解封装时存在数据损坏的风险? 例如,外设中有一组寄存器是实时链接的,即随着时间的变化,这组寄存器会发生变化。 如果我们在第一时刻取寄存器前半部分的值,在稍后时刻取寄存器后半部分的值,那么将两者封装起来就会损坏数据。 所以我们需要同时取出所有的值。 这时候我们就需要使用突发传输,因为传输时只有dma使用总线,寄存器不会改变。

另外,源数据宽度和目标数据宽度何时会不同? 例如,如果您有一个小型外部RAM,它只有8位数据线; 有一个外设寄存器,缺少一些低地址线,只能以32位访问,所以。 。 。 。

以上都是我自己纸上的想法,没有在板上测试过,所以只能提供一个想法。

标签: 传输 突发 总线

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码