GR5xx各类定时器归纳

1. GR5xx各类定时器特征概览

名字 模块属性 AON域 个数 时钟源 计数模式和计时精度 驱动参考 典型特点 应用场景
SysTick ARM系统 NO 1 System Clock 递减,24-bit 标准的CMSIS 驱动 24位系统硬件定时器, 注意使用时预防溢出 1. 可作为OS的Tick心跳, 方便不同Cortex核之间移植
2.在GR551x 的FreeRTOS 工程中的Active模式, 作为 OS的Tick 驱动使用;
3.在非GR551x芯片系列的FreeRTOS工程 没有使用SysTick(用RTC), 所以Systick可以根据需要提供给应用层使用
DWT ARM系统 NO 1 System Clock 递增,32-bit HAL_TIMEOUT_INIT
HAL_TIMEOUT_GET_TICK
HAL_TIMEOUT_DEINIT
不算标准Timer, 主要用于 系统tick 计数 1.可以使用 DWT的Tick来辅助计算片段代码的运行时间
2.注意溢出时间, 举例96MHz主频下, 溢出时间约 U32_Max/96M = 44秒. 使用场景一般都先重置再使用, 尽量不要跨越复杂的上下文环境使用
Timer ARM系统 NO 2 System Clock 递减,32-bit HAL:gr55xx_hal_tim.c/h
APP:app_tim.c/h
1.32-bit硬件定时器
2.MCU睡眠定时器不能工作,所以调用接口初始化了系统不会睡眠,反初始化才允许系统睡眠
3.GR533x的timer有IO捕获功能
MCU ACTIVE模式下高精度定时场景<
Dual Timer ARM系统 NO 2 System Clock 递减,32-bit HAL:gr55xx_hal_dual_tim.c/h
APP:app_dual_tim.c/h
1.可用作16/32 位定时器
2.MCU睡眠定时器不能工作,所以调用接口初始化了系统不会睡眠,反初始化才允许系统睡眠
3.有周期模式、自由模式、一次到达等多种定时模式
4.GR533x的dual timer拥有IO联动功能
1. MCU ACTIVE模式下高精度定时场景
2.用于捕获IO电平变化信息
3.用于产生时序严格的IO方波
ARM-WDT ARM系统 NO 1 System Clock 递减,32-bit CMSIS驱动 ARM 看门狗, 不能在Sleep模式工作 基本弃用状态
AON-WDT SOC always on域 YES 1 慢速时钟源,具体配置见项目2 递减,32-bit HAL gr55xx_hal_aon_wdt.c/h
APP app_aon_wdt.c/h
1. 32Bit硬件计数器, 触发系统复位, MCU 睡眠也可继续工作
2.在复位前可以配置一个过期提醒ALARM中断
1. 用作系统的软件看门狗
2.用作特别设计的系统复位接口
3.ALARM中断可以用来记录看门狗复位前的现场信息供分析
Sleep Timer
APP Timer
SOC always on域 YES 1 慢速时钟源,具体配置见项目2 递减,32-bit HAL gr55xx_hal_sleep_timer.c/h
APP app_timer.c/h
1. 32Bit 硬件计数器
2.模式0 - 休眠模式计数活动模式停止工作
3.模式1 - 单次计数,完成停止, 无论是休眠还是活动模式
4.模式2 - 类似模式1, 自动重载计数
1. 可用作将CPU从休眠状态唤醒
2. 基于sleep timer构建的应用层timer (即app timer), 可广泛应用在对时间精度要求不是很高的场景做定时器(支持休眠下工作).
3. 应用层Timer 用软件链表管理, 因此存在一定的时延
RTC
Calendar
SOC always on域 YES GR551x/GR533x:1
GR5525/GR5526:2
慢速时钟源,具体配置见项目2 递增,32-bit HAL gr55xx_hal_rtc.c/h
APP app_rtc.c/h
1.采用外部晶振时候计时精度等于晶振ppm
2.GR551x 如果采用RNG2做时钟源, Calendar无法使用, 因为其无法正常设置RNG2为时钟源
3.5526用RNG2为时钟源也无法使用Calendar, 因为RNG2计数有时突变到0xffffffff
1. 一个替代SysTick作为 OS的Tick心跳(Active下周期性, Sleep 单次计时)
2.另一个 实现日历,有计时、tick中断和闹钟设置功能
PWM SOC外围模块 NO 2 Serial Clock 递增,32-bit HAL gr55xx_hal_pwm.c/h
APP app_pwm.c/h
为外设提供PWM 信号 电机、LED控制或信号发生等场景
BLE_Timer
ble comm timer
SOC ble模块 YES 1 慢速时钟源,具体配置见项目2 / ble_time.c/h ble core 里面的定时器 为协议栈提供广播间隔等时隙,系统也可以调它的接口获取睡眠时间

2. GR5xx慢速时钟定时器的时钟配置

GR5xx基于慢速时钟的定时器分别有BLE_Timer,aon_wdt, sleep timer, RTC.

慢速时钟源分别有外部的晶体时钟和内部的RC时钟。

外部晶体时钟是32K晶振,也叫LFXO-32K,特点是相比内部的RC时钟有更好的稳定性。

内部的RC时钟分别有RNG_OSC和LFRC-32K(也叫RNG2)。RNG_OSC来源于时钟树上的2MHZ_RNG_OS,不太稳定;LFRC-32K相比RNG_OSC则有更好的PPM.但在GR551x和GR5526上,LFRC-32K用于计时模块时,会出现计时突变的问题,所以不能用。各个芯片的慢速时钟配置如下:

  • 对于GR551x:

BLE TIMER:如果选择外部时钟源用LFXO_32K,如果选择内部时钟源用RNG2。 AON WDT:固定到RNG(不支持RNG2,也不支持外部LFXO_32K) Sleep TIMER:外部用LFXO_32K,内部用RNG2 RTC:固定到外部LFXO_32K,不支持内部时钟(所以如果芯片没有外挂LFXO_32K,SDK基于ble timer实现了日历的计时功能,但日历没有tick和alarm功能)

  • 对于GR5526:

BLE Timer:如果选择外部时钟源用LFXO_32K,如果选择内部时钟源用LFRC_32K. AON WDT:如果选择外部时钟源用LFXO_32K,如果选择内部时钟源用RNG_OSC(由于LFRC_32K计时有突变,所以不能用) Sleep Timer:如果选择外部时钟源用LFXO_32K,如果选择内部时钟源用RNG_OSC(由于LFRC_32K计时有突变,所以不能用) RTC0:如果选择外部时钟源用LFXO_32K,如果选择内部时钟源时,app_rtc.c会基于ble_timer实现日历简单的时间计时功能,没有tick和alarm中断功能。 RTC1:如果选择外部时钟源用LFXO_32K,如果选择内部时钟源用RNG_OSC(由于LFRC_32K计时有突变,所以不能用).

  • 对于GR5525/GR533x:

对所有BLE_Timer/aon_wdt/sleep timer/RTC来讲,

如果选择外部时钟源用LFXO_32K;如果选择内部时钟源时用LFRC_32K(因为LFRC-32K相比RNG_OSC则有更好的PPM)。

3.各款芯片RTOS tick的实现方式

  • GR551x:

MCU ACTIVE模式下,是基于Systick实现 RTOS的tick;

在MCU Sleep 模式下,systick停住工作,依靠ble_timer的定时任务进行唤醒,唤醒后通过读取ble_timer时间对systick进行补偿。

  • GR5525/GR5526

基于RTC1实现RTOS的tick。这两款芯片有两路RTC,所以RTC0用于正常的日历功能。

  • GR533x:

基于RTC0实现 RTOS的tick。由于芯片只有一路RTC,所以在RTOS场景下,日历功能会受限。