Z20K118库中寄存器及其库函数封装-WDOG库
1:看门狗控制和状态寄存器 (WDOG)
10个位域。
1-1
static inline ResultStatus_t WDOG_WaitConfigCompleted(void)
等待看门狗配置更新完成。其他需要等待完成的库函数内部已经完成调用封装,用户无需使用,只需了解。1个位域。经典while计数循环等待,每次计数判断本寄存器标志位CFGUF是否置1,置1跳出循环表示配置更新完成。
1-2
ResultStatus_t WDOG_Init(const WDOG_Config_t *ptWDOGInitConfig)
看门狗初始化配置。配置本寄存器6个位域,再配置TMO(单位域)和WIN(单位域)的各1个位域, 本寄存器:1.是否进入测试验证WDOG功能。 2.4种时钟源选择 3.窗口阈值使能 4.在停止模式下使能 5.在等待模式下使能 6.在调试框架下使能,调试框架比正常框架多一个开关位。TMO寄存器:7.配置看门狗最大计数值 WIN寄存器:8.配置窗口看门狗窗口计数值。
1-3
ResultStatus_t WDOG_Enable(void)
使能看门狗。1个。
1-4
ResultStatus_t WDOG_Disable(void)
失能看门狗。1个。
1-5
FlagStatus_t WDOG_GetConfigAllowStatus(void)
读取看门狗是否可二次配置的信息。读取本寄存器CFGUA位,该位表示在不进行复位的情况下软件是否能重新配置看门狗。当其值为0时,看门狗初始化完不能再进行配置。其值为1时,若CNT寄存器成功写入解锁序列则可以重新配置看门狗。
1-6
ResultStatus_t WDOG_ConfigAllowControl(ControlState_t allow)
配置看门狗能否二次配置。1个位域,根据参数设置CFGUA位 (参考1-5)。
1-7
ResultStatus_t WDOG_WindowModeControl(ControlState_t winEnable)
看门狗窗口阈值使能。配置1个位域。
ResultStatus_t WDOG_SetClockSource(WDOG_ClkSource_t clkSource)
设置看门狗时钟源。根据参数配置1个位域CLKS,4种时钟源选择。
1-9
ResultStatus_t WDOG_StopModeControl(ControlState_t cmd)
停止模式下使能看门狗。根据参数配置一个位域。
1-10
ResultStatus_t WDOG_WaitModeControl(ControlState_t cmd)
待机模式下使能看门狗。根据参数配置一个位域。
1-11
ResultStatus_t WDOG_DebugModeControl(ControlState_t cmd)
调试框架下使能看门狗。根据参数配置一个位域。
1-12
ResultStatus_t WDOG_SetTestMode(WDOG_TestMode_t testMode)
测试验证设置。根据参数配置一个位域TSTM。 该位域有多种配置,可单独使能4字节的CNT和TMO的任意字节进行比较,也可以全部使能,用于测试各字节WDOG功能是否正常。
1-13
WDOG_TestMode_t WDOG_GetTestMode(void)
获取测试模式的配置。
1-14
FlagStatus_t WDOG_GetConfigCompletedStatus(void)
读取看门狗配置是否完成。1个。读取本寄存器CFGUF位。
1-15
FlagStatus_t WDOG_GetLockStatus(void)
读取看门狗的寄存器是否锁定。1个。读取本寄存器UNLKF位。
1-16
IntStatus_t WDOG_GetIntStatus(WDOG_INT_t intType)
获取看门狗复位前中断标志位。 1个位域。参数虽然参数为2值枚举,但在本芯片的WDOG中只有一种中断,所以只有一种中断标志位,所以2个值都只能读取触发复位前中断。
1-17
ResultStatus_t WDOG_ClearIntStatus(WDOG_INT_t intType)
清除看门狗复位前中断标志位。1个。同1-16。
1-18
ResultStatus_t WDOG_IntMask(WDOG_INT_t intType, IntMask_t intMask)
遮罩复位前中断标志位。1个。根据intMask将标志位设0或者1。
2:看门狗计数寄存器(WDOG)
1个位域,CNT。此寄存器用于读取看门狗计数器的值。只有在以下两种特殊情况才能进行写入操作:1.刷新序列:将寄存器的当前值置0。按顺序在本寄存器写入(0xA0C4B1D6, 0x1E0D0C7B)两个32位值,则硬件电路会将本寄存器的的值置0。2.解锁序列:将WDOG所有寄存器解锁。WDOG寄存器默认全部锁定。按顺序在本寄存器写入(0xB0D9A1C4, 0x1A1E3B0F)两个32位值,即可解锁WDOG所有寄存器。2种写入操作必须在32个时钟周期内完成,否则看门狗将会产生一次复位事件。配置操作需要在128个时钟周期内完成,128时钟周期后WDOG所有寄存器会再次锁定。
2-1
static void WDOG_REFRESH_COUNT(void)
汇编函数。刷新看门狗计数值,将其置0。解析如下:
ARM 架构要求 PUSH/POP 指令中寄存器列表按编号顺序书写(如 {R0,R1,R2}),但硬件实际执行时会自动按以下规则处理:PUSH: 先压入高编号寄存器(R12→R0),POP:先弹出低编号寄存器(R0→R12)。
2-2
static inline void WDOG_UNLOCK_CONFIG(void)
汇编函数。解锁看门狗计数器,使其可以重新配置。解析参考2-1。
2-3
void WDOG_Refresh(void)
刷新看门狗计数值。对2-1汇编函数的封装。
2-4
uint32_t WDOG_GetCounter(void)
获取看门狗当前计数值。
3:看门狗超时寄存器 (WDOG)
1个位域,用于配置看门狗计数器最大值。看门狗计数器CNT会实时与超时值TMO进行比较,一旦CNT达到TMO,则会产生一个复位事件。为了平衡一次测试的覆盖范围和时间,建议在任何测试模式下将TMO值设置为0XFFFFFFFF。
3-1
ResultStatus_t WDOG_Init(const WDOG_Config_t *ptWDOGInitConfig)
即1-2函数。
3-2
ResultStatus_t WDOG_SetTimeoutValue(uint32_t timeoutValue)
设置看门狗超时值。根据配置1个位域。
3-3
uint32_t WDOG_GetTimeoutValue(void)
读取看门狗超时值。
4:看门狗窗口寄存器 (WDOG)
1个位域,用于配置看门狗的窗口值。 仅当看门狗窗口功能开启(WDOG_CS[WINE]=1b)生效,当计数值大于窗口值WIN而小于超时值TMO时喂狗(刷新refresh)操作才能生效,否则产生复位事件。
4-1
ResultStatus_t WDOG_Init(const WDOG_Config_t *ptWDOGInitConfig)
即1-2函数。
4-2
ResultStatus_t WDOG_SetWindowValue(uint32_t windowValue)
设置看门狗窗口值,根据参数配置1个位域。
4-3
uint32_t WDOG_GetWindowValue(void)
读取看门狗窗口值。
X:中断通用函数
x-1
void WDOG_InstallCallBackFunc(WDOG_INT_t intType, isr_cb_t *cbFun)
将用户的中断功能函数与系统的中断驱动处理函数连接。
x-2
void WDOG_DriverIRQHandler(void);
产生中断时进入本函数,通过X-1回调函数的连接调用用户的中断功能函数