rt-thread 是通過 I/O 設(shè)備模型來管理 soc 上的外設(shè),從上到下分為三層:I/O 設(shè)備管理層、設(shè)備驅(qū)動框架層和設(shè)備驅(qū)動層。stm32 的 HAL 庫就屬于設(shè)備驅(qū)動層,比如熟知的 i2c、spi 的外設(shè)驅(qū)動在用 cubemx 生成代碼的時候就已經(jīng)準備好。中科藍訊的 ab32vg1 的設(shè)備驅(qū)動已經(jīng)在sdk 中由藍訊的工程師實現(xiàn)。而在設(shè)備驅(qū)動層之上的設(shè)備驅(qū)動框架層和設(shè)備 I/O 管理層要說明一下:設(shè)備驅(qū)動框架層提供了一些接口留給設(shè)備驅(qū)動開發(fā)者去實現(xiàn),只在做驅(qū)動移植的時候需要,作為普通用戶,只需要關(guān)心 I/O 管理層即可,rt-thread 的 I/O 管理層提供了類似于 linux中文件 IO 的 ap,常用的有 rt_device_find、rt_device_open、rt_device_read、rt_device_close等。下面列舉了 hwtimer 的 api,結(jié)合示例去理解如何將這些 api 用起來實現(xiàn)定時器的功能。
//查找設(shè)備
/*
name:設(shè)備名稱
*/
rt_device_t rt_device_find(const char* name)
//打開定時器設(shè)備
/*
dev:定時器設(shè)備句柄
oflags:打開模式,一般取 RT_DEVICE_OFLAG_RDWR
*/
rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags);
//設(shè)置超時回調(diào)
/*
dev:定時器設(shè)備句柄
rx_ind:超時回調(diào)函數(shù)
*/
rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size))
//控制定時器
/*
dev:定時器設(shè)備句柄
cmd:控制命令,可取
HWTIMER_CTRL_FREQ_SET 設(shè)置計數(shù)頻率
HWTIMER_CTRL_STOP 停止定時器
HWTIMER_CTRL_INFO_GET 獲取定時器特征信息
HWTIMER_CTRL_MODE_SET 設(shè)置定時器模式
arg:控制命令參數(shù)
設(shè)置定時器模式時,可取
HWTIMER_MODE_ONESHOT 單 次 定 時
HWTIMER_MODE_PERIOD 周 期 性 定 時
*/
rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg);
//設(shè)置定時器超時值
/*
dev:定時器設(shè)備句柄
pos:偏移值,未使用,可取 0 值
buffer:指向超時時間結(jié)構(gòu)體
size:超時時間結(jié)構(gòu)體大小
*/
rt_size_t rt_device_write(rt_device_t dev,
rt_off_t pos,
const void* buffer,
rt_size_t size);
//獲取定時器當(dāng)前值
/*
dev:定時器句柄
pos:偏移值,未使用,可取 0 值
buffer:超時時間結(jié)構(gòu)體
size:超時時間結(jié)構(gòu)體大小
*/
rt_size_t rt_device_read(rt_device_t dev,
rt_off_t pos,
void* buffer,
rt_size_t size
);
//關(guān)閉定時器
/*
dev:定時器句柄
*/
rt_err_t rt_device_close(rt_device_t dev);
使用 rt-thread studio 進行 sdk 的開發(fā)是一件非常有效率的事情,新建 bsp 工程后只需要在rt-thread setting 配置需要的硬件功能就可以使用 rt-thread 提供的設(shè)備 I/O 管理接口對底層的 soc 的外設(shè)進行控制。從示例中可以定時器的流程:先用 rt_device_find 根據(jù)設(shè)備名稱查找到定時器句柄、使用定時器句柄打開定時器、接著設(shè)置定時器的回調(diào)函數(shù)、配置完定時器后設(shè)置定時器的定時值后定時器啟動,之后每當(dāng)定時器的計數(shù)器溢出就會執(zhí)行一次定時器的回調(diào)函數(shù)。
審核編輯:湯梓紅
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6625瀏覽量
123053 -
定時器
+關(guān)注
關(guān)注
23文章
3228瀏覽量
114200 -
Timer
+關(guān)注
關(guān)注
1文章
63瀏覽量
12760 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1251瀏覽量
39754
發(fā)布評論請先 登錄
相關(guān)推薦
評論