stm32f10x_rtc.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:12k
源码类别:

uCOS

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name          : stm32f10x_rtc.c
  3. * Author             : MCD Application Team
  4. * Version            : V2.0.2
  5. * Date               : 07/11/2008
  6. * Description        : This file provides all the RTC firmware functions.
  7. ********************************************************************************
  8. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  9. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  10. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  11. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  12. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  13. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  14. *******************************************************************************/
  15. /* Includes ------------------------------------------------------------------*/
  16. #include "stm32f10x_rtc.h"
  17. /* Private typedef -----------------------------------------------------------*/
  18. /* Private define ------------------------------------------------------------*/
  19. #define CRL_CNF_Set      ((u16)0x0010)      /* Configuration Flag Enable Mask */
  20. #define CRL_CNF_Reset    ((u16)0xFFEF)      /* Configuration Flag Disable Mask */
  21. #define RTC_LSB_Mask     ((u32)0x0000FFFF)  /* RTC LSB Mask */
  22. #define PRLH_MSB_Mask    ((u32)0x000F0000)  /* RTC Prescaler MSB Mask */
  23. /* Private macro -------------------------------------------------------------*/
  24. /* Private variables ---------------------------------------------------------*/
  25. /* Private function prototypes -----------------------------------------------*/
  26. /* Private functions ---------------------------------------------------------*/
  27. /*******************************************************************************
  28. * Function Name  : RTC_ITConfig
  29. * Description    : Enables or disables the specified RTC interrupts.
  30. * Input          : - RTC_IT: specifies the RTC interrupts sources to be enabled
  31. *                    or disabled.
  32. *                    This parameter can be any combination of the following values:
  33. *                       - RTC_IT_OW: Overflow interrupt
  34. *                       - RTC_IT_ALR: Alarm interrupt
  35. *                       - RTC_IT_SEC: Second interrupt
  36. *                  - NewState: new state of the specified RTC interrupts.
  37. *                    This parameter can be: ENABLE or DISABLE.
  38. * Output         : None
  39. * Return         : None
  40. *******************************************************************************/
  41. void RTC_ITConfig(u16 RTC_IT, FunctionalState NewState)
  42. {
  43.   /* Check the parameters */
  44.   assert_param(IS_RTC_IT(RTC_IT));  
  45.   assert_param(IS_FUNCTIONAL_STATE(NewState));
  46.   
  47.   if (NewState != DISABLE)
  48.   {
  49.     RTC->CRH |= RTC_IT;
  50.   }
  51.   else
  52.   {
  53.     RTC->CRH &= (u16)~RTC_IT;
  54.   }
  55. }
  56. /*******************************************************************************
  57. * Function Name  : RTC_EnterConfigMode
  58. * Description    : Enters the RTC configuration mode.
  59. * Input          : None
  60. * Output         : None
  61. * Return         : None
  62. *******************************************************************************/
  63. void RTC_EnterConfigMode(void)
  64. {
  65.   /* Set the CNF flag to enter in the Configuration Mode */
  66.   RTC->CRL |= CRL_CNF_Set;
  67. }
  68. /*******************************************************************************
  69. * Function Name  : RTC_ExitConfigMode
  70. * Description    : Exits from the RTC configuration mode.
  71. * Input          : None
  72. * Output         : None
  73. * Return         : None
  74. *******************************************************************************/
  75. void RTC_ExitConfigMode(void)
  76. {
  77.   /* Reset the CNF flag to exit from the Configuration Mode */
  78.   RTC->CRL &= CRL_CNF_Reset;
  79. }
  80. /*******************************************************************************
  81. * Function Name  : RTC_GetCounter
  82. * Description    : Gets the RTC counter value.
  83. * Input          : None
  84. * Output         : None
  85. * Return         : RTC counter value.
  86. *******************************************************************************/
  87. u32 RTC_GetCounter(void)
  88. {
  89.   u16 tmp = 0;
  90.   tmp = RTC->CNTL;
  91.   return (((u32)RTC->CNTH << 16 ) | tmp) ;
  92. }
  93. /*******************************************************************************
  94. * Function Name  : RTC_SetCounter
  95. * Description    : Sets the RTC counter value.
  96. * Input          : - CounterValue: RTC counter new value.
  97. * Output         : None
  98. * Return         : None
  99. *******************************************************************************/
  100. void RTC_SetCounter(u32 CounterValue)
  101.   RTC_EnterConfigMode();
  102.   /* Set RTC COUNTER MSB word */
  103.   RTC->CNTH = CounterValue >> 16;
  104.   /* Set RTC COUNTER LSB word */
  105.   RTC->CNTL = (CounterValue & RTC_LSB_Mask);
  106.   RTC_ExitConfigMode();
  107. }
  108. /*******************************************************************************
  109. * Function Name  : RTC_SetPrescaler
  110. * Description    : Sets the RTC prescaler value.
  111. * Input          : - PrescalerValue: RTC prescaler new value.
  112. * Output         : None
  113. * Return         : None
  114. *******************************************************************************/
  115. void RTC_SetPrescaler(u32 PrescalerValue)
  116. {
  117.   /* Check the parameters */
  118.   assert_param(IS_RTC_PRESCALER(PrescalerValue));
  119.   
  120.   RTC_EnterConfigMode();
  121.   /* Set RTC PRESCALER MSB word */
  122.   RTC->PRLH = (PrescalerValue & PRLH_MSB_Mask) >> 16;
  123.   /* Set RTC PRESCALER LSB word */
  124.   RTC->PRLL = (PrescalerValue & RTC_LSB_Mask);
  125.   RTC_ExitConfigMode();
  126. }
  127. /*******************************************************************************
  128. * Function Name  : RTC_SetAlarm
  129. * Description    : Sets the RTC alarm value.
  130. * Input          : - AlarmValue: RTC alarm new value.
  131. * Output         : None
  132. * Return         : None
  133. *******************************************************************************/
  134. void RTC_SetAlarm(u32 AlarmValue)
  135. {  
  136.   RTC_EnterConfigMode();
  137.   /* Set the ALARM MSB word */
  138.   RTC->ALRH = AlarmValue >> 16;
  139.   /* Set the ALARM LSB word */
  140.   RTC->ALRL = (AlarmValue & RTC_LSB_Mask);
  141.   RTC_ExitConfigMode();
  142. }
  143. /*******************************************************************************
  144. * Function Name  : RTC_GetDivider
  145. * Description    : Gets the RTC divider value.
  146. * Input          : None
  147. * Output         : None
  148. * Return         : RTC Divider value.
  149. *******************************************************************************/
  150. u32 RTC_GetDivider(void)
  151. {
  152.   u32 tmp = 0x00;
  153.   tmp = ((u32)RTC->DIVH & (u32)0x000F) << 16;
  154.   tmp |= RTC->DIVL;
  155.   return tmp;
  156. }
  157. /*******************************************************************************
  158. * Function Name  : RTC_WaitForLastTask
  159. * Description    : Waits until last write operation on RTC registers has finished.
  160. *                  This function must be called before any write to RTC registers.
  161. * Input          : None
  162. * Output         : None
  163. * Return         : None
  164. *******************************************************************************/
  165. void RTC_WaitForLastTask(void)
  166. {
  167.   /* Loop until RTOFF flag is set */
  168.   while ((RTC->CRL & RTC_FLAG_RTOFF) == (u16)RESET)
  169.   {
  170.   }
  171. }
  172. /*******************************************************************************
  173. * Function Name  : RTC_WaitForSynchro
  174. * Description    : Waits until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL)
  175. *                  are synchronized with RTC APB clock.
  176. *                  This function must be called before any read operation after
  177. *                  an APB reset or an APB clock stop.
  178. * Input          : None
  179. * Output         : None
  180. * Return         : None
  181. *******************************************************************************/
  182. void RTC_WaitForSynchro(void)
  183. {
  184.   /* Clear RSF flag */
  185.   RTC->CRL &= (u16)~RTC_FLAG_RSF;
  186.   /* Loop until RSF flag is set */
  187.   while ((RTC->CRL & RTC_FLAG_RSF) == (u16)RESET)
  188.   {
  189.   }
  190. }
  191. /*******************************************************************************
  192. * Function Name  : RTC_GetFlagStatus
  193. * Description    : Checks whether the specified RTC flag is set or not.
  194. * Input          : - RTC_FLAG: specifies the flag to check.
  195. *                    This parameter can be one the following values:
  196. *                       - RTC_FLAG_RTOFF: RTC Operation OFF flag
  197. *                       - RTC_FLAG_RSF: Registers Synchronized flag
  198. *                       - RTC_FLAG_OW: Overflow flag
  199. *                       - RTC_FLAG_ALR: Alarm flag
  200. *                       - RTC_FLAG_SEC: Second flag
  201. * Output         : None
  202. * Return         : The new state of RTC_FLAG (SET or RESET).
  203. *******************************************************************************/
  204. FlagStatus RTC_GetFlagStatus(u16 RTC_FLAG)
  205. {
  206.   FlagStatus bitstatus = RESET;
  207.   
  208.   /* Check the parameters */
  209.   assert_param(IS_RTC_GET_FLAG(RTC_FLAG)); 
  210.   
  211.   if ((RTC->CRL & RTC_FLAG) != (u16)RESET)
  212.   {
  213.     bitstatus = SET;
  214.   }
  215.   else
  216.   {
  217.     bitstatus = RESET;
  218.   }
  219.   return bitstatus;
  220. }
  221. /*******************************************************************************
  222. * Function Name  : RTC_ClearFlag
  223. * Description    : Clears the RTC抯 pending flags.
  224. * Input          : - RTC_FLAG: specifies the flag to clear.
  225. *                    This parameter can be any combination of the following values:
  226. *                       - RTC_FLAG_RSF: Registers Synchronized flag. This flag
  227. *                         is cleared only after an APB reset or an APB Clock stop.
  228. *                       - RTC_FLAG_OW: Overflow flag
  229. *                       - RTC_FLAG_ALR: Alarm flag
  230. *                       - RTC_FLAG_SEC: Second flag
  231. * Output         : None
  232. * Return         : None
  233. *******************************************************************************/
  234. void RTC_ClearFlag(u16 RTC_FLAG)
  235. {
  236.   /* Check the parameters */
  237.   assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG)); 
  238.     
  239.   /* Clear the coressponding RTC flag */
  240.   RTC->CRL &= (u16)~RTC_FLAG;
  241. }
  242. /*******************************************************************************
  243. * Function Name  : RTC_GetITStatus
  244. * Description    : Checks whether the specified RTC interrupt has occured or not.
  245. * Input          : - RTC_IT: specifies the RTC interrupts sources to check.
  246. *                    This parameter can be one of the following values:
  247. *                       - RTC_IT_OW: Overflow interrupt
  248. *                       - RTC_IT_ALR: Alarm interrupt
  249. *                       - RTC_IT_SEC: Second interrupt
  250. * Output         : None
  251. * Return         : The new state of the RTC_IT (SET or RESET).
  252. *******************************************************************************/
  253. ITStatus RTC_GetITStatus(u16 RTC_IT)
  254. {
  255.   ITStatus bitstatus = RESET;
  256.   /* Check the parameters */
  257.   assert_param(IS_RTC_GET_IT(RTC_IT)); 
  258.   
  259.   bitstatus = (ITStatus)(RTC->CRL & RTC_IT);
  260.   if (((RTC->CRH & RTC_IT) != (u16)RESET) && (bitstatus != (u16)RESET))
  261.   {
  262.     bitstatus = SET;
  263.   }
  264.   else
  265.   {
  266.     bitstatus = RESET;
  267.   }
  268.   return bitstatus;
  269. }
  270. /*******************************************************************************
  271. * Function Name  : RTC_ClearITPendingBit
  272. * Description    : Clears the RTC抯 interrupt pending bits.
  273. * Input          : - RTC_IT: specifies the interrupt pending bit to clear.
  274. *                    This parameter can be any combination of the following values:
  275. *                       - RTC_IT_OW: Overflow interrupt
  276. *                       - RTC_IT_ALR: Alarm interrupt
  277. *                       - RTC_IT_SEC: Second interrupt
  278. * Output         : None
  279. * Return         : None
  280. *******************************************************************************/
  281. void RTC_ClearITPendingBit(u16 RTC_IT)
  282. {
  283.   /* Check the parameters */
  284.   assert_param(IS_RTC_IT(RTC_IT));  
  285.   
  286.   /* Clear the coressponding RTC pending bit */
  287.   RTC->CRL &= (u16)~RTC_IT;
  288. }
  289. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/