打印
[STM32F1]

一个dma通道没结束另一个dma通道会开启吗

[复制链接]
612|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlyuan|  楼主 | 2021-3-18 22:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用stm32的多个dma通道,当有多个dma通道同时响应,按照优先级以此响应,是不是一定到等高优先级的dma传输完成后再启动下一个dma

使用特权

评论回复
沙发
chuxh| | 2021-3-18 22:25 | 只看该作者
是的

使用特权

评论回复
板凳
llljh| | 2021-3-18 22:30 | 只看该作者
但基本上不必纠结这个问题

使用特权

评论回复
地板
dingy| | 2021-3-18 22:32 | 只看该作者
每次传输都是一瞬间

使用特权

评论回复
5
supernan| | 2021-3-18 22:35 | 只看该作者
几个时钟周期

使用特权

评论回复
6
liuzaiy| | 2021-3-18 22:38 | 只看该作者
就是说如果两个dma通道同时请求传输,那么低优先级的通道最多就耽误几个时钟周期而已。

使用特权

评论回复
7
jlyuan|  楼主 | 2021-3-18 22:40 | 只看该作者
传输完成很慢啊

使用特权

评论回复
8
jlyuan|  楼主 | 2021-3-18 22:42 | 只看该作者
我dma传输100个字节到uart要好久的

使用特权

评论回复
9
zyf部长| | 2021-3-18 22:49 | 只看该作者
是等它传输完成后才能开启其他的dma吗

使用特权

评论回复
10
xxmmi| | 2021-3-18 22:52 | 只看该作者
多个DMA可以同时使用,UART发送的DMA的每次传输(1字节)是依靠UART的SR.TXE和CR3.DMAT位“相与”来触发的。当相与的结果为1时,该DMA通道会去申请数据总线,如果此时总线空闲(没有CPU访问存储,没有其它DMA正在传输,没有其它高优先级的DMA也在申请总线),那么总线仲裁将通过该申请,然后该DMA通道将从内存传输1字节到UART.DR,然后释放总线;如果总线正忙(被CPU或其它DMA占用),那么DMA会等待总线空闲。

使用特权

评论回复
11
xxrs| | 2021-3-18 22:53 | 只看该作者
实际上每次DMA传输所消耗的时间非常短

使用特权

评论回复
12
wuhany| | 2021-3-18 22:57 | 只看该作者
所占用总线的时间也非常短

使用特权

评论回复
13
lizye| | 2021-3-18 22:59 | 只看该作者
所带来的开销基本可以忽略

使用特权

评论回复
14
xxrs| | 2021-3-18 23:02 | 只看该作者
至于你描述的uart的情况,应该是其它的原因。

使用特权

评论回复
15
jlyuan|  楼主 | 2021-3-18 23:03 | 只看该作者
你的意思是dma每次传输一个字节都会释放总线给其他通道用?

使用特权

评论回复
16
jlyuan|  楼主 | 2021-3-18 23:06 | 只看该作者
我这边uart对外通讯9600的波特率,100字节数据通过dma从外设传出去

使用特权

评论回复
17
午夜粪车| | 2021-3-18 23:09 | 只看该作者
也是就说dma传送一个字节后,总线就释放了?

使用特权

评论回复
18
houcs| | 2021-3-18 23:11 | 只看该作者
然后等外设把数据传出去后又再次占用总线?

使用特权

评论回复
19
dingy| | 2021-3-18 23:14 | 只看该作者
对啊,你想想,9600的波特率,大概1ms传输1字节,DMA如果全程占用总线,那么CPU都卡死了。

使用特权

评论回复
20
jlyuan|  楼主 | 2021-3-18 23:15 | 只看该作者
好的,感谢帮忙分析

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝