WenShan 发表于 2024-2-21 20:09:15

大佬们,关于DMA的FIFO和突发模式我还不太明白,我现在的理解有什么问题吗

本帖最后由 WenShan 于 2024-2-22 12:06 编辑

①直接模式和使能FIFO两个是相对的?
   直接模式就是不使能FIFO是吗。直接模式就是fifo里面进一个数据就出一个是吗,所以要求进出两边的数据宽度要一样是吗
图1
使能了FIFO之后,如果这里突发设置成第一个之后,就和直接模式差不太多是吗?




②普通模式和循环模式
   普通模式就是接收一个请求之后就发送一次数据,如果接收到了第二个请求也不会发送数据的意思吗?循环模式就是接收一次请求就发送一次数据,没有次数限制是吗。然后我去翻hal库,发现里面有个DMA_PFCTRL模式,不太清楚是干什么用的。




③这里的datalength实际上不是数据长度,而是类似于发送数据的次数的意思是吗
图2
就比如说如果msize和psize都是word四字节,datalength设置为4,就是实际发送了十六字节是吗


④单次传输和突发传输
图3
    一般情况下,是DMA要发送一次数据就会去总线那边请求一次,如果要发四个数据就请求四次是吗?突发传输的一次就是只去总线那边请求一次,然后一次把要发的数据发完是吗?然后发数据的个数和pburst里面设置的突发大小有关是吗。


⑤突发传输要使能FIFO,突发传输是要怎么触发啊?是就只看FIFO里面设置的阈值吗?
    就比如我msize设置的字节,然后阈值设置的一半,fifo里面灌到一半就自己触发突发传输吗?
    还有就是突发传输msize是字节,设置的满,INCR4,8,16之间的区别不太理解。一次16节拍,两次8节拍和四次4节拍之间的差别就是一次16节拍的突发中间一只占着总线,四次4节拍中间释放过总线是吗?
    还有就是DMA怎么往fifo里面灌的数据,是用户不用太管是吗,外设和内存里面都自己硬件弄好了是吗,这个灌的速度用户可以改吗?






补:我在看视频时候一直不知道datalength指的是啥,然后去翻hal库的时候发现他就是DMA_SxNDTR要设置的值,我看硬汉老哥和安富莱手册上面好像没有特别讲这两个,我翻手册时候看到里面写了这个,就贴过来了
图4
    DMA这块的东西我翻来翻去怎么着也弄不太明白,原来没怎么学过这块,没啥基础,看了视频和v7手册之后感觉还有不少地方不太理解,希望大佬们能帮我下{:19:}
   

eric2013 发表于 2024-2-22 09:03:56

楼主方便的时候,把图片单独上传下,我们论坛有bug,复制i粘贴的不行。

WenShan 发表于 2024-2-22 12:07:37

eric2013 发表于 2024-2-22 09:03
楼主方便的时候,把图片单独上传下,我们论坛有bug,复制i粘贴的不行。

老哥我重新上传了,我不知道这块我哪里理解的有问题,可以把我理解有问题的地方和我说说吗

eric2013 发表于 2024-2-22 15:04:52

1、对,效果差不多。
2、有次数限制,通用DMA是65535次。
3、对
4、突发传输是一次请求,连续传输的次数。
5、节拍就是DMA的一次数据传输,比如8个节拍的一次突发就是指:一次突发,连续传输8次数据。
突发传输和FIFO的配合是DMA自动完成的,也就是这个表格支持的配置选项,禁止的方式,切勿配置。
页: [1]
查看完整版本: 大佬们,关于DMA的FIFO和突发模式我还不太明白,我现在的理解有什么问题吗