current_v/Drivers/FM33LG0xx_FL_Driver/Src/fm33lg0xx_fl_rtcb.c
2025-12-31 08:21:43 +08:00

192 lines
5.6 KiB
C

/**
*******************************************************************************************************
* @file fm33lg0xx_fl_rtcb.c
* @author FMSH Application Team
* @brief Src file of RTCB FL Module
*******************************************************************************************************
* @attention
*
* Copyright (c) [2021] [Fudan Microelectronics]
* THIS SOFTWARE is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*
*******************************************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "fm33lg0xx_fl.h"
/** @addtogroup FM33LG0XX_FL_Driver
* @{
*/
/** @addtogroup RTCB
* @{
*/
#ifdef FL_RTCB_DRIVER_ENABLED
/* Private macros ------------------------------------------------------------*/
/** @addtogroup TIM_FL_Private_Macros
* @{
*/
#define IS_RTCB_INSTANCE(RTCBx) ((RTCBx) == RTCB)
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup RTCB_FL_EF_Init
* @{
*/
/**
* @brief 复位对应RTCBx寄存器.
* @param RTCBx
* @retval ErrorStatus枚举值:
* -FL_PASS 外设寄存器值恢复复位值
* -FL_FAIL 未成功执行
*/
FL_ErrorStatus FL_RTCB_DeInit(RTCB_Type *RTCBx)
{
FL_ErrorStatus result = FL_PASS;
/* Check the parameters */
assert_param(IS_RTCB_INSTANCE(RTCBx));
/* 打开电源域接口 */
CDIF->CR = 0X00000003;
RTCBx->IER = 0x00000000U;
RTCBx->WER = 0xACACACACU;
RTCBx->STPCR = 0x00000000U;
RTCBx->STPCLKRR = 0x00000000U;
RTCBx->STPCALRR = 0x00000000U;
RTCBx->ALARM = 0x00000000U;
RTCBx->BCDDAY = 0x00000000U;
RTCBx->BCDHOUR = 0x00000000U;
RTCBx->BCDMIN = 0x00000000U;
RTCBx->BCDMONTH = 0x00000000U;
RTCBx->BCDSEC = 0x00000000U;
RTCBx->BCDWEEK = 0x00000000U;
RTCBx->BCDYEAR = 0x00000000U;
RTCBx->ADJR = 0x00000000U;
RTCBx->TMSEL = 0x00000000U;
RTCBx->CR = 0x00000000U;
RTCBx->WER = 0x00000000U;
return result;
}
/**
* @brief 配置实时时钟相关.
* @param RTCBx Timer Instance
* @param initStruct 指向一个 @ref FL_RTCB_InitTypeDef(时基配置结构体)
* @retval ErrorStatus枚举值
* -FL_FAIL 配置过程发生错误
* -FL_PASS 成功
*/
FL_ErrorStatus FL_RTCB_Init(RTCB_Type *RTCBx, FL_RTCB_InitTypeDef *initStruct)
{
/* 参数检查 */
assert_param(IS_RTCB_INSTANCE(RTCBx));
/* 打开电源域接口 */
CDIF->CR = 0X00000003;
/* 配置时间 */
FL_RTCB_ConfigTime(RTCBx, initStruct);
return FL_PASS;
}
/**
* @brief 设置实时时钟
* @param RTCBx Timer Instance
* @param initStruct 指向一个 @ref FL_RTCB_InitTypeDef(时基配置结构体)
* @retval ErrorStatus枚举值
* -FL_FAIL 配置过程发生错误
* -FL_PASS 成功
*/
FL_ErrorStatus FL_RTCB_ConfigTime(RTCB_Type *RTCBx, FL_RTCB_InitTypeDef *initStruct)
{
/* 使能时间配置 */
FL_RTCB_WriteEnable(RTCBx);
/* 配置秒 */
FL_RTCB_WriteSecond(RTCBx, initStruct->second);
/* 配置分钟 */
FL_RTCB_WriteMinute(RTCBx, initStruct->minute);
/* 配置小时 */
FL_RTCB_WriteHour(RTCBx, initStruct->hour);
/* 配置日期 */
FL_RTCB_WriteDay(RTCBx, initStruct->day);
/* 配置周 */
FL_RTCB_WriteWeek(RTCBx, initStruct->week);
/* 配置月 */
FL_RTCB_WriteMonth(RTCBx, initStruct->month);
/* 配置年 */
FL_RTCB_WriteYear(RTCBx, initStruct->year);
/* 锁定时间配置 */
FL_RTCB_WriteDisable(RTCBx);
return FL_PASS;
}
/**
* @brief 获取实时时间并保存到指定结构体中
* @param RTCBx Timer Instance
* @param initStruct 指向一个 @ref FL_RTCB_InitTypeDef(时基配置结构体)
* @retval ErrorStatus枚举值
* -FL_FAIL 配置过程发生错误
* -FL_PASS 成功
*/
FL_ErrorStatus FL_RTCB_GetTime(RTCB_Type *RTCBx, FL_RTCB_InitTypeDef *initStruct)
{
/* 配置秒 */
initStruct->second = FL_RTCB_ReadSecond(RTCBx);
/* 配置分钟 */
initStruct->minute = FL_RTCB_ReadMinute(RTCBx);
/* 配置小时 */
initStruct->hour = FL_RTCB_ReadHour(RTCBx);
/* 配置日期 */
initStruct->day = FL_RTCB_ReadDay(RTCBx);
/* 配置周 */
initStruct->week = FL_RTCB_ReadWeek(RTCBx);
/* 配置月 */
initStruct->month = FL_RTCB_ReadMonth(RTCBx);
/* 配置年 */
initStruct->year = FL_RTCB_ReadYear(RTCBx);
return FL_PASS;
}
/**
* @brief 设置 initStruct 为默认配置
* @param initStruct 指向需要将值设置为默认配置的结构体 @ref FL_RTCB_InitTypeDef 结构体
*
* @retval None
*/
void FL_RTCB_StructInit(FL_RTCB_InitTypeDef *initStruct)
{
/* */
initStruct->year = 0x00;
initStruct->month = 0x00;
initStruct->day = 0x00;
initStruct->week = 0x00;
initStruct->hour = 0x00;
initStruct->minute = 0x00;
initStruct->second = 0x00;
}
/**
* @}
*/
#endif /* FL_RTCB_DRIVER_ENABLED */
/**
* @}
*/
/**
* @}
*/
/*************************(C) COPYRIGHT Fudan Microelectronics **** END OF FILE*************************/