本帖最后由 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时,没有遇到类似的问题。
|
把DMA1_CH4 的优先级提高到比DMA0_CH4高