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_WDTHP WDT 实例指针
LP_WDTLP WDT 实例指针
WDT_MASK_ALLWDT LL 接口需要操作寄存器全部位时使用的全位掩码
WDT_COUNTER_MAXWDT FULL/COUNT 字段最大值
WDT_CNT_ENABLE_TCEN计数器使能位
WDT_CLOCK_MASKclock_status / clock_disable / clock_enable 共用的 WDT 时钟控制位掩码
WDT_FLAG_FULLFULL 中断状态位
WDT_CONTROL_RST_MODE复位模式位
WDT_CONTROL_RTC_ENRTC 时钟使能位
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 实例。

参数说明
wdtxWDT 实例指针
返回值说明
truewdtx 为 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 寄存器。

参数说明
wdtxWDT 实例
valueFULL 装载值

补充说明:调用者应保证 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 分频字段。

参数说明
wdtxWDT 实例
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 复位模式字段。

参数说明
wdtxWDT 实例
modeWDT_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_CLR IC 限制,不能在启动或初始化阶段调用该接口预清状态。

  • 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 寄存器偏移定义。

成员偏移说明
full0x000FULL 装载寄存器
cnt_enable0x004计数器使能寄存器
count0x008当前计数寄存器
control0x00C控制寄存器
clock_status0x01C时钟状态寄存器
ir0x020中断状态寄存器
ir_clr0x028中断清除寄存器
clock_disable0x02C模块时钟关闭寄存器
ie0x030中断 mask 状态寄存器
ie_set0x034中断 mask 设置寄存器
ie_clr0x038中断 mask 清除寄存器
clock_enable0x03C模块时钟打开寄存器
soft_rst0x260软件复位触发寄存器
soft_rst_st0x270软件复位状态寄存器

2.2 关键位域

位域所属寄存器说明
WDT_CNT_ENABLE_TCENcnt_enable计数器使能位
WDT_CONTROL_RST_MODEcontrol复位模式选择位
WDT_CONTROL_RTC_ENcontrolRTC 时钟输入使能位
WDT_CONTROL_PRESCALE_SHIFTcontrol分频字段偏移
WDT_CONTROL_PRESCALE_MASKcontrol分频字段掩码
WDT_CONTROL_CLRZcontrol清计数器控制位
WDT_FLAG_FULLir / ie / ir_clr / ie_set / ie_clrFULL 中断状态和 mask 位
WDT_SOFT_RST_STATUS_DONEsoft_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)对指定寄存器位域执行读改写