CH32V103學習筆記之六——硬件IIC主模式連續(xù)接發(fā)數(shù)據(jù)
1、前言
????????第五篇介紹了CH32V103R8硬件IIC的初始化配置流程,單字節(jié)接發(fā)的配置流程(包括事件檢查超時的處理方式),以及中斷對IIC通信的影響情況。
????????0.96“OLED液晶屏初始化和更改顯示內容操作全部都是寫寄存器和寫數(shù)據(jù)。向0.96“OLED液晶屏寫入一個6x8點陣的字符需要連續(xù)寫入6字節(jié)數(shù)據(jù),一個8x16的點陣字符需要寫入16字節(jié)數(shù)據(jù)。MPU6050六軸電子陀螺儀除了初始化的時候向幾個參數(shù)配置的寄存器寫入設定的參數(shù)后,其他程序使用到的參數(shù)都需要使用IIC讀取MPU6050的數(shù)據(jù)寄存器中的值(7個16位的ADC測量值分高低字節(jié)在內部14個地址連續(xù)的數(shù)據(jù)寄存器存儲)。
??????? 接發(fā)數(shù)據(jù)的時候如果每接發(fā)完一字節(jié)數(shù)據(jù)就結束本次通訊,下一字節(jié)數(shù)據(jù)再從頭寫IIC從機地址、接發(fā)第二字節(jié)的數(shù)據(jù)。使用單字節(jié)接發(fā)循環(huán)操作實現(xiàn)接發(fā)多個字節(jié)IIC通訊的時間就會增加很多,降低了程序的執(zhí)行效率。所以,使用IIC連續(xù)接發(fā)數(shù)據(jù)有必要探索一番。本篇重點就IIC連續(xù)接發(fā)的配置流程做些說明。
2、IIC主模式連續(xù)發(fā)送(寫)數(shù)據(jù)
????????IIC主模式SCL時鐘信號由主機發(fā)起且通訊結束由主機發(fā)送停止信號。根據(jù)通訊時序說明,當EV8(TxE=1,移位寄存器非空,數(shù)據(jù)寄存器為空)出現(xiàn),就可以繼續(xù)發(fā)送下一字節(jié)數(shù)據(jù)至數(shù)據(jù)寄存器,或者發(fā)送停止信號結束本次通訊(再次發(fā)起通訊檢查EV5會檢查狀態(tài)寄存器標志位BTF(字節(jié)傳輸完成)是否通訊完成,所以這里只檢查EV8后發(fā)送停止信號不會造成最后一字節(jié)數(shù)據(jù)丟失),依此可以實現(xiàn)連續(xù)發(fā)送數(shù)據(jù)。

連續(xù)發(fā)送數(shù)據(jù)配置
邏輯分析儀抓取的通訊時序圖


3、IIC主模式連續(xù)接收(讀)數(shù)據(jù)
????????連續(xù)接收數(shù)據(jù)相較連續(xù)發(fā)送數(shù)據(jù)操作多了一些(部分操作涉及寄存器),因為SCL時鐘信號由主機提供,且要在合適時刻發(fā)送NACK信號結束接收數(shù)據(jù)。



連續(xù)接收數(shù)據(jù)配置(連續(xù)接收MPU6050的7個16位的原始測量數(shù)據(jù))
邏輯分析儀抓取的通訊時序圖

4、小結
????????使用硬件IIC連續(xù)發(fā)送接收數(shù)據(jù)的方法到這里就介紹完了,程序大部分是移植了之前在STM32F407平臺上反復驗證過的代碼,寄存器操作部分做了對應的調整。這里要小小吐槽一下,CH32V103參考手冊IIC章節(jié)并沒有提及具體操作流程,為了探究使用硬件IIC連續(xù)發(fā)送接收數(shù)據(jù)的方法,只能在參考手冊內容寫的更詳細的的STM32F407平臺做驗證再移植。

????????