mirror of https://gitee.com/ptower/pmu.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
8.6 KiB
312 lines
8.6 KiB
/**
|
|
******************************************************************************
|
|
* @file py32f0xx_hal_rtc_ex.c
|
|
* @author MCU Application Team
|
|
* @brief Extended RTC HAL module driver.
|
|
* This file provides firmware functions to manage the following
|
|
* functionalities of the Real Time Clock (RTC) Extension peripheral:
|
|
* + RTC Tamper functions
|
|
* + Extension Control functions
|
|
* + Extension RTC features functions
|
|
*
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* <h2><center>© Copyright (c) 2023 Puya Semiconductor Co.
|
|
* All rights reserved.</center></h2>
|
|
*
|
|
* This software component is licensed by Puya under BSD 3-Clause license,
|
|
* the "License"; You may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at:
|
|
* opensource.org/licenses/BSD-3-Clause
|
|
*
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* <h2><center>© Copyright (c) 2016 STMicroelectronics.
|
|
* All rights reserved.</center></h2>
|
|
*
|
|
* This software component is licensed by ST under BSD 3-Clause license,
|
|
* the "License"; You may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at:
|
|
* opensource.org/licenses/BSD-3-Clause
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "py32f0xx_hal.h"
|
|
|
|
/** @addtogroup PY32F0xx_HAL_Driver
|
|
* @{
|
|
*/
|
|
|
|
#ifdef HAL_RTC_MODULE_ENABLED
|
|
|
|
/** @defgroup RTCEx RTCEx
|
|
* @brief RTC Extended HAL module driver
|
|
* @{
|
|
*/
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* Private define ------------------------------------------------------------*/
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/** @defgroup RTCEx_Private_Macros RTCEx Private Macros
|
|
* @{
|
|
*/
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* Private functions ---------------------------------------------------------*/
|
|
|
|
/** @defgroup RTCEx_Exported_Functions RTCEx Exported Functions
|
|
* @{
|
|
*/
|
|
|
|
/** @defgroup RTCEx_Exported_Functions_Group2 RTC Second functions
|
|
* @brief RTC Second functions
|
|
*
|
|
@verbatim
|
|
===============================================================================
|
|
##### RTC Second functions #####
|
|
===============================================================================
|
|
|
|
[..] This section provides functions implementing second interupt handlers
|
|
|
|
@endverbatim
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Sets Interrupt for second
|
|
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
|
|
* the configuration information for RTC.
|
|
* @retval HAL status
|
|
*/
|
|
HAL_StatusTypeDef HAL_RTCEx_SetSecond_IT(RTC_HandleTypeDef *hrtc)
|
|
{
|
|
/* Check input parameters */
|
|
if (hrtc == NULL)
|
|
{
|
|
return HAL_ERROR;
|
|
}
|
|
|
|
/* Process Locked */
|
|
__HAL_LOCK(hrtc);
|
|
|
|
hrtc->State = HAL_RTC_STATE_BUSY;
|
|
|
|
/* Enable Second interuption */
|
|
__HAL_RTC_SECOND_ENABLE_IT(hrtc, RTC_IT_SEC);
|
|
|
|
hrtc->State = HAL_RTC_STATE_READY;
|
|
|
|
/* Process Unlocked */
|
|
__HAL_UNLOCK(hrtc);
|
|
|
|
return HAL_OK;
|
|
}
|
|
|
|
/**
|
|
* @brief Deactivates Second.
|
|
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
|
|
* the configuration information for RTC.
|
|
* @retval HAL status
|
|
*/
|
|
HAL_StatusTypeDef HAL_RTCEx_DeactivateSecond(RTC_HandleTypeDef *hrtc)
|
|
{
|
|
/* Check input parameters */
|
|
if (hrtc == NULL)
|
|
{
|
|
return HAL_ERROR;
|
|
}
|
|
|
|
/* Process Locked */
|
|
__HAL_LOCK(hrtc);
|
|
|
|
hrtc->State = HAL_RTC_STATE_BUSY;
|
|
|
|
/* Deactivate Second interuption*/
|
|
__HAL_RTC_SECOND_DISABLE_IT(hrtc, RTC_IT_SEC);
|
|
|
|
hrtc->State = HAL_RTC_STATE_READY;
|
|
|
|
/* Process Unlocked */
|
|
__HAL_UNLOCK(hrtc);
|
|
|
|
return HAL_OK;
|
|
}
|
|
|
|
/**
|
|
* @brief This function handles second interrupt request.
|
|
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
|
|
* the configuration information for RTC.
|
|
* @retval None
|
|
*/
|
|
void HAL_RTCEx_RTCIRQHandler(RTC_HandleTypeDef *hrtc)
|
|
{
|
|
|
|
if (__HAL_RTC_SECOND_GET_IT_SOURCE(hrtc, RTC_IT_SEC))
|
|
{
|
|
/* Get the status of the Interrupt */
|
|
if (__HAL_RTC_SECOND_GET_FLAG(hrtc, RTC_FLAG_SEC))
|
|
{
|
|
/* Check if Overrun occurred */
|
|
if (__HAL_RTC_SECOND_GET_FLAG(hrtc, RTC_FLAG_OW))
|
|
{
|
|
/* Second error callback */
|
|
HAL_RTCEx_RTCEventErrorCallback(hrtc);
|
|
|
|
/* Clear flag Second */
|
|
__HAL_RTC_OVERFLOW_CLEAR_FLAG(hrtc, RTC_FLAG_OW);
|
|
|
|
/* Change RTC state */
|
|
hrtc->State = HAL_RTC_STATE_ERROR;
|
|
}
|
|
else
|
|
{
|
|
/* Second callback */
|
|
HAL_RTCEx_RTCEventCallback(hrtc);
|
|
|
|
/* Change RTC state */
|
|
hrtc->State = HAL_RTC_STATE_READY;
|
|
}
|
|
|
|
/* Clear flag Second */
|
|
__HAL_RTC_SECOND_CLEAR_FLAG(hrtc, RTC_FLAG_SEC);
|
|
}
|
|
}
|
|
if (__HAL_RTC_ALARM_GET_IT_SOURCE(hrtc, RTC_IT_ALRA))
|
|
{
|
|
/* Get the status of the Interrupt */
|
|
if (__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAF) != (uint32_t)RESET)
|
|
{
|
|
/* AlarmA callback */
|
|
#if (USE_HAL_RTC_REGISTER_CALLBACKS == 1)
|
|
hrtc->AlarmAEventCallback(hrtc);
|
|
#else
|
|
HAL_RTC_AlarmAEventCallback(hrtc);
|
|
#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */
|
|
|
|
/* Clear the Alarm interrupt pending bit */
|
|
__HAL_RTC_ALARM_CLEAR_FLAG(hrtc, RTC_FLAG_ALRAF);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* @brief Second event callback.
|
|
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
|
|
* the configuration information for RTC.
|
|
* @retval None
|
|
*/
|
|
__weak void HAL_RTCEx_RTCEventCallback(RTC_HandleTypeDef *hrtc)
|
|
{
|
|
/* Prevent unused argument(s) compilation warning */
|
|
UNUSED(hrtc);
|
|
/* NOTE : This function Should not be modified, when the callback is needed,
|
|
the HAL_RTCEx_RTCEventCallback could be implemented in the user file
|
|
*/
|
|
}
|
|
|
|
/**
|
|
* @brief Second event error callback.
|
|
* @param hrtc: pointer to a RTC_HandleTypeDef structure that contains
|
|
* the configuration information for RTC.
|
|
* @retval None
|
|
*/
|
|
__weak void HAL_RTCEx_RTCEventErrorCallback(RTC_HandleTypeDef *hrtc)
|
|
{
|
|
/* Prevent unused argument(s) compilation warning */
|
|
UNUSED(hrtc);
|
|
/* NOTE : This function Should not be modified, when the callback is needed,
|
|
the HAL_RTCEx_RTCEventErrorCallback could be implemented in the user file
|
|
*/
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup RTCEx_Exported_Functions_Group3 Extended Peripheral Control functions
|
|
* @brief Extended Peripheral Control functions
|
|
*
|
|
@verbatim
|
|
===============================================================================
|
|
##### Extension Peripheral Control functions #####
|
|
===============================================================================
|
|
[..]
|
|
This subsection provides functions allowing to
|
|
(+) Writes a data in a specified RTC Backup data register
|
|
(+) Read a data in a specified RTC Backup data register
|
|
(+) Sets the Smooth calibration parameters.
|
|
|
|
@endverbatim
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @brief Sets the Smooth calibration parameters.
|
|
* @param hrtc: RTC handle
|
|
* @param SmoothCalibPeriod: Not used (only present for compatibility with another families)
|
|
* @param SmoothCalibPlusPulses: Not used (only present for compatibility with another families)
|
|
* @param SmouthCalibMinusPulsesValue: specifies the RTC Clock Calibration value.
|
|
* This parameter must be a number between 0 and 0x7F.
|
|
* @retval HAL status
|
|
*/
|
|
HAL_StatusTypeDef HAL_RTCEx_SetSmoothCalib(RTC_HandleTypeDef *hrtc, uint32_t SmoothCalibPeriod, uint32_t SmoothCalibPlusPulses, uint32_t SmouthCalibMinusPulsesValue)
|
|
{
|
|
/* Check input parameters */
|
|
if (hrtc == NULL)
|
|
{
|
|
return HAL_ERROR;
|
|
}
|
|
/* Prevent unused argument(s) compilation warning */
|
|
UNUSED(SmoothCalibPeriod);
|
|
UNUSED(SmoothCalibPlusPulses);
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_RTC_SMOOTH_CALIB_MINUS(SmouthCalibMinusPulsesValue));
|
|
|
|
/* Process Locked */
|
|
__HAL_LOCK(hrtc);
|
|
|
|
hrtc->State = HAL_RTC_STATE_BUSY;
|
|
|
|
/* Sets RTC Clock Calibration value.*/
|
|
MODIFY_REG(RTC->BKP_RTCCR, BKP_RTCCR_CAL, SmouthCalibMinusPulsesValue);
|
|
|
|
/* Change RTC state */
|
|
hrtc->State = HAL_RTC_STATE_READY;
|
|
|
|
/* Process Unlocked */
|
|
__HAL_UNLOCK(hrtc);
|
|
|
|
return HAL_OK;
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* HAL_RTC_MODULE_ENABLED */
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/************************ (C) COPYRIGHT Puya *****END OF FILE****/
|
|
|