打印
[RISC-V MCU 应用开发]

CH32V103 的 SPI+DMA 的状态寄存器请教

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

CH32V103 的 SPI+DMA 的状态寄存器请教:
这个代码是驱动ST7789彩屏的,采用硬件16位SPI+16位DMA传送显示的数据,指令数据由8位SPI查询死循环等待传送。
代码逻辑是:
设置显示坐标
SPI+DMA传送数据
查询等待传送结束
返回再次循环。

代码如下图:语句28 的 while() 和 语句29 同时移动(语句29可以删除)
如果不移动,保持在位置1,功能正常;(彩屏半个屏幕颜色不断的变化)
如果移动到位置3,功能正常;
如果移动到位置2(我就是想移动到这里),功能不正常!(屏幕只有最开始的3个像数点的颜色在变化,就是说SPI的DMA看上去只传输了3个16位的数据就结束了)

我的意思是,语句35填充颜色函数,SPI启动DMA后(示波器观察大约需要60ms传送完成),我就不想死循环的等待,下次需要 SPI 时再判断再处理。
下次需要:就是再次循环到语句32设置显示的坐标函数,于是,我在这个函数的内部的开始处,加入这个while()来判断之前的SPI是否结束,结果这个语句在这里就不正常了,请教一下大家,有空帮我看看是什么回事?


微信图片_20250330182308.png (76.06 KB )

微信图片_20250330182308.png

CH32V103R8T6_Basic.rar

607.76 KB

使用特权

评论回复

相关帖子

沙发
LIzs6| | 2025-3-31 13:43 | 只看该作者
建议你把不同位置对应的屏幕显示现象放一下。根据程序,位置1和位置2基本没区别,唯一区别可能是while等待与SPI初始化之间的间隔大一些,你可以在片选之后加几个nop指令试一下

使用特权

评论回复
板凳
panxiaoyi|  楼主 | 2025-4-1 00:41 | 只看该作者
好的,过几天试试,这几天比较忙,多谢先

使用特权

评论回复
地板
panxiaoyi|  楼主 | 2025-4-1 23:29 | 只看该作者
本帖最后由 panxiaoyi 于 2025-4-1 23:58 编辑

应该是楼上 LIzs6 说的问题,我插多一条不相干的语句,显示又不同了,估计是CS、DC、与SPI的时序出现了问题

使用特权

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

本版积分规则

52

主题

410

帖子

2

粉丝