一步到位!教你RT-Thread上設(shè)備IIC驅(qū)動移植
趟過前面RT-Thread在GD32E230CotexM23上的坑之后,繼續(xù)進(jìn)行了RT-Thread端設(shè)備驅(qū)動的驗證測試。《國產(chǎn)GD32替代:RT-Thread在CotexM23上的起起伏伏》
IIC作為很多設(shè)備之間通信的基礎(chǔ)通信方式,起使用程度和普及程度基本也算是很多MCU的標(biāo)配,即使沒有硬件IIC,用軟件對GPIO口也可以模擬出軟件方面的IIC,自然GD32E230作為ARMv8架構(gòu)的CotexM23系列的芯片,硬件IIC還是有的,而且SDK里面也留了完整的例程,可以根據(jù)實際需求去使用。
當(dāng)然本文不是想使用裸機(jī)上的IIC驅(qū)動,而是RT-Thread RTOS上的IIC驅(qū)動,這里我們還是先來看看RT-Thread上外設(shè)驅(qū)動的結(jié)構(gòu),參考的官方文檔。
其他的細(xì)節(jié)還是參考官方文檔,以下是官方鏈接:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/device
1、RT-Thread移植IIC到CotexM23中
工程文件芯片軟件IIC、硬件IIC選取
芯片硬件端使用函數(shù)
RT-Thread端驅(qū)動層
IIC數(shù)據(jù)傳輸里面比較關(guān)鍵的函數(shù)
處理好上面的相關(guān)內(nèi)容后,還有一些宏的使用,以及硬件IIC使用的是那些IO口,然后跟裸機(jī)一樣的情形,需要回到對硬件的一些初始化操作。要在RTThread上用上驅(qū)動框架的東西,實際上就是要中間使用一個過渡層,原來操作硬件使用直接操作寄存器,RT-Thread上處理直接操作寄存器,還需要對相應(yīng)的讀寫等函數(shù)進(jìn)行封裝,供應(yīng)用層直接使用,所以實際上較裸機(jī)程序多了很多內(nèi)容,但是這個好處也是有的,可以將系統(tǒng)和硬件進(jìn)行隔離。移植完上面開始進(jìn)行EEPROM的操作實踐。
2、RT-Thread IIC驅(qū)動EEPROM
多的不用說,看寫EEPROM寄存器
接下來看看讀寄存器
讀寫EEPROM內(nèi)容
這里有一些細(xì)節(jié)說明,根據(jù)IIC的操作時序,給寄存器寫值之前,首先需要寫入寄存器的地址,因此msg.buf 中需要包含寄存器的地址,和后續(xù)寫入的值,如要寫入EEPROM前面0-15寄存器的值,定義的msg.buf的長度為17個字節(jié),讀的過程直接將寫地址和讀寄存器分開寫,這樣更清晰,主要是根據(jù)IIC的操作時序,多字節(jié)讀寫等相關(guān)內(nèi)容,具體的也可以百度查找。
3、RT-Thread IIC驅(qū)動EEPROM實踐2
同樣的首先看讀寫寄存器函數(shù)
讀寫EEPROM內(nèi)容
運行結(jié)果如下圖
這兩者之間只是函數(shù)使用的不同,然后操作的細(xì)節(jié)可能不一樣,但是還是前面一種更符合RT-Thread系統(tǒng)上使用的IIC驅(qū)動。
4、RT-Thread IIC總結(jié)
完成以上的移植和EEPROM上面的實踐,下一步運用到實際項目中IIC驅(qū)動氣壓芯片,由于芯片、傳感器緊張,打算使用多種氣壓傳感器,以作備胎,呵呵!文章純屬個人意見,如有不妥之處請指正,謝謝!文章最后附上此次移植、實踐工程代碼。??
GD32E23x_Demo_RTT_IIC.rar (1.5 MB, 附件下載請點擊“閱讀原文”)
END
來源:網(wǎng)絡(luò)版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
▍