RT-Thread 驅(qū)動(dòng)開發(fā)簡(jiǎn)介
RT-Thread驅(qū)動(dòng)開發(fā)最開始應(yīng)該是要閱讀官方的文檔,理解驅(qū)動(dòng)的運(yùn)行原理和使用方法。ADC部分的文檔在這里https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc
RT-Thread中驅(qū)動(dòng)程序的思想有些類似于Kernel或UBoot中驅(qū)動(dòng)的思路,通常的流程是驅(qū)動(dòng)主動(dòng)注冊(cè)設(shè)備,應(yīng)用程序查找并打開設(shè)備調(diào)用系統(tǒng)接口完成功能調(diào)用。
開發(fā)要做的工作大致有如下四部分:
1、編寫通用的和板級(jí)電路無(wú)關(guān)的驅(qū)動(dòng)代碼drv_adc.c,這部分驅(qū)動(dòng)盡量覆蓋片內(nèi)外設(shè)的所有通道。
2、編寫板級(jí)相關(guān)的代碼,放在board_config.c中,板級(jí)初始化的代碼完成初始化具體引腳等功能,通常由RT_USING_XXX這樣的配置宏來(lái)控制編譯。
3、修改編譯控制文件和配置選項(xiàng),把驅(qū)動(dòng)加入系統(tǒng)中。
4、編寫使用該驅(qū)動(dòng)的代碼實(shí)現(xiàn)驅(qū)動(dòng)查找和調(diào)用。
drv_adc.c通用驅(qū)動(dòng)編寫方法
通用驅(qū)動(dòng)中一般有兩個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):rt_adc_ops把通過驅(qū)動(dòng)操作外設(shè)完成功能的代碼注冊(cè)到設(shè)備樹中。還有一個(gè)自定義數(shù)據(jù)結(jié)構(gòu)struct hc32_adc_device用于記錄MCU外設(shè)的配置和運(yùn)行時(shí)所需數(shù)據(jù)。
ADC驅(qū)動(dòng)代碼結(jié)構(gòu)不復(fù)雜,主要有兩個(gè)函數(shù)完成hc32_adc_enabled和hc32_adc_convert。其中hc32_adc_enabled主要配置外設(shè)時(shí)鐘、采樣精度、對(duì)齊方式、掃描模式、等外設(shè)特性,hc32_adc_convert完成參數(shù)指定通道的數(shù)據(jù)的實(shí)際采集工作。這部分功能參考官方的樣例不難實(shí)現(xiàn)。
板級(jí)初始化代碼
板級(jí)初始化代碼放在board_config.c中。

修編譯選項(xiàng)并進(jìn)行配置
* 修改ddl_config.h開啟DDL_ADC_ENABLE

* 修改Libaries\SConscript包含hc32f460_adc.c,如果需要dma的話把dma添加到公共部分

* 修改drivers\SConscript包含drv_adc.c

* 修改board\Kconfig增加ADC相關(guān)的配置

* 執(zhí)行menuconfig開啟adc

* 重新生成工程
編寫應(yīng)用代碼查找驅(qū)動(dòng)并進(jìn)行調(diào)用。
開發(fā)資料
HC32F460用戶手冊(cè)
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/65/id/47/key/0
HC32F460數(shù)據(jù)手冊(cè)
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/65/id/46/key/0
HC32F460驅(qū)動(dòng)庫(kù)
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/66/id/57/key/9
HC32F460驅(qū)動(dòng)庫(kù)幫助
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/66/id/57/key/8
HC32F460IDE支持包
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/66/id/58/key/2