232 lines
9.0 KiB
C
232 lines
9.0 KiB
C
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @file hal_bkp.c
|
||
|
/// @author AE TEAM
|
||
|
/// @brief THIS FILE PROVIDES ALL THE BKP FIRMWARE FUNCTIONS.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @attention
|
||
|
///
|
||
|
/// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
|
||
|
/// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
|
||
|
/// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
|
||
|
/// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
|
||
|
/// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
|
||
|
/// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
|
||
|
///
|
||
|
/// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2>
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
// Define to prevent recursive inclusion
|
||
|
#define _HAL_BKP_C_
|
||
|
|
||
|
// Files includes
|
||
|
#include "types.h"
|
||
|
#include "hal_pwr.h"
|
||
|
#include "hal_rcc.h"
|
||
|
#include "hal_bkp.h"
|
||
|
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @addtogroup MM32_Hardware_Abstract_Layer
|
||
|
/// @{
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @addtogroup BKP_HAL
|
||
|
/// @{
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @addtogroup BKP_Exported_Functions
|
||
|
/// @{
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Deinitializes the BKP peripheral registers to their default reset
|
||
|
/// values.
|
||
|
/// @param None.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_DeInit(void)
|
||
|
{
|
||
|
RCC_BackupResetCmd(ENABLE);
|
||
|
RCC_BackupResetCmd(DISABLE);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Configures the Tamper Pin active level.
|
||
|
/// @param tamper_pin_level: specifies the Tamper Pin active level.
|
||
|
/// This parameter can be one of the following values:
|
||
|
/// @arg BKP_TamperPinLevel_High: Tamper pin active on high level
|
||
|
/// @arg BKP_TamperPinLevel_Low: Tamper pin active on low level
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_TamperPinLevelConfig(BKPTPAL_Typedef tamper_pin_level)
|
||
|
{
|
||
|
BKP->CR = tamper_pin_level;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Enables or disables the Tamper Pin activation.
|
||
|
/// @param state: new state of the Tamper Pin activation.
|
||
|
/// This parameter can be: ENABLE or DISABLE.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_TamperPinCmd(FunctionalState state)
|
||
|
{
|
||
|
(state) ? SET_BIT(BKP->CR, BKP_CR_TPE) : CLEAR_BIT(BKP->CR, BKP_CR_TPE);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Enables or disables the Tamper Pin Interrupt.
|
||
|
/// @param state: new state of the Tamper Pin Interrupt.
|
||
|
/// This parameter can be: ENABLE or DISABLE.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_ITConfig(FunctionalState state)
|
||
|
{
|
||
|
(state) ? SET_BIT(BKP->CSR, BKP_CSR_TPIE) : CLEAR_BIT(BKP->CSR, BKP_CSR_TPIE);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Select the RTC output source to output on the Tamper pin.
|
||
|
/// @param rtc_output_source: specifies the RTC output source.
|
||
|
/// This parameter can be one of the following values:
|
||
|
/// @arg BKP_RTCOutputSource_None: no RTC output on the Tamper pin.
|
||
|
/// @arg BKP_RTCOutputSource_CalibClock: output the RTC clock with frequency
|
||
|
/// divided by 64 on the Tamper pin.
|
||
|
/// @arg BKP_RTCOutputSource_Alarm: output the RTC Alarm pulse signal on
|
||
|
/// the Tamper pin.
|
||
|
/// @arg BKP_RTCOutputSource_Second: output the RTC Second pulse signal on
|
||
|
/// the Tamper pin.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_RTCOutputConfig(BKPRTCOUTPUTSRC_Typedef rtc_output_source)
|
||
|
{
|
||
|
MODIFY_REG(BKP->RTCCR, BKP_RTCCR_CCO | BKP_RTCCR_ASOE | BKP_RTCCR_ASOS, rtc_output_source);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Sets RTC Clock Calibration value.
|
||
|
/// @param calibration_value: specifies the RTC Clock Calibration value.
|
||
|
/// This parameter must be a number between 0 and 0x7F.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_SetRTCCalibrationValue(u8 calibration_value)
|
||
|
{
|
||
|
MODIFY_REG(BKP->RTCCR, BKP_RTCCR_CAL, calibration_value);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Checks whether the Tamper Pin Event flag is set or not.
|
||
|
/// @param None.
|
||
|
/// @retval State: The new state of the Tamper Pin Event flag (SET or RESET).
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
FlagStatus BKP_GetFlagStatus(void)
|
||
|
{
|
||
|
return ((BKP->CSR & BKP_CSR_TEF) ? SET : RESET);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Clears Tamper Pin Event pending flag.
|
||
|
/// @param None.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_ClearFlag(void)
|
||
|
{
|
||
|
SET_BIT(BKP->CSR, BKP_CSR_CTE);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Checks whether the Tamper Pin Interrupt has occurred or not.
|
||
|
/// @param None.
|
||
|
/// @retval State: The new state of the Tamper Pin Interrupt (SET or RESET).
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
ITStatus BKP_GetITStatus(void)
|
||
|
{
|
||
|
return ((BKP->CSR & BKP_CSR_TIF) ? SET : RESET);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Clears Tamper Pin Interrupt pending bit.
|
||
|
/// @param None.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_ClearITPendingBit(void)
|
||
|
{
|
||
|
SET_BIT(BKP->CSR, BKP_CSR_CTI);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Writes user data to the specified data Backup Register.
|
||
|
/// @param bkp_dr: specifies the data Backup Register.
|
||
|
/// This parameter can be BKP_DRx where x:[1, 10]
|
||
|
/// @param data: data to write
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void BKP_WriteBackupRegister(BKPDR_Typedef bkp_dr, u16 data)
|
||
|
{
|
||
|
*(vu16*)(BKP_BASE + bkp_dr) = data;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Reads data from the specified data Backup Register.
|
||
|
/// @param bkp_dr: specifies the data Backup Register.
|
||
|
/// This parameter can be BKP_DRx where x:[1, 10]
|
||
|
/// @retval data: The content of the specified data Backup Register
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
u16 BKP_ReadBackupRegister(BKPDR_Typedef bkp_dr)
|
||
|
{
|
||
|
return (*(vu16*)(BKP_BASE + bkp_dr));
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Extended function interface
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Initializes the BKP peripheral, enable access to the backup
|
||
|
/// registers.
|
||
|
/// @param None.
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void exBKP_Init(void)
|
||
|
{
|
||
|
RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWR, ENABLE);
|
||
|
//COMMON_EnableIpClock(emCLOCK_PWR);
|
||
|
RCC_APB1PeriphClockCmd(RCC_APB1ENR_BKP, ENABLE);
|
||
|
//COMMON_EnableIpClock(emCLOCK_BKP);
|
||
|
|
||
|
RCC->BDCR |= RCC_BDCR_DBP;
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Writes user data to the specified data Backup Register immediately.
|
||
|
/// @param bkp_dr: specifies the data Backup Register.
|
||
|
/// This parameter can be BKP_DRx where x:[1, 10]
|
||
|
/// @param data: data to write
|
||
|
/// @retval None.
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void exBKP_ImmWrite(BKPDR_Typedef bkp_dr, u16 dat)
|
||
|
{
|
||
|
RCC->BDCR |= RCC_BDCR_DBP;
|
||
|
*(vu16*)(BKP_BASE + bkp_dr) = dat;
|
||
|
RCC->BDCR &= ~RCC_BDCR_DBP;
|
||
|
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
/// @brief Reads data from the specified data Backup Register immediately.
|
||
|
/// @param bkp_dr: specifies the data Backup Register.
|
||
|
/// This parameter can be BKP_DRx where x:[1, 10]
|
||
|
/// @retval data: The content of the specified data Backup Register
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
u16 exBKP_ImmRead(BKPDR_Typedef bkp_dr)
|
||
|
{
|
||
|
u16 dat;
|
||
|
RCC->BDCR |= RCC_BDCR_DBP;
|
||
|
dat = (*(vu16*)(BKP_BASE + bkp_dr));
|
||
|
RCC->BDCR &= ~RCC_BDCR_DBP;
|
||
|
return dat;
|
||
|
}
|
||
|
|
||
|
/// @}
|
||
|
|
||
|
/// @}
|
||
|
|
||
|
/// @}
|