Merge pull request #93 from zyp/master
[fw/stlink] / example / libs_stm / src / stm32f10x / stm32f10x_bkp.c
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f10x_bkp.c\r
4   * @author  MCD Application Team\r
5   * @version V3.3.0\r
6   * @date    04/16/2010\r
7   * @brief   This file provides all the BKP firmware functions.\r
8   ******************************************************************************\r
9   * @copy\r
10   *\r
11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17   *\r
18   * <h2><center>&copy; COPYRIGHT 2010 STMicroelectronics</center></h2>\r
19   */ \r
20 \r
21 /* Includes ------------------------------------------------------------------*/\r
22 #include "stm32f10x_bkp.h"\r
23 #include "stm32f10x_rcc.h"\r
24 \r
25 /** @addtogroup STM32F10x_StdPeriph_Driver\r
26   * @{\r
27   */\r
28 \r
29 /** @defgroup BKP \r
30   * @brief BKP driver modules\r
31   * @{\r
32   */\r
33 \r
34 /** @defgroup BKP_Private_TypesDefinitions\r
35   * @{\r
36   */\r
37 \r
38 /**\r
39   * @}\r
40   */\r
41 \r
42 /** @defgroup BKP_Private_Defines\r
43   * @{\r
44   */\r
45 \r
46 /* ------------ BKP registers bit address in the alias region --------------- */\r
47 #define BKP_OFFSET        (BKP_BASE - PERIPH_BASE)\r
48 \r
49 /* --- CR Register ----*/\r
50 \r
51 /* Alias word address of TPAL bit */\r
52 #define CR_OFFSET         (BKP_OFFSET + 0x30)\r
53 #define TPAL_BitNumber    0x01\r
54 #define CR_TPAL_BB        (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPAL_BitNumber * 4))\r
55 \r
56 /* Alias word address of TPE bit */\r
57 #define TPE_BitNumber     0x00\r
58 #define CR_TPE_BB         (PERIPH_BB_BASE + (CR_OFFSET * 32) + (TPE_BitNumber * 4))\r
59 \r
60 /* --- CSR Register ---*/\r
61 \r
62 /* Alias word address of TPIE bit */\r
63 #define CSR_OFFSET        (BKP_OFFSET + 0x34)\r
64 #define TPIE_BitNumber    0x02\r
65 #define CSR_TPIE_BB       (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TPIE_BitNumber * 4))\r
66 \r
67 /* Alias word address of TIF bit */\r
68 #define TIF_BitNumber     0x09\r
69 #define CSR_TIF_BB        (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TIF_BitNumber * 4))\r
70 \r
71 /* Alias word address of TEF bit */\r
72 #define TEF_BitNumber     0x08\r
73 #define CSR_TEF_BB        (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (TEF_BitNumber * 4))\r
74 \r
75 /* ---------------------- BKP registers bit mask ------------------------ */\r
76 \r
77 /* RTCCR register bit mask */\r
78 #define RTCCR_CAL_Mask    ((uint16_t)0xFF80)\r
79 #define RTCCR_Mask        ((uint16_t)0xFC7F)\r
80 \r
81 /* CSR register bit mask */\r
82 #define CSR_CTE_Set       ((uint16_t)0x0001)\r
83 #define CSR_CTI_Set       ((uint16_t)0x0002)\r
84 \r
85 /**\r
86   * @}\r
87   */ \r
88 \r
89 \r
90 /** @defgroup BKP_Private_Macros\r
91   * @{\r
92   */\r
93 \r
94 /**\r
95   * @}\r
96   */\r
97 \r
98 /** @defgroup BKP_Private_Variables\r
99   * @{\r
100   */\r
101 \r
102 /**\r
103   * @}\r
104   */\r
105 \r
106 /** @defgroup BKP_Private_FunctionPrototypes\r
107   * @{\r
108   */\r
109 \r
110 /**\r
111   * @}\r
112   */\r
113 \r
114 /** @defgroup BKP_Private_Functions\r
115   * @{\r
116   */\r
117 \r
118 /**\r
119   * @brief  Deinitializes the BKP peripheral registers to their default reset values.\r
120   * @param  None\r
121   * @retval None\r
122   */\r
123 void BKP_DeInit(void)\r
124 {\r
125   RCC_BackupResetCmd(ENABLE);\r
126   RCC_BackupResetCmd(DISABLE);\r
127 }\r
128 \r
129 /**\r
130   * @brief  Configures the Tamper Pin active level.\r
131   * @param  BKP_TamperPinLevel: specifies the Tamper Pin active level.\r
132   *   This parameter can be one of the following values:\r
133   *     @arg BKP_TamperPinLevel_High: Tamper pin active on high level\r
134   *     @arg BKP_TamperPinLevel_Low: Tamper pin active on low level\r
135   * @retval None\r
136   */\r
137 void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel)\r
138 {\r
139   /* Check the parameters */\r
140   assert_param(IS_BKP_TAMPER_PIN_LEVEL(BKP_TamperPinLevel));\r
141   *(__IO uint32_t *) CR_TPAL_BB = BKP_TamperPinLevel;\r
142 }\r
143 \r
144 /**\r
145   * @brief  Enables or disables the Tamper Pin activation.\r
146   * @param  NewState: new state of the Tamper Pin activation.\r
147   *   This parameter can be: ENABLE or DISABLE.\r
148   * @retval None\r
149   */\r
150 void BKP_TamperPinCmd(FunctionalState NewState)\r
151 {\r
152   /* Check the parameters */\r
153   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
154   *(__IO uint32_t *) CR_TPE_BB = (uint32_t)NewState;\r
155 }\r
156 \r
157 /**\r
158   * @brief  Enables or disables the Tamper Pin Interrupt.\r
159   * @param  NewState: new state of the Tamper Pin Interrupt.\r
160   *   This parameter can be: ENABLE or DISABLE.\r
161   * @retval None\r
162   */\r
163 void BKP_ITConfig(FunctionalState NewState)\r
164 {\r
165   /* Check the parameters */\r
166   assert_param(IS_FUNCTIONAL_STATE(NewState));\r
167   *(__IO uint32_t *) CSR_TPIE_BB = (uint32_t)NewState;\r
168 }\r
169 \r
170 /**\r
171   * @brief  Select the RTC output source to output on the Tamper pin.\r
172   * @param  BKP_RTCOutputSource: specifies the RTC output source.\r
173   *   This parameter can be one of the following values:\r
174   *     @arg BKP_RTCOutputSource_None: no RTC output on the Tamper pin.\r
175   *     @arg BKP_RTCOutputSource_CalibClock: output the RTC clock with frequency\r
176   *                                          divided by 64 on the Tamper pin.\r
177   *     @arg BKP_RTCOutputSource_Alarm: output the RTC Alarm pulse signal on\r
178   *                                     the Tamper pin.\r
179   *     @arg BKP_RTCOutputSource_Second: output the RTC Second pulse signal on\r
180   *                                      the Tamper pin.  \r
181   * @retval None\r
182   */\r
183 void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource)\r
184 {\r
185   uint16_t tmpreg = 0;\r
186   /* Check the parameters */\r
187   assert_param(IS_BKP_RTC_OUTPUT_SOURCE(BKP_RTCOutputSource));\r
188   tmpreg = BKP->RTCCR;\r
189   /* Clear CCO, ASOE and ASOS bits */\r
190   tmpreg &= RTCCR_Mask;\r
191   \r
192   /* Set CCO, ASOE and ASOS bits according to BKP_RTCOutputSource value */\r
193   tmpreg |= BKP_RTCOutputSource;\r
194   /* Store the new value */\r
195   BKP->RTCCR = tmpreg;\r
196 }\r
197 \r
198 /**\r
199   * @brief  Sets RTC Clock Calibration value.\r
200   * @param  CalibrationValue: specifies the RTC Clock Calibration value.\r
201   *   This parameter must be a number between 0 and 0x7F.\r
202   * @retval None\r
203   */\r
204 void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue)\r
205 {\r
206   uint16_t tmpreg = 0;\r
207   /* Check the parameters */\r
208   assert_param(IS_BKP_CALIBRATION_VALUE(CalibrationValue));\r
209   tmpreg = BKP->RTCCR;\r
210   /* Clear CAL[6:0] bits */\r
211   tmpreg &= RTCCR_CAL_Mask;\r
212   /* Set CAL[6:0] bits according to CalibrationValue value */\r
213   tmpreg |= CalibrationValue;\r
214   /* Store the new value */\r
215   BKP->RTCCR = tmpreg;\r
216 }\r
217 \r
218 /**\r
219   * @brief  Writes user data to the specified Data Backup Register.\r
220   * @param  BKP_DR: specifies the Data Backup Register.\r
221   *   This parameter can be BKP_DRx where x:[1, 42]\r
222   * @param  Data: data to write\r
223   * @retval None\r
224   */\r
225 void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data)\r
226 {\r
227   __IO uint32_t tmp = 0;\r
228 \r
229   /* Check the parameters */\r
230   assert_param(IS_BKP_DR(BKP_DR));\r
231 \r
232   tmp = (uint32_t)BKP_BASE; \r
233   tmp += BKP_DR;\r
234 \r
235   *(__IO uint32_t *) tmp = Data;\r
236 }\r
237 \r
238 /**\r
239   * @brief  Reads data from the specified Data Backup Register.\r
240   * @param  BKP_DR: specifies the Data Backup Register.\r
241   *   This parameter can be BKP_DRx where x:[1, 42]\r
242   * @retval The content of the specified Data Backup Register\r
243   */\r
244 uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR)\r
245 {\r
246   __IO uint32_t tmp = 0;\r
247 \r
248   /* Check the parameters */\r
249   assert_param(IS_BKP_DR(BKP_DR));\r
250 \r
251   tmp = (uint32_t)BKP_BASE; \r
252   tmp += BKP_DR;\r
253 \r
254   return (*(__IO uint16_t *) tmp);\r
255 }\r
256 \r
257 /**\r
258   * @brief  Checks whether the Tamper Pin Event flag is set or not.\r
259   * @param  None\r
260   * @retval The new state of the Tamper Pin Event flag (SET or RESET).\r
261   */\r
262 FlagStatus BKP_GetFlagStatus(void)\r
263 {\r
264   return (FlagStatus)(*(__IO uint32_t *) CSR_TEF_BB);\r
265 }\r
266 \r
267 /**\r
268   * @brief  Clears Tamper Pin Event pending flag.\r
269   * @param  None\r
270   * @retval None\r
271   */\r
272 void BKP_ClearFlag(void)\r
273 {\r
274   /* Set CTE bit to clear Tamper Pin Event flag */\r
275   BKP->CSR |= CSR_CTE_Set;\r
276 }\r
277 \r
278 /**\r
279   * @brief  Checks whether the Tamper Pin Interrupt has occurred or not.\r
280   * @param  None\r
281   * @retval The new state of the Tamper Pin Interrupt (SET or RESET).\r
282   */\r
283 ITStatus BKP_GetITStatus(void)\r
284 {\r
285   return (ITStatus)(*(__IO uint32_t *) CSR_TIF_BB);\r
286 }\r
287 \r
288 /**\r
289   * @brief  Clears Tamper Pin Interrupt pending bit.\r
290   * @param  None\r
291   * @retval None\r
292   */\r
293 void BKP_ClearITPendingBit(void)\r
294 {\r
295   /* Set CTI bit to clear Tamper Pin Interrupt pending bit */\r
296   BKP->CSR |= CSR_CTI_Set;\r
297 }\r
298 \r
299 /**\r
300   * @}\r
301   */\r
302 \r
303 /**\r
304   * @}\r
305   */\r
306 \r
307 /**\r
308   * @}\r
309   */\r
310 \r
311 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r