/******************** (C) COPYRIGHT 2006 STMicroelectronics ******************** | |
* File Name : 75x_rtc.c | |
* Author : MCD Application Team | |
* Date First Issued : 03/10/2006 | |
* Description : This file provides all the RTC software functions. | |
******************************************************************************** | |
* History: | |
* 07/17/2006 : V1.0 | |
* 03/10/2006 : V0.1 | |
******************************************************************************** | |
* THE PRESENT SOFTWARE 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 SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING | |
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. | |
*******************************************************************************/ | |
/* Includes ------------------------------------------------------------------*/ | |
#include "75x_rtc.h" | |
#include "75x_mrcc.h" | |
/* Private typedef -----------------------------------------------------------*/ | |
/* Private define ------------------------------------------------------------*/ | |
#define RTC_CNF_Enable_Mask 0x0010 /* Configuration Flag Enable Mask */ | |
#define RTC_CNF_Disable_Mask 0xFFEF /* Configuration Flag Disable Mask */ | |
#define RTC_LSB_Mask 0x0000FFFF /* RTC LSB Mask */ | |
#define RTC_MSB_Mask 0xFFFF0000 /* RTC MSB Mask */ | |
#define RTC_Prescaler_MSB_Mask 0x000F0000 /* RTC Prescaler MSB Mask */ | |
/* Private macro -------------------------------------------------------------*/ | |
/* Private variables ---------------------------------------------------------*/ | |
/* Private function prototypes -----------------------------------------------*/ | |
/* Private functions ---------------------------------------------------------*/ | |
/******************************************************************************* | |
* Function Name : RTC_DeInit | |
* Description : Deinitializes the RTC peripheral registers to their | |
* default reset values. | |
* Input : None | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_DeInit(void) | |
{ | |
MRCC_PeripheralSWResetConfig(MRCC_Peripheral_RTC,ENABLE); | |
MRCC_PeripheralSWResetConfig(MRCC_Peripheral_RTC,DISABLE); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_ITConfig | |
* Description : Enables or disables the specified RTC interrupts. | |
* Input : - RTC_IT: specifies the RTC interrupts sources to be enabled | |
* or disabled. | |
* This parameter can be a combination of one or more of the | |
* following values: | |
* - RTC_IT_Overflow: Overflow interrupt | |
* - RTC_IT_Alarm: Alarm interrupt | |
* - RTC_IT_Second: Second interrupt | |
* - NewState: new state of the specified RTC interrupts. | |
* This parameter can be: ENABLE or DISABLE. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_ITConfig(u16 RTC_IT, FunctionalState NewState) | |
{ | |
if(NewState == ENABLE) | |
{ | |
RTC->CRH |= RTC_IT; | |
} | |
else | |
{ | |
RTC->CRH &= ~RTC_IT; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : RTC_EnterConfigMode | |
* Description : Enters the RTC configuration mode. | |
* Input : None | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_EnterConfigMode(void) | |
{ | |
/* Set the CNF flag to enter in the Configuration Mode */ | |
RTC->CRL |= RTC_CNF_Enable_Mask; | |
} | |
/******************************************************************************* | |
* Function Name : RTC_ExitConfigMode | |
* Description : Exits from the RTC configuration mode. | |
* Input : None | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_ExitConfigMode(void) | |
{ | |
/* Reset the CNF flag to exit from the Configuration Mode */ | |
RTC->CRL &= RTC_CNF_Disable_Mask; | |
} | |
/******************************************************************************* | |
* Function Name : RTC_GetCounter | |
* Description : Gets the RTC counter value. | |
* Input : None | |
* Output : None | |
* Return : RTC counter value. | |
*******************************************************************************/ | |
u32 RTC_GetCounter(void) | |
{ | |
u16 Tmp = 0; | |
Tmp = RTC->CNTL; | |
return (((u32)RTC->CNTH << 16 ) |Tmp) ; | |
} | |
/******************************************************************************* | |
* Function Name : RTC_SetCounter | |
* Description : Sets the RTC counter value. | |
* Input : RTC counter new value. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_SetCounter(u32 CounterValue) | |
{ | |
RTC_EnterConfigMode(); | |
/* COUNTER Config ------------------------------------------------------------*/ | |
/* Set RTC COUNTER MSB word */ | |
RTC->CNTH =(CounterValue & RTC_MSB_Mask) >> 16; | |
/* Set RTC COUNTER LSB word */ | |
RTC->CNTL =(CounterValue & RTC_LSB_Mask); | |
RTC_ExitConfigMode(); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_SetPrescaler | |
* Description : Sets the RTC prescaler value. | |
* Input : RTC prescaler new value. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_SetPrescaler(u32 PrescalerValue) | |
{ | |
RTC_EnterConfigMode(); | |
/* PRESCALER Config ----------------------------------------------------------*/ | |
/* Set RTC PRESCALER MSB word */ | |
RTC->PRLH = (PrescalerValue & RTC_Prescaler_MSB_Mask) >> 16; | |
/* Set RTC PRESCALER LSB word */ | |
RTC->PRLL = (PrescalerValue & RTC_LSB_Mask); | |
RTC_ExitConfigMode(); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_GetPrescaler | |
* Description : Gets the RTC prescaler value. | |
* Input : None | |
* Output : None | |
* Return : RTC prescaler value. | |
*******************************************************************************/ | |
u32 RTC_GetPrescaler(void) | |
{ | |
u16 Tmp = 0; | |
Tmp = RTC->PRLL; | |
return (((u32)(RTC->PRLH & 0x000F) << 16 ) | Tmp); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_SetAlarm | |
* Description : Sets the RTC alarm value. | |
* Input : RTC alarm new value. | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_SetAlarm(u32 AlarmValue) | |
{ | |
RTC_EnterConfigMode(); | |
/* ALARM Config --------------------------------------------------------------*/ | |
/* Set the ALARM MSB word */ | |
RTC->ALRH = (AlarmValue & RTC_MSB_Mask) >> 16; | |
/* Set the ALARM LSB word */ | |
RTC->ALRL = (AlarmValue & RTC_LSB_Mask); | |
RTC_ExitConfigMode(); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_GetDivider | |
* Description : Gets the RTC divider value. | |
* Input : None | |
* Output : None | |
* Return : RTC Divider value. | |
*******************************************************************************/ | |
u32 RTC_GetDivider(void) | |
{ | |
u16 Tmp = 0; | |
Tmp = RTC->DIVL ; | |
return (((u32)(RTC->DIVH & 0x000F) << 16 ) | Tmp); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_WaitForLastTask | |
* Description : Waits until last write operation on RTC registers has finished. | |
* This function must be called before any write to RTC registers. | |
* Input : None | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_WaitForLastTask(void) | |
{ | |
/* Loop until RTOFF flag is set */ | |
while ((RTC->CRL & RTC_FLAG_RTOFF) == RESET); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_WaitForSynchro | |
* Description : Waits until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL) | |
* are synchronized with RTC APB clock. | |
* This function must be called before any read operation after | |
* an APB reset or an APB clock stop. | |
* Input : None | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_WaitForSynchro(void) | |
{ | |
/* Clear RSF flag */ | |
RTC->CRL &= ~RTC_FLAG_RSF; | |
/* Loop until RSF flag is set */ | |
while((RTC->CRL & RTC_FLAG_RSF)== RESET); | |
} | |
/******************************************************************************* | |
* Function Name : RTC_GetFlagStatus | |
* Description : Checks whether the specified RTC flag is set or not. | |
* Input : RTC_FLAG: specifies the flag to check. | |
* This parameter can be one the following values: | |
* - RTC_FLAG_RTOFF: RTC Operation OFF flag | |
* - RTC_FLAG_RSF: Registers Synchronized flag | |
* - RTC_FLAG_Overflow: Overflow interrupt flag | |
* - RTC_FLAG_Alarm: Alarm interrupt flag | |
* - RTC_FLAG_Second: Second interrupt flag | |
* Output : None | |
* Return : The new state of RTC_FLAG (SET or RESET). | |
*******************************************************************************/ | |
FlagStatus RTC_GetFlagStatus(u16 RTC_FLAG) | |
{ | |
if((RTC->CRL & RTC_FLAG) != RESET) | |
{ | |
return SET; | |
} | |
else | |
{ | |
return RESET; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : RTC_ClearFlag | |
* Description : Clears the RTCs pending flags. | |
* Input : RTC_FLAG: specifies the flag to clear. | |
* This parameter can be a combination of one or more of | |
* the following values: | |
* - RTC_FLAG_RSF: Registers Synchronized flag. This flag | |
* is cleared only after an APB reset or an APB Clock stop. | |
* - RTC_FLAG_Overflow: Overflow interrupt flag | |
* - RTC_FLAG_Alarm: Alarm interrupt flag | |
* - RTC_FLAG_Second: Second interrupt flag | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_ClearFlag(u16 RTC_FLAG) | |
{ | |
/* Clear the coressponding RTC flag */ | |
RTC->CRL &= ~RTC_FLAG; | |
} | |
/******************************************************************************* | |
* Function Name : RTC_GetITStatus | |
* Description : Checks whether the specified RTC interrupt has occured or not. | |
* Input : RTC_IT: specifies the RTC interrupts sources to check. | |
* This parameter can be a combination of one or more of | |
* the following values: | |
* - RTC_IT_Overflow: Overflow interrupt | |
* - RTC_IT_Alarm: Alarm interrupt | |
* - RTC_IT_Second: Second interrupt | |
* Output : None | |
* Return : The new state of the RTC_IT (SET or RESET). | |
*******************************************************************************/ | |
ITStatus RTC_GetITStatus(u16 RTC_IT) | |
{ | |
if(((RTC->CRH & RTC_IT) != RESET)&& ((RTC->CRL & RTC_IT) != RESET)) | |
{ | |
return SET; | |
} | |
else | |
{ | |
return RESET; | |
} | |
} | |
/******************************************************************************* | |
* Function Name : RTC_ClearITPendingBit | |
* Description : Clears the RTCs interrupt pending bits. | |
* Input : RTC_IT: specifies the interrupt pending bit to clear. | |
* This parameter can be any combination of one or more of | |
* the following values: | |
* - RTC_IT_Overflow: Overflow interrupt | |
* - RTC_IT_Alarm: Alarm interrupt | |
* - RTC_IT_Second: Second interrupt | |
* Output : None | |
* Return : None | |
*******************************************************************************/ | |
void RTC_ClearITPendingBit(u16 RTC_IT) | |
{ | |
/* Clear the coressponding RTC pending bit */ | |
RTC->CRL &= ~RTC_IT; | |
} | |
/******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/ |