LISA AON HWTIMER 基础示例

本示例演示 AON Timer 低功耗周期定时功能,每 1 秒触发一次回调。

硬件特性

  • 通道数量: 1个通道(通道0)

  • 计数器位数: 24位计数器

  • 时钟源:

    • RC32K: 内部RC振荡器,频率动态获取(典型值约32768Hz,实际存在较大偏差)

    • XO32K: 需要外接32K晶振,典型值32768Hz,精度高

  • 分频: 不支持分频,频率由时钟源决定

  • 低功耗: 支持低功耗模式运行

配置说明

prj.conf 中启用以下配置:

CONFIG_LISA_DEVICE=y
CONFIG_LISA_HWTIMER_DEVICE=y
CONFIG_LISA_HWTIMER_ARCS_AON_TIMER=y

时钟源配置

默认使用内部 RC32K 时钟源(CONFIG_LISA_HWTIMER_ARCS_AON_TIMER_CLK_RC32K=y):

  • 无需外部晶振硬件

  • 功耗更低

  • 频率通过 lisa_hwtimer_get_capabilities() 动态获取

  • 精度较低,有偏差

可选配置使用外部 XO32K 时钟源(需要外接32K晶振硬件):

CONFIG_LISA_HWTIMER_ARCS_AON_TIMER_CLK_XO32K=y

关键代码

// 1. 获取设备
lisa_device_t *hwtimer_dev = lisa_device_get("aon_timer");
if (!lisa_device_ready(hwtimer_dev)) {
    // 设备未就绪,处理错误
    return -1;
}

// 2. 获取设备能力(查询实际频率)
lisa_hwtimer_capabilities_t caps;
int ret = lisa_hwtimer_get_capabilities(hwtimer_dev, &caps);
// RC32K: 通过CRM动态获取实际频率(可能与32768Hz有偏差)
// XO32K: 固定32768Hz

// 3. 设置频率
ret = lisa_hwtimer_set_frequency(hwtimer_dev, 0, caps.max_freq_hz);

// 4. 注册回调(在中断上下文执行)
ret = lisa_hwtimer_set_callback(hwtimer_dev, 0, timer_callback, NULL);

// 5. 启动周期定时器(1秒 = caps.max_freq_hz / caps.max_freq_hz)
uint32_t count = caps.max_freq_hz;
ret = lisa_hwtimer_start(hwtimer_dev, 0, count, LISA_HWTIMER_MODE_PERIODIC);

定时周期计算

周期() = COUNT / 频率(Hz)

本示例: 1秒 = caps.max_freq_hz / caps.max_freq_hz

其他示例:

  • 500ms: count = caps.max_freq_hz / 2

  • 100ms: count = caps.max_freq_hz / 10

  • 10ms: count = caps.max_freq_hz / 100

编译

重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:

  • arcs_evb - ARCS EVB 评估板

  • arcs_mini - ARCS Mini 开发板

根据您的开发板型号,选择对应的编译命令:

在示例目录下执行编译:

# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini

Note

如果在 SDK 根目录执行,需要指定示例路径:

# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini

Note

确保已安装对应的工具链。

预期输出

=== LISA AON HWTIMER basic example ===
aon_timer device ready
Timer capabilities: channels=1, freq range=32768-32768 Hz
Set timer frequency: 32768 Hz
Timer started with count=32768 (period=1000.0ms)
Timer triggered: 1
Timer triggered: 2
Timer triggered: 3
...

定时器每 1 秒触发一次,打印递增计数。

注意事项

  1. 时钟源精度:

    • 使用 RC32K 时实际频率可能与标称值有偏差,建议通过 get_capabilities 查询实际频率

    • 需要精确计时场景建议使用 XO32K 时钟源

  2. 回调执行上下文: 定时器回调在中断上下文中执行,应保持简短快速,避免阻塞操作

  3. 功耗考虑: AON Timer 支持低功耗模式,适合长时间定时和低功耗应用场景