胖胖的龙 · 2022年09月09日 · 江苏

【MM32F5270开发板试用】巧用SPI状态寄存器对齐时序操作逻辑

最近使用MM32F5270开发板有用到带有SPI接口的液晶屏(驱动型号HX8257)显示一些调试信息,不过使用中发现一个奇怪的现象,MCU的SPI工作在高速下可以对液晶进行正常的控制,但当SPI时钟降低后液晶屏就不能正常工作了。

这个现象比较奇怪。后来通过示波器抓取SPI clock的波形以及控制信号的波形发现问题所在。原来我们在使用SPI发送数据时一般通SPI_I2S_INTSTAT. TXEPT来判断是否数据是否可以继续写入。由于SPI这种串行设备rx tx是有移位寄存器buf存在的,一般情况下当tx数据被SPI copy到tx buf上后SPI_I2S_INTSTAT. TXEPT即被置位。

spi sr 寄存器.PNG
spi sr 寄存器说明.PNG
但是此时数据实际还未发出,如果基于该位进行逻辑判断就会导致控制信号与实际SPI数据的异位进而导致控制时序失效(这是低速下驱动失效的原因)。

tx spi 信号.PNG

SPI处于高速情况下由于时钟比较快,加上一些代码判断逻辑的延时,进而导致控制信号刚好满足了液晶屏的驱动时序(在SPI发送结束后翻转,这只是一个偶然事件),如下图
rx 高速spi 信号.PNG

但是如果选着SPI_I2S_INTSTAT.RXAVL进行判断,就可以解决以上问题。因为SPI数据的接收必须等到SPI clock结束rx Buf数据被copy到SPI_I2S_RXREG接收数据寄存器中才会置位,如下图所示。
rx spi 信号.PNG

最终通过对SPI_I2S_INTSTAT.RXAVL状态位的判断完成了液晶驱动的优化,结果显示不论什么速度的SPI都可以很好的完成对屏幕的控制,由于没有使用delay函数,驱动稳定性大大提高。

推荐阅读
关注数
6151
内容数
276
灵动MM32 MCU相关技术知识,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息