216 lines
5.7 KiB
C
216 lines
5.7 KiB
C
/************************************************************************************************/
|
||
/**
|
||
* @file ciu32l051_std_wwdg.h
|
||
* @author MCU Ecosystem Development Team
|
||
* @brief WWDG STD库驱动头文件。
|
||
* 提供WWDG相关的STD库操作函数声明、数据类型以及常量的定义。
|
||
*
|
||
*
|
||
**************************************************************************************************
|
||
* @attention
|
||
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
|
||
*
|
||
**************************************************************************************************
|
||
*/
|
||
|
||
/* 避免头文件重复引用 */
|
||
#ifndef CIU32L051_STD_WWDG_H
|
||
#define CIU32L051_STD_WWDG_H
|
||
|
||
/************************************************************************************************/
|
||
/**
|
||
* @addtogroup CIU32L051_STD_Driver
|
||
* @{
|
||
*/
|
||
|
||
/**
|
||
* @defgroup WWDG WWDG
|
||
* @brief 窗口看门狗模块的STD库驱动
|
||
* @{
|
||
*
|
||
*/
|
||
/************************************************************************************************/
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/*------------------------------------------includes--------------------------------------------*/
|
||
#include "ciu32l051_std_common.h"
|
||
|
||
/*--------------------------------------------define--------------------------------------------*/
|
||
|
||
/************************************************************************************************/
|
||
/**
|
||
* @defgroup WWDG_Constants WWDG Constants
|
||
* @brief WWDG常量定义及宏定义
|
||
* @{
|
||
*
|
||
*/
|
||
/************************************************************************************************/
|
||
|
||
/* WWDG预分频寄存器定义 */
|
||
#define WWDG_PRESCALER_1 WWDG_CFG_WDGPR_DIV1 /**< WWDG计数器频率=(PCLK1/4096)/1 */
|
||
#define WWDG_PRESCALER_2 WWDG_CFG_WDGPR_DIV2 /**< WWDG计数器频率=(PCLK1/4096)/2 */
|
||
#define WWDG_PRESCALER_4 WWDG_CFG_WDGPR_DIV4 /**< WWDG计数器频率=(PCLK1/4096)/4 */
|
||
#define WWDG_PRESCALER_8 WWDG_CFG_WDGPR_DIV8 /**< WWDG计数器频率=(PCLK1/4096)/8 */
|
||
#define WWDG_PRESCALER_16 WWDG_CFG_WDGPR_DIV16 /**< WWDG计数器频率=(PCLK1/4096)/16 */
|
||
#define WWDG_PRESCALER_32 WWDG_CFG_WDGPR_DIV32 /**< WWDG计数器频率=(PCLK1/4096)/32 */
|
||
#define WWDG_PRESCALER_64 WWDG_CFG_WDGPR_DIV64 /**< WWDG计数器频率=(PCLK1/4096)/64 */
|
||
#define WWDG_PRESCALER_128 WWDG_CFG_WDGPR_DIV128 /**< WWDG计数器频率=(PCLK1/4096)/128 */
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
/*-------------------------------------------functions------------------------------------------*/
|
||
|
||
/************************************************************************************************/
|
||
/**
|
||
* @defgroup WWDG_External_Functions WWDG External Functions
|
||
* @brief WWDG对外函数
|
||
* @{
|
||
*
|
||
*/
|
||
/************************************************************************************************/
|
||
/**
|
||
* @brief 启动WWDG计数
|
||
* @retval 无
|
||
*/
|
||
__STATIC_INLINE void std_wwdg_start(void)
|
||
{
|
||
WWDG->CR |= WWDG_CR_WDGEN;
|
||
}
|
||
|
||
/**
|
||
* @brief 配置计数值
|
||
* @param counter WWDG的计数值,范围为:0x00-0x3F
|
||
* @retval 无
|
||
*/
|
||
__STATIC_INLINE void std_wwdg_refresh_counter(uint32_t counter)
|
||
{
|
||
MODIFY_REG(WWDG->CR, WWDG_CR_CNT, counter);
|
||
}
|
||
|
||
/**
|
||
* @brief 获取计数值
|
||
* @retval uint32_t WWDG的计数值,范围为:0x00-0x3F
|
||
*/
|
||
__STATIC_INLINE uint32_t std_wwdg_get_counter(void)
|
||
{
|
||
return(WWDG->CR & WWDG_CR_CNT);
|
||
}
|
||
|
||
/**
|
||
* @brief 配置预分频值
|
||
* @param prescaler WWDG的预分频值:
|
||
* @arg WWDG_PRESCALER_1
|
||
* @arg WWDG_PRESCALER_2
|
||
* @arg WWDG_PRESCALER_4
|
||
* @arg WWDG_PRESCALER_8
|
||
* @arg WWDG_PRESCALER_16
|
||
* @arg WWDG_PRESCALER_32
|
||
* @arg WWDG_PRESCALER_64
|
||
* @arg WWDG_PRESCALER_128
|
||
* @retval 无
|
||
*/
|
||
__STATIC_INLINE void std_wwdg_set_prescaler(uint32_t prescaler)
|
||
{
|
||
MODIFY_REG(WWDG->CFG, WWDG_CFG_WDGPR, prescaler);
|
||
}
|
||
|
||
/**
|
||
* @brief 获取预分频值
|
||
* @retval uint32_t WWDG的预分频值:
|
||
* @arg WWDG_PRESCALER_1
|
||
* @arg WWDG_PRESCALER_2
|
||
* @arg WWDG_PRESCALER_4
|
||
* @arg WWDG_PRESCALER_8
|
||
* @arg WWDG_PRESCALER_16
|
||
* @arg WWDG_PRESCALER_32
|
||
* @arg WWDG_PRESCALER_64
|
||
* @arg WWDG_PRESCALER_128
|
||
*/
|
||
__STATIC_INLINE uint32_t std_wwdg_get_prescaler(void)
|
||
{
|
||
return(WWDG->CFG & WWDG_CFG_WDGPR);
|
||
}
|
||
|
||
/**
|
||
* @brief 配置窗口值
|
||
* @param window WWDG的窗口值,范围为:0x00-0x3F
|
||
* @retval 无
|
||
*/
|
||
__STATIC_INLINE void std_wwdg_set_window(uint32_t window)
|
||
{
|
||
MODIFY_REG(WWDG->CFG, WWDG_CFG_WIN, window);
|
||
}
|
||
|
||
/**
|
||
* @brief 获取窗口值
|
||
* @retval uint32_t WWDG的窗口值,范围为:0x00-0x3F
|
||
*/
|
||
__STATIC_INLINE uint32_t std_wwdg_get_window(void)
|
||
{
|
||
return(WWDG->CFG & WWDG_CFG_WIN);
|
||
}
|
||
|
||
/**
|
||
* @brief WWDG提前唤醒中断使能
|
||
* @retval 无
|
||
*/
|
||
__STATIC_INLINE void std_wwdg_interrupt_enable(void)
|
||
{
|
||
WWDG->CFG |= WWDG_CFG_EWI;
|
||
}
|
||
|
||
/**
|
||
* @brief 获取WWDG的提前唤醒中断使能状态
|
||
* @retval bool 返回逻辑表达式的判断结果
|
||
* @arg true: 表示使能提前唤醒中断
|
||
* @arg false:表示未使能提前唤醒中断
|
||
*/
|
||
__STATIC_INLINE bool std_wwdg_get_interrupt_enable(void)
|
||
{
|
||
return((WWDG->CFG & WWDG_CFG_EWI) == WWDG_CFG_EWI);
|
||
}
|
||
|
||
/**
|
||
* @brief 获取WWDG的提前唤醒标志状态
|
||
* @note 不使能EWI中断,此位也会被置1
|
||
* @retval bool 返回逻辑表达式的判断结果
|
||
* @arg true: 表示提前唤醒标志被置起
|
||
* @arg false:表示提前唤醒标志未置起
|
||
*/
|
||
__STATIC_INLINE bool std_wwdg_get_early_wakeup_flag(void)
|
||
{
|
||
return(WWDG->SR == WWDG_SR_EWIF);
|
||
}
|
||
|
||
/**
|
||
* @brief 清除WWDG提前唤醒标志
|
||
* @retval 无
|
||
*/
|
||
__STATIC_INLINE void std_wwdg_clear_early_wakeup_flag(void)
|
||
{
|
||
WWDG->SR &= (~ WWDG_SR_EWIF);
|
||
}
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
#endif /* CIU32L051_STD_WWDG_H */
|