RT-Thread 驅(qū)動開發(fā)簡介
RT-Thread驅(qū)動開發(fā)最開始應(yīng)該是要閱讀官方的文檔,理解驅(qū)動的運行原理和使用方法。SPI部分的文檔在這里https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/spi/spi
RT-Thread中驅(qū)動程序的思想有些類似于Kernel或UBoot中驅(qū)動的思路,通常的流程是驅(qū)動主動注冊設(shè)備,應(yīng)用程序查找并打開設(shè)備調(diào)用系統(tǒng)接口完成功能調(diào)用。
開發(fā)要做的工作大致有如下四部分:
1、編寫通用的和板級電路無關(guān)的驅(qū)動代碼drv_spi.c,這部分驅(qū)動盡量覆蓋片內(nèi)外設(shè)的所有通道。
2、編寫板級相關(guān)的代碼,放在board_config.c中,板級初始化的代碼完成初始化具體引腳等功能,通常由RT_USING_XXX這樣的配置宏來控制編譯。
3、修改編譯控制文件和配置選項,把驅(qū)動加入系統(tǒng)中。
4、編寫使用該驅(qū)動的代碼實現(xiàn)驅(qū)動查找和調(diào)用。
drv_adc.c通用驅(qū)動編寫方法
通用驅(qū)動中一般有兩個關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):rt_spi_ops把通過驅(qū)動操作外設(shè)完成功能的代碼注冊到設(shè)備樹中。還有多個自定義數(shù)據(jù)結(jié)構(gòu)用于記錄MCU外設(shè)的配置和運行時所需數(shù)據(jù)。
SPI驅(qū)動代碼結(jié)構(gòu)相對復(fù)雜,主要有兩個函數(shù)完成hc32_spi_configure和hc32_spi_xfer。其中hc32_spi_configure完成SPI外設(shè)的初始化操作,包括配置外設(shè)時鐘,主從模式、3&4線配置、相位和極性、LSB或MSB、數(shù)據(jù)位寬、速率、DMA等外設(shè)特性。hc32_spi_xfer指定上的數(shù)據(jù)傳輸工作,此函數(shù)同時支持polling和dma兩種模式,為了追求高速率一般建議啟用DMA。
板級初始化代碼
板級初始化代碼放在board_config.c中。

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

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

* 修改drivers\SConscript包含drv_spi.c

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

* 執(zhí)行menuconfig開啟adc

* 重新生成工程
使用scons --target=mdk5命令重新生成工程。
編寫應(yīng)用代碼查找驅(qū)動并進(jìn)行調(diào)用
1、查找和配置SPI

2、讀取和寫入SPI


開發(fā)資料
HC32F460用戶手冊
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/65/id/47/key/0
HC32F460數(shù)據(jù)手冊
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/65/id/46/key/0
HC32F460驅(qū)動庫
https://www.hdsc.com.cn/cn/Index/downloadFile/modelid/66/id/57/key/9
HC32F460驅(qū)動庫幫助
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