[应用相关] 一个dma通道没结束另一个dma通道会开启吗

[复制链接]
1738|6
 楼主| jheng 发表于 2019-5-8 16:01 | 显示全部楼层 |阅读模式
使用stm32的多个dma通道,当有多个dma通道同时响应,按照优先级以此响应,是不是一定到等高优先级的dma传输完成后再启动下一个dma
john_lee 发表于 2019-5-8 16:46 | 显示全部楼层
是的,但基本上不必纠结这个问题,每次传输都是一瞬间(几个时钟周期),就是说如果两个dma通道同时请求传输,那么低优先级的通道最多就耽误几个时钟周期而已。
 楼主| jheng 发表于 2019-5-9 09:45 | 显示全部楼层
john_lee 发表于 2019-5-8 16:46
是的,但基本上不必纠结这个问题,每次传输都是一瞬间(几个时钟周期),就是说如果两个dma通道同时请求传 ...

传输完成很慢啊,我dma传输100个字节到uart要好久的,是等它传输完成后才能开启其他的dma吗
john_lee 发表于 2019-5-9 10:19 | 显示全部楼层
多个DMA可以同时使用,UART发送的DMA的每次传输(1字节)是依靠UART的SR.TXE和CR3.DMAT位“相与”来触发的。当相与的结果为1时,该DMA通道会去申请数据总线,如果此时总线空闲(没有CPU访问存储,没有其它DMA正在传输,没有其它高优先级的DMA也在申请总线),那么总线仲裁将通过该申请,然后该DMA通道将从内存传输1字节到UART.DR,然后释放总线;如果总线正忙(被CPU或其它DMA占用),那么DMA会等待总线空闲。

实际上每次DMA传输所消耗的时间非常短,所占用总线的时间也非常短,所带来的开销基本可以忽略。
至于你描述的uart的情况,应该是其它的原因。
 楼主| jheng 发表于 2019-5-9 10:30 | 显示全部楼层
john_lee 发表于 2019-5-9 10:19
多个DMA可以同时使用,UART发送的DMA的每次传输(1字节)是依靠UART的SR.TXE和CR3.DMAT位“相与”来触发的 ...

你的意思是dma每次传输一个字节都会释放总线给其他通道用?我这边uart对外通讯9600的波特率,100字节数据通过dma从外设传出去,也是就说dma传送一个字节后,总线就释放了?然后等外设把数据传出去后又再次占用总线?
john_lee 发表于 2019-5-9 10:41 | 显示全部楼层
对啊,你想想,9600的波特率,大概1ms传输1字节,DMA如果全程占用总线,那么CPU都卡死了。
 楼主| jheng 发表于 2019-5-9 11:15 | 显示全部楼层
john_lee 发表于 2019-5-9 10:41
对啊,你想想,9600的波特率,大概1ms传输1字节,DMA如果全程占用总线,那么CPU都卡死了。 ...

好的,感谢帮忙分析
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

98

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部