打印

GD32F3xx的DMA0与DMA1,二者是完全独立运行的吗?

[复制链接]
158|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TECHWELL|  楼主 | 2025-1-19 22:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 TECHWELL 于 2025-1-19 22:56 编辑

我的小系统中,基本组成如下:
    FreeRTOS+emwin+3.5寸彩屏+4线电阻触摸;
GD32F305+ILI9341,
GD32F305用SPI1 + DMA0_CH4驱动ILI9341,刷屏速度还不错,可以接受;

    利用TIMER4_CH0,输出类似于UART的TX脉冲波形,用以控制RGB LED彩灯
(UART难以实现此功能)。
脉冲宽度由 TIMER4_CH0CV(输出比较通道)控制.

事先计算好 TIMER4_CH0CV 需要的比较值,存放在数组tq[]中。在
每次比较匹配时,输出电平翻转一次,同时,由DMA1_CH4传送tq[]内容值到TIMER4_CH0CV
,从而生成想要脉冲,脉宽最短约4uS。

     问题来了!
    在SPI1 + DMA0_CH4刷新ILI9341彩屏期间,不能启动DMA1_CH4;
而是要等待刷屏完成,才能响应TIMER4比较匹配所触发的DMA1_CH4请求,这会导致脉冲宽度严重走样!
     照理说,DMA0与DMA1不应该是独立的,可以同时运行的吗?        在此之前,用STM32时,没有遇到类似的问题。



使用特权

评论回复
评论
xch 2025-1-20 11:52 回复TA
把DMA1_CH4 的优先级提高到比DMA0_CH4高 
沙发
yangxiaor520| | 2025-1-20 07:55 | 只看该作者
看下一下数据手册里面的DMA框图

使用特权

评论回复
板凳
xch| | 2025-1-20 11:54 | 只看该作者
配置 DMA_CHxCTL 寄存器的 PRIO 位域

使用特权

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

本版积分规则

23

主题

75

帖子

6

粉丝