思澈科技软件开发工具包  2.20
硬件定时器

有 3 种不同类型的硬件定时器:

  • 通用定时器 (GPTim) BTim 为系统 PCLK 实现一个 16 位计数器,提供 1-65536 分频器。具有4个输入/输出通道,可独立配置为输入/输出模式。 GPTim 可用于 PWM 以生成波或测量输入信号。
  • Basic Timer (BTim) BTim 为系统 PCLK 实现了一个 32 位计数器,提供 1-65536 分频器。它可以用作定时器或通过其触发输出驱动 DAC。
  • 低功耗定时器(LPTim) LPTim 为系统 PCLK 或低功耗时钟实现 16 位计数器,提供 1-128 分频器。用于系统休眠/唤醒,可独立于系统时钟运行,并在系统进入休眠状态后提供唤醒信号。

Hardware Timer驱动包括两层:硬件访问层(HAL)和RT-Thread的适配层。
HAL 提供了用于访问硬件定时器外设寄存器的基本 API。有关详细信息,请参阅硬件计时器 HAL 的 API 文档。
适配层提供对 RT-Thread 驱动框架的支持。用户可以使用 RT-Thread POSIX 驱动程序接口使用 Timer 进行编程。 GPTim、BTim 和 LPTim 的设备名称是 GPTim[1,2,3,4,5],BTim[1,2,3,4],LPTim[1,2]。 LPTim 通常保留用于低功耗管理。

驱动配置

硬件驱动程序可以使用 GPTim/BTim/LPTime 外设的多个实例。 它可以使用 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

配置完成后,用户需要在所有需要访问驱动程序的源代码中包含头文件。

使用硬件定时器

适配器层注册 RT-Thread 请求的硬件支持功能,并使用 HAL 实现这些功能。 对于 Hareware Timer HAL 公开的 API,请参考 Hardware TimerLow power hardware timer. 。 了解详情。 对于使用 RT-Thread 的用户,可以使用以下代码作为示例:

// Find and open device
rt_device_t timer_dev = rt_device_find("GPTim2");
rt_err_t err = rt_device_open(timer_dev, RT_DEVICE_FLAG_RDWR);
// Configure Timer
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);
// Prepare for timeout
rt_device_set_rx_indicate(timer_dev, timeout_ind);
// Start timer
rt_hwtimerval_t t={3,500}; // 3 seconds and 500 microseconds
ret = rt_device_write(timer_dev, 0, &t, sizeof(t));
...
// Interrupt callback
static rt_err_t timeout_ind(rt_device_t dev, rt_size_t size)
{
rt_kprintf("Timeout \n");
}