|
xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
|
版本:0.1 | 日期:2026-07-03 | 路径: platforms/components/xtiny/xt_hal/
xt_hal_timer 是 XTINY HAL 硬件定时器模块,基于芯片硬件定时器外设提供单次/周期触发、启动/停止控制以及频率计数查询等功能。定时器超时后通过回调通知用户。
设计原则 :
| 依赖 | 用途 |
|---|---|
| xt_hal_internal.h | 错误码类型 xt_err_t 及平台内部定义 |
定时器超时时间由两个参数共同决定:
其中定时器实际频率 = 时钟源频率 / (预分频值 + 1) ,预分频值由 tick_freq_hz 参数推导得出:
因此,用户通常只需要设置 tick_freq_hz 和 tick_num ,无需关心底层分频细节。若需精确了解实际定时器频率,可使用 xt_hal_timer_get_clk_src_freq 和 xt_hal_timer_get_prescaler 查询。
| 宏 | 说明 |
|---|---|
| XT_HAL_TIMER_START | 初始化后立即启动(默认) |
| XT_HAL_TIMER_STOP | 初始化后不启动,需手动调用 xt_hal_timer_start |
| XT_HAL_TIMER_ONE_SHOT | 单次触发,超时后停止 |
| XT_HAL_TIMER_PERIODIC | 周期触发(默认),超时后自动重载 |
| XT_HAL_TIMER_DIR_UP | 向上计数(默认) |
| XT_HAL_TIMER_DIR_DOWN | 向下计数 |
| XT_HAL_TIMER_DEFAULT_MODE | 默认模式:周期 + 向上 + 立即启动 |
定时器超时时以中断上下文调用回调函数。回调中应尽快完成处理,不应执行耗时操作或阻塞等待。如需执行复杂处理,建议在回调中设置标志位,由主循环或任务处理。
以下为函数签名大纲,完整的参数说明、返回值、注意事项请查看 xt_hal_timer(硬件定时器驱动) 。
| 函数签名 | 说明 |
|---|---|
| xt_err_t xt_hal_timer_setup(uint8_t timer_id, uint32_t mode, uint32_t tick_freq_hz, uint32_t tick_num, xt_hal_timer_cb_t cb) | 初始化定时器 |
| xt_err_t xt_hal_timer_close(uint8_t timer_id) | 关闭定时器 |
| 函数签名 | 说明 |
|---|---|
| xt_err_t xt_hal_timer_start(uint8_t timer_id) | 启动定时器 |
| xt_err_t xt_hal_timer_stop(uint8_t timer_id) | 停止定时器 |
| 函数签名 | 说明 |
|---|---|
| uint32_t xt_hal_timer_get_clk_src_freq(uint8_t timer_id) | 获取定时器时钟源频率(Hz) |
| uint32_t xt_hal_timer_get_prescaler(uint8_t timer_id) | 获取定时器实际分频值(psc+1),参数错误返回 0 |
| uint32_t xt_hal_timer_get_count(uint8_t timer_id) | 获取定时器当前计数值 |
无编译配置项。
| 行为 | 说明 |
|---|---|
| tick_freq_hz=0 时最大分频 | 内部使用最大分频值(最低 tick 频率),适合低频超长定时 |
| tick_freq_hz=0xFFFFFFFF 时不预分频 | 直接使用时钟源频率,适合最高精度定时 |
| tick_num 最小值平台依赖 | 不保证能设置为 1,取决于平台硬件计数器的位宽和实现 |
| 回调在中断上下文 | 定时器回调在中断中执行,不能阻塞或执行耗时操作 |
| 频率近似 | 实际分频值为整数,可能无法精确匹配 tick_freq_hz ,查询 get_prescaler 和 get_clk_src_freq 可获取实际值 |