www.pudn.com > STM32F107-ucosii.rar > stm32f10x_bkp.c, change:2009-06-23,size:8497b


/** 
  ****************************************************************************** 
  * @file    stm32f10x_bkp.c 
  * @author  MCD Application Team 
  * @version V3.1.0 
  * @date    06/19/2009 
  * @brief   This file provides all the BKP firmware functions. 
  ****************************************************************************** 
  * @copy 
  * 
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 
  * 
  * <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2> 
  */  
 
/* Includes ------------------------------------------------------------------*/ 
#include "stm32f10x_bkp.h" 
#include "stm32f10x_rcc.h" 
 
/** @addtogroup STM32F10x_StdPeriph_Driver 
  * @{ 
  */ 
 
/** @defgroup BKP  
  * @brief BKP driver modules 
  * @{ 
  */ 
 
/** @defgroup BKP_Private_TypesDefinitions 
  * @{ 
  */ 
 
/** 
  * @} 
  */ 
 
/** @defgroup BKP_Private_Defines 
  * @{ 
  */ 
 
/* ------------ BKP registers bit address in the alias region --------------- */ 
#define BKP_OFFSET        (BKP_BASE - PERIPH_BASE) 
 
/* --- CR Register ----*/ 
 
/* Alias word address of TPAL bit */ 
#define CR_OFFSET         (BKP_OFFSET + 0x30) 
#define TPAL_BitNumber    0x01 
#define CR_TPAL_BB        (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPAL_BitNumber * 4)) 
 
/* Alias word address of TPE bit */ 
#define TPE_BitNumber     0x00 
#define CR_TPE_BB         (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPE_BitNumber * 4)) 
 
/* --- CSR Register ---*/ 
 
/* Alias word address of TPIE bit */ 
#define CSR_OFFSET        (BKP_OFFSET + 0x34) 
#define TPIE_BitNumber    0x02 
#define CSR_TPIE_BB       (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TPIE_BitNumber * 4)) 
 
/* Alias word address of TIF bit */ 
#define TIF_BitNumber     0x09 
#define CSR_TIF_BB        (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TIF_BitNumber * 4)) 
 
/* Alias word address of TEF bit */ 
#define TEF_BitNumber     0x08 
#define CSR_TEF_BB        (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TEF_BitNumber * 4)) 
 
/* ---------------------- BKP registers bit mask ------------------------ */ 
 
/* RTCCR register bit mask */ 
#define RTCCR_CAL_Mask    ((uint16_t)0xFF80) 
#define RTCCR_Mask        ((uint16_t)0xFC7F) 
 
/* CSR register bit mask */ 
#define CSR_CTE_Set       ((uint16_t)0x0001) 
#define CSR_CTI_Set       ((uint16_t)0x0002) 
 
/** 
  * @} 
  */  
 
 
/** @defgroup BKP_Private_Macros 
  * @{ 
  */ 
 
/** 
  * @} 
  */ 
 
/** @defgroup BKP_Private_Variables 
  * @{ 
  */ 
 
/** 
  * @} 
  */ 
 
/** @defgroup BKP_Private_FunctionPrototypes 
  * @{ 
  */ 
 
/** 
  * @} 
  */ 
 
/** @defgroup BKP_Private_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  BKP_TamperPinLevel: 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(uint16_t BKP_TamperPinLevel) 
{ 
  /* Check the parameters */ 
  assert_param(IS_BKP_TAMPER_PIN_LEVEL(BKP_TamperPinLevel)); 
  *(__IO uint32_t *) CR_TPAL_BB = BKP_TamperPinLevel; 
} 
 
/** 
  * @brief  Enables or disables the Tamper Pin activation. 
  * @param  NewState: new state of the Tamper Pin activation. 
  *   This parameter can be: ENABLE or DISABLE. 
  * @retval None 
  */ 
void BKP_TamperPinCmd(FunctionalState NewState) 
{ 
  /* Check the parameters */ 
  assert_param(IS_FUNCTIONAL_STATE(NewState)); 
  *(__IO uint32_t *) CR_TPE_BB = (uint32_t)NewState; 
} 
 
/** 
  * @brief  Enables or disables the Tamper Pin Interrupt. 
  * @param  NewState: new state of the Tamper Pin Interrupt. 
  *   This parameter can be: ENABLE or DISABLE. 
  * @retval None 
  */ 
void BKP_ITConfig(FunctionalState NewState) 
{ 
  /* Check the parameters */ 
  assert_param(IS_FUNCTIONAL_STATE(NewState)); 
  *(__IO uint32_t *) CSR_TPIE_BB = (uint32_t)NewState; 
} 
 
/** 
  * @brief  Select the RTC output source to output on the Tamper pin. 
  * @param  BKP_RTCOutputSource: 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(uint16_t BKP_RTCOutputSource) 
{ 
  uint16_t tmpreg = 0; 
  /* Check the parameters */ 
  assert_param(IS_BKP_RTC_OUTPUT_SOURCE(BKP_RTCOutputSource)); 
  tmpreg = BKP->RTCCR; 
  /* Clear CCO, ASOE and ASOS bits */ 
  tmpreg &= RTCCR_Mask; 
   
  /* Set CCO, ASOE and ASOS bits according to BKP_RTCOutputSource value */ 
  tmpreg |= BKP_RTCOutputSource; 
  /* Store the new value */ 
  BKP->RTCCR = tmpreg; 
} 
 
/** 
  * @brief  Sets RTC Clock Calibration value. 
  * @param  CalibrationValue: specifies the RTC Clock Calibration value. 
  *   This parameter must be a number between 0 and 0x7F. 
  * @retval None 
  */ 
void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue) 
{ 
  uint16_t tmpreg = 0; 
  /* Check the parameters */ 
  assert_param(IS_BKP_CALIBRATION_VALUE(CalibrationValue)); 
  tmpreg = BKP->RTCCR; 
  /* Clear CAL[6:0] bits */ 
  tmpreg &= RTCCR_CAL_Mask; 
  /* Set CAL[6:0] bits according to CalibrationValue value */ 
  tmpreg |= CalibrationValue; 
  /* Store the new value */ 
  BKP->RTCCR = tmpreg; 
} 
 
/** 
  * @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, 42] 
  * @param  Data: data to write 
  * @retval None 
  */ 
void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) 
{ 
  __IO uint32_t tmp = 0; 
 
  /* Check the parameters */ 
  assert_param(IS_BKP_DR(BKP_DR)); 
 
  tmp = (uint32_t)BKP_BASE;  
  tmp += BKP_DR; 
 
  *(__IO uint32_t *) tmp = 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, 42] 
  * @retval The content of the specified Data Backup Register 
  */ 
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR) 
{ 
  __IO uint32_t tmp = 0; 
 
  /* Check the parameters */ 
  assert_param(IS_BKP_DR(BKP_DR)); 
 
  tmp = (uint32_t)BKP_BASE;  
  tmp += BKP_DR; 
 
  return (*(__IO uint16_t *) tmp); 
} 
 
/** 
  * @brief  Checks whether the Tamper Pin Event flag is set or not. 
  * @param  None 
  * @retval The new state of the Tamper Pin Event flag (SET or RESET). 
  */ 
FlagStatus BKP_GetFlagStatus(void) 
{ 
  return (FlagStatus)(*(__IO uint32_t *) CSR_TEF_BB); 
} 
 
/** 
  * @brief  Clears Tamper Pin Event pending flag. 
  * @param  None 
  * @retval None 
  */ 
void BKP_ClearFlag(void) 
{ 
  /* Set CTE bit to clear Tamper Pin Event flag */ 
  BKP->CSR |= CSR_CTE_Set; 
} 
 
/** 
  * @brief  Checks whether the Tamper Pin Interrupt has occurred or not. 
  * @param  None 
  * @retval The new state of the Tamper Pin Interrupt (SET or RESET). 
  */ 
ITStatus BKP_GetITStatus(void) 
{ 
  return (ITStatus)(*(__IO uint32_t *) CSR_TIF_BB); 
} 
 
/** 
  * @brief  Clears Tamper Pin Interrupt pending bit. 
  * @param  None 
  * @retval None 
  */ 
void BKP_ClearITPendingBit(void) 
{ 
  /* Set CTI bit to clear Tamper Pin Interrupt pending bit */ 
  BKP->CSR |= CSR_CTI_Set; 
} 
 
/** 
  * @} 
  */ 
 
/** 
  * @} 
  */ 
 
/** 
  * @} 
  */ 
 
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/