有 3 種不同類型的硬件定時器:
- 通用定時器 (GPTim) BTim 為系統(tǒng) PCLK 實現(xiàn)一個 16 位計數(shù)器,提供 1-65536 分頻器。具有4個輸入/輸出通道,可獨立配置為輸入/輸出模式。 GPTim 可用于 PWM 以生成波或測量輸入信號。
- Basic Timer (BTim) BTim 為系統(tǒng) PCLK 實現(xiàn)了一個 32 位計數(shù)器,提供 1-65536 分頻器。它可以用作定時器或通過其觸發(fā)輸出驅(qū)動 DAC。
- 低功耗定時器(LPTim) LPTim 為系統(tǒng) PCLK 或低功耗時鐘實現(xiàn) 16 位計數(shù)器,提供 1-128 分頻器。用于系統(tǒng)休眠/喚醒,可獨立于系統(tǒng)時鐘運行,并在系統(tǒng)進入休眠狀態(tài)后提供喚醒信號。
Hardware Timer驅(qū)動包括兩層:硬件訪問層(HAL)和RT-Thread的適配層。
HAL 提供了用于訪問硬件定時器外設(shè)寄存器的基本 API。有關(guān)詳細信息,請參閱硬件計時器 HAL 的 API 文檔。
適配層提供對 RT-Thread 驅(qū)動框架的支持。用戶可以使用 RT-Thread POSIX 驅(qū)動程序接口使用 Timer 進行編程。 GPTim、BTim 和 LPTim 的設(shè)備名稱是 GPTim[1,2,3,4,5],BTim[1,2,3,4],LPTim[1,2]。 LPTim 通常保留用于低功耗管理。
驅(qū)動配置
硬件驅(qū)動程序可以使用 GPTim/BTim/LPTime 外設(shè)的多個實例。 它可以使用 menuconfig 工具為每個項目選擇,通常保存在 C 頭文件中。 默認情況下,配置保存為 rtconfig.h。
以下示例顯示在一個項目頭文件中定義的標志,該項目使用 LPTim1、BTim1、GPTim2 和 GPTim3。
#define BSP_USING_TIM
#define BSP_USING_LPTIM1
#define BSP_USING_BTIM1
#define BSP_USING_GPTIM2
#define BSP_USING_GPTIM3
配置完成后,用戶需要在所有需要訪問驅(qū)動程序的源代碼中包含頭文件。
使用硬件定時器
適配器層注冊 RT-Thread 請求的硬件支持功能,并使用 HAL 實現(xiàn)這些功能。 對于 Hareware Timer HAL 公開的 API,請參考 Hardware Timer 和 Low power hardware timer. 。 了解詳情。 對于使用 RT-Thread 的用戶,可以使用以下代碼作為示例:
rt_device_t timer_dev = rt_device_find("GPTim2");
rt_err_t err = rt_device_open(timer_dev, RT_DEVICE_FLAG_RDWR);
int freq=1000000;
rt_device_control(timer_dev, HWTIMER_CTRL_FREQ_SET, (void *)&freq);
int mode=HWTIMER_MODE_ONESHOT;
rt_device_control(timer_dev, HWTIMER_CTRL_MODE_SET, (void *)&mode);
rt_device_set_rx_indicate(timer_dev, timeout_ind);
rt_hwtimerval_t t={3,500};
ret = rt_device_write(timer_dev, 0, &t, sizeof(t));
...
static rt_err_t timeout_ind(rt_device_t dev, rt_size_t size)
{
rt_kprintf("Timeout \n");
}