CH32V103学习笔记之六——硬件IIC主模式连续接发数据
1、前言
第五篇介绍了CH32V103R8硬件IIC的初始化配置流程,单字节接发的配置流程(包括事件检查超时的处理方式),以及中断对IIC通信的影响情况。
0.96“OLED液晶屏初始化和更改显示内容操作全部都是写寄存器和写数据。向0.96“OLED液晶屏写入一个6x8点阵的字符需要连续写入6字节数据,一个8x16的点阵字符需要写入16字节数据。MPU6050六轴电子陀螺仪除了初始化的时候向几个参数配置的寄存器写入设定的参数后,其他程序使用到的参数都需要使用IIC读取MPU6050的数据寄存器中的值(7个16位的ADC测量值分高低字节在内部14个地址连续的数据寄存器存储)。
接发数据的时候如果每接发完一字节数据就结束本次通讯,下一字节数据再从头写IIC从机地址、接发第二字节的数据。使用单字节接发循环操作实现接发多个字节IIC通讯的时间就会增加很多,降低了程序的执行效率。所以,使用IIC连续接发数据有必要探索一番。本篇重点就IIC连续接发的配置流程做些说明。
2、IIC主模式连续发送(写)数据
IIC主模式SCL时钟信号由主机发起且通讯结束由主机发送停止信号。根据通讯时序说明,当EV8(TxE=1,移位寄存器非空,数据寄存器为空)出现,就可以继续发送下一字节数据至数据寄存器,或者发送停止信号结束本次通讯(再次发起通讯检查EV5会检查状态寄存器标志位BTF(字节传输完成)是否通讯完成,所以这里只检查EV8后发送停止信号不会造成最后一字节数据丢失),依此可以实现连续发送数据。

连续发送数据配置
逻辑分析仪抓取的通讯时序图


3、IIC主模式连续接收(读)数据
连续接收数据相较连续发送数据操作多了一些(部分操作涉及寄存器),因为SCL时钟信号由主机提供,且要在合适时刻发送NACK信号结束接收数据。



连续接收数据配置(连续接收MPU6050的7个16位的原始测量数据)
逻辑分析仪抓取的通讯时序图

4、小结
使用硬件IIC连续发送接收数据的方法到这里就介绍完了,程序大部分是移植了之前在STM32F407平台上反复验证过的代码,寄存器操作部分做了对应的调整。这里要小小吐槽一下,CH32V103参考手册IIC章节并没有提及具体操作流程,为了探究使用硬件IIC连续发送接收数据的方法,只能在参考手册内容写的更详细的的STM32F407平台做验证再移植。
