API GUIDE / WDT / LL
G32S10 WDT LL 接口
LL 层接口:LL 层接口是寄存器访问的薄封装,特点如下。
1. LL 与基础辅助接口规范
1.1 LL 层实现边界
LL 层接口是寄存器访问的薄封装,特点如下。
通过
static inline方式提供。不维护软件状态。
不做完整业务流程编排。
一般不返回
error_code_t。调用者需要保证实例和参数合法。
1.2 LL 层公开宏
LL 层直接使用 wdt_regs.h 中的寄存器和位域宏。
| 宏 | 说明 |
|---|---|
HP_WDT | HP WDT 实例指针 |
LP_WDT | LP WDT 实例指针 |
WDT_MASK_ALL | WDT LL 接口需要操作寄存器全部位时使用的全位掩码 |
WDT_COUNTER_MAX | WDT FULL/COUNT 字段最大值 |
WDT_CNT_ENABLE_TCEN | 计数器使能位 |
WDT_CLOCK_MASK | clock_status / clock_disable / clock_enable 共用的 WDT 时钟控制位掩码 |
WDT_FLAG_FULL | FULL 中断状态位 |
WDT_CONTROL_RST_MODE | 复位模式位 |
WDT_CONTROL_RTC_EN | RTC 时钟使能位 |
WDT_CONTROL_PRESCALE_SHIFT | 分频字段偏移 |
WDT_CONTROL_PRESCALE_MASK | 分频字段掩码 |
WDT_CONTROL_CLRZ | 清计数器位 |
WDT_PRESCALER_DIV_1 | 分频 1 的字段编码 |
WDT_PRESCALER_DIV_4 | 分频 4 的字段编码 |
WDT_PRESCALER_DIV_16 | 分频 16 的字段编码 |
WDT_PRESCALER_DIV_64 | 分频 64 的字段编码 |
WDT_PRESCALER_DIV_256 | 分频 256 的字段编码 |
WDT_PRESCALER_DIV_1024 | 分频 1024 的字段编码 |
WDT_PRESCALER_MAX | 分频字段最大合法编码 |
WDT_RESET_DIRECT | 直接复位模式字段编码 |
WDT_RESET_IRQ | 中断后复位模式字段编码 |
WDT_SOFT_RST_TRIGGER_VALUE | 软复位触发值 |
WDT_SOFT_RST_STATUS_DONE | 软复位完成状态位 |
1.3 实例辅助与时钟状态
1.3.1 ll_wdt_is_instance
static inline bool ll_wdt_is_instance(const wdt_regs_t *wdtx);
功能:判断指针是否为 SDK 识别的 WDT 实例。
| 参数 | 说明 |
|---|---|
wdtx | WDT 实例指针 |
| 返回值 | 说明 |
|---|---|
true | wdtx 为 HP_WDT 或 LP_WDT |
false | 非法实例 |
1.3.2 ll_wdt_is_hp_instance
static inline bool ll_wdt_is_hp_instance(const wdt_regs_t *wdtx);
功能:判断指针是否为 HP_WDT。
1.3.3 ll_wdt_clock_status_get
static inline uint32_t ll_wdt_clock_status_get(wdt_regs_t *wdtx);
功能:读取 WDT clock status 寄存器。
1.3.4 ll_wdt_clock_disable
static inline void ll_wdt_clock_disable(wdt_regs_t *wdtx);
功能:写 clock disable 寄存器,请求关闭 WDT 模块时钟。
1.3.5 ll_wdt_clock_enable
static inline void ll_wdt_clock_enable(wdt_regs_t *wdtx);
功能:写 clock enable 寄存器,请求打开 WDT 模块时钟。
1.4 FULL、计数器和喂狗
1.4.1 ll_wdt_full_set
static inline void ll_wdt_full_set(wdt_regs_t *wdtx, uint32_t value);
功能:写 FULL 寄存器。
| 参数 | 说明 |
|---|---|
wdtx | WDT 实例 |
value | FULL 装载值 |
补充说明:调用者应保证 value 不超过 WDT_COUNTER_MAX。
1.4.2 ll_wdt_full_get
static inline uint32_t ll_wdt_full_get(wdt_regs_t *wdtx);
功能:读取 FULL 寄存器。
1.4.3 ll_wdt_counter_enable
static inline void ll_wdt_counter_enable(wdt_regs_t *wdtx);
功能:使能 WDT 计数器。
1.4.4 ll_wdt_counter_disable
static inline void ll_wdt_counter_disable(wdt_regs_t *wdtx);
功能:关闭 WDT 计数器。
1.4.5 ll_wdt_count_get
static inline uint32_t ll_wdt_count_get(wdt_regs_t *wdtx);
功能:读取当前 WDT 计数值。
1.4.6 ll_wdt_counter_clear
static inline void ll_wdt_counter_clear(wdt_regs_t *wdtx);
功能:清 WDT 计数器,通常用于喂狗。
1.5 CONTROL 位域
1.5.1 ll_wdt_control_get
static inline uint32_t ll_wdt_control_get(wdt_regs_t *wdtx);
功能:读取 CONTROL 寄存器。
1.5.2 ll_wdt_prescaler_set
static inline void ll_wdt_prescaler_set(wdt_regs_t *wdtx, uint8_t prescaler);
功能:设置 WDT 分频字段。
| 参数 | 说明 |
|---|---|
wdtx | WDT 实例 |
prescaler | 分频字段编码,见 WDT_PRESCALER_DIV_* |
1.5.3 ll_wdt_prescaler_get
static inline uint8_t ll_wdt_prescaler_get(wdt_regs_t *wdtx);
功能:读取 WDT 分频字段编码。
1.5.4 ll_wdt_rtc_clock_enable
static inline void ll_wdt_rtc_clock_enable(wdt_regs_t *wdtx);
功能:使能 CONTROL 寄存器中的 RTC 时钟输入位。
1.5.5 ll_wdt_rtc_clock_disable
static inline void ll_wdt_rtc_clock_disable(wdt_regs_t *wdtx);
功能:关闭 CONTROL 寄存器中的 RTC 时钟输入位。
1.5.6 ll_wdt_reset_mode_set
static inline void ll_wdt_reset_mode_set(wdt_regs_t *wdtx, uint32_t mode);
功能:设置 WDT 复位模式字段。
| 参数 | 说明 |
|---|---|
wdtx | WDT 实例 |
mode | WDT_RESET_DIRECT 或 WDT_RESET_IRQ |
1.5.7 ll_wdt_reset_mode_get
static inline uint32_t ll_wdt_reset_mode_get(wdt_regs_t *wdtx);
功能:读取当前 WDT 复位模式字段。
1.6 中断和状态
1.6.1 ll_wdt_interrupt_status_get
static inline uint32_t ll_wdt_interrupt_status_get(wdt_regs_t *wdtx);
功能:读取 WDT 中断状态寄存器。
1.6.2 ll_wdt_interrupt_status_clear
static inline void ll_wdt_interrupt_status_clear(wdt_regs_t *wdtx);
功能:在 FULL 状态已置位后清除 WDT FULL 中断状态。
补充说明:
受 G32S10
IR_CLRIC 限制,不能在启动或初始化阶段调用该接口预清状态。LL 实现会先读取
IR[25],只有 FULL 已置位时才写IR_CLR。
1.6.3 ll_wdt_interrupt_mask_get
static inline uint32_t ll_wdt_interrupt_mask_get(wdt_regs_t *wdtx);
功能:读取 WDT 中断 mask 状态寄存器。
1.6.4 ll_wdt_interrupt_enable
static inline void ll_wdt_interrupt_enable(wdt_regs_t *wdtx);
功能:使能 WDT FULL 中断。
补充说明:
WDT IE 位采用 mask 语义,写
ie_clr清除 mask,FULL 中断进入 unmasked 状态。
1.6.5 ll_wdt_interrupt_disable
static inline void ll_wdt_interrupt_disable(wdt_regs_t *wdtx);
功能:关闭 WDT FULL 中断。
补充说明:
WDT IE 位采用 mask 语义,写
ie_set设置 mask,FULL 中断进入 masked 状态。
1.6.6 ll_wdt_pending_get
static inline uint32_t ll_wdt_pending_get(wdt_regs_t *wdtx);
功能:读取当前有效 pending 中断。
补充说明:
pending 通常由中断状态和中断使能共同决定。
HAL IRQ handler 使用该接口判断是否需要调用用户回调。
1.7 软复位
1.7.1 ll_wdt_soft_reset
static inline void ll_wdt_soft_reset(wdt_regs_t *wdtx);
功能:向 SOFT_RST 寄存器写入触发值,触发 WDT 模块软复位。
1.7.2 ll_wdt_soft_reset_status_get
static inline uint32_t ll_wdt_soft_reset_status_get(wdt_regs_t *wdtx);
功能:读取软复位状态寄存器。
1.7.3 ll_wdt_soft_reset_status_clear
static inline void ll_wdt_soft_reset_status_clear(wdt_regs_t *wdtx);
功能:清除软复位完成状态。
2. 寄存器映射与位域约定
2.1 寄存器结构体
wdt_regs_t 按 WDT 寄存器偏移定义。
| 成员 | 偏移 | 说明 |
|---|---|---|
full | 0x000 | FULL 装载寄存器 |
cnt_enable | 0x004 | 计数器使能寄存器 |
count | 0x008 | 当前计数寄存器 |
control | 0x00C | 控制寄存器 |
clock_status | 0x01C | 时钟状态寄存器 |
ir | 0x020 | 中断状态寄存器 |
ir_clr | 0x028 | 中断清除寄存器 |
clock_disable | 0x02C | 模块时钟关闭寄存器 |
ie | 0x030 | 中断 mask 状态寄存器 |
ie_set | 0x034 | 中断 mask 设置寄存器 |
ie_clr | 0x038 | 中断 mask 清除寄存器 |
clock_enable | 0x03C | 模块时钟打开寄存器 |
soft_rst | 0x260 | 软件复位触发寄存器 |
soft_rst_st | 0x270 | 软件复位状态寄存器 |
2.2 关键位域
| 位域 | 所属寄存器 | 说明 |
|---|---|---|
WDT_CNT_ENABLE_TCEN | cnt_enable | 计数器使能位 |
WDT_CONTROL_RST_MODE | control | 复位模式选择位 |
WDT_CONTROL_RTC_EN | control | RTC 时钟输入使能位 |
WDT_CONTROL_PRESCALE_SHIFT | control | 分频字段偏移 |
WDT_CONTROL_PRESCALE_MASK | control | 分频字段掩码 |
WDT_CONTROL_CLRZ | control | 清计数器控制位 |
WDT_FLAG_FULL | ir / ie / ir_clr / ie_set / ie_clr | FULL 中断状态和 mask 位 |
WDT_SOFT_RST_STATUS_DONE | soft_rst_st | 软复位完成状态位 |
2.3 寄存器辅助宏
wdt_regs.h 保留以下寄存器辅助宏,用于 LL 层实现位域读写。
| 宏 | 说明 |
|---|---|
WDT_REG_ADDR(wdtx, member) | 根据实例指针和寄存器成员得到寄存器地址 |
WDT_FIELD_VALUE(mask, shift, value) | 根据位域掩码和偏移生成写入值 |
WDT_WRITE_FIELD(wdtx, member, mask, shift, value) | 对指定寄存器位域执行读改写 |