diff --git a/arch/arm/src/stm32f7/stm32_lsi.c b/arch/arm/src/stm32f7/stm32_lsi.c index 3aea41ba4db..46e96163727 100644 --- a/arch/arm/src/stm32f7/stm32_lsi.c +++ b/arch/arm/src/stm32f7/stm32_lsi.c @@ -44,18 +44,6 @@ #include "stm32_rcc.h" -/**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -/**************************************************************************** - * Private Data - ****************************************************************************/ - -/**************************************************************************** - * Private Functions - ****************************************************************************/ - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -70,8 +58,8 @@ void stm32_rcc_enablelsi(void) { - /* Enable the Internal Low-Speed (LSI) RC Oscillator by setting the LSION bit - * the RCC CSR register. + /* Enable the Internal Low-Speed (LSI) RC Oscillator by setting the LSION + * bit the RCC CSR register. */ modifyreg32(STM32_RCC_CSR, 0, RCC_CSR_LSION); @@ -91,8 +79,8 @@ void stm32_rcc_enablelsi(void) void stm32_rcc_disablelsi(void) { - /* Enable the Internal Low-Speed (LSI) RC Oscillator by setting the LSION bit - * the RCC CSR register. + /* Enable the Internal Low-Speed (LSI) RC Oscillator by setting the LSION + * bit the RCC CSR register. */ modifyreg32(STM32_RCC_CSR, RCC_CSR_LSION, 0); diff --git a/arch/arm/src/stm32f7/stm32_rtc.c b/arch/arm/src/stm32f7/stm32_rtc.c index b8b469e6625..bd42b8396a6 100644 --- a/arch/arm/src/stm32f7/stm32_rtc.c +++ b/arch/arm/src/stm32f7/stm32_rtc.c @@ -34,9 +34,9 @@ * ****************************************************************************/ -/************************************************************************************ +/**************************************************************************** * Included Files - ************************************************************************************/ + ****************************************************************************/ #include @@ -61,10 +61,10 @@ #ifdef CONFIG_RTC -/************************************************************************************ +/**************************************************************************** * Pre-processor Definitions - ************************************************************************************/ -/* Configuration ********************************************************************/ + ****************************************************************************/ +/* Configuration ************************************************************/ /* This RTC implementation supports * - date/time RTC hardware * - extended functions Alarm A and B for STM32F4xx and onwards @@ -82,7 +82,7 @@ # error "CONFIG_STM32F7_PWR must selected to use this driver" #endif -/* Constants ************************************************************************/ +/* Constants ****************************************************************/ #if defined(CONFIG_STM32F7_RTC_HSECLOCK) # define RCC_BDCR_RTCSEL RCC_BDCR_RTCSEL_HSE @@ -102,10 +102,6 @@ #define MINUTES_IN_HOUR 60 #define HOURS_IN_DAY 24 -/* Can't exceed 24hours-2min without providing extra logic for carry over for day. */ - -#define MAX_RTC_ALARM_REL_MINUTES (24*MINUTES_IN_HOUR)-2 - #define hours_add(parm_hrs) \ time->tm_hour += parm_hrs;\ if ((HOURS_IN_DAY-1) < (time->tm_hour))\ @@ -118,9 +114,9 @@ #define RTC_ALRMR_DIS_DATE_MASK (RTC_ALRMR_MSK4) #define RTC_ALRMR_ENABLE (0) -/************************************************************************************ +/**************************************************************************** * Private Types - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_RTC_ALARM typedef unsigned int rtc_alarmreg_t; @@ -132,9 +128,9 @@ struct alm_cbinfo_s }; #endif -/************************************************************************************ +/**************************************************************************** * Private Data - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_RTC_ALARM /* Callback to use when an EXTI is activated */ @@ -142,17 +138,17 @@ struct alm_cbinfo_s static struct alm_cbinfo_s g_alarmcb[RTC_ALARM_LAST]; #endif -/************************************************************************************ +/**************************************************************************** * Public Data - ************************************************************************************/ + ****************************************************************************/ /* g_rtc_enabled is set true after the RTC has successfully initialized */ volatile bool g_rtc_enabled = false; -/************************************************************************************ +/**************************************************************************** * Private Function Prototypes - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_RTC_ALARM static int rtchw_check_alrawf(void); @@ -163,11 +159,11 @@ static int rtchw_set_alrmbr(rtc_alarmreg_t alarmreg); #endif #endif -/************************************************************************************ +/**************************************************************************** * Private Functions - ************************************************************************************/ + ****************************************************************************/ -/************************************************************************************ +/**************************************************************************** * Name: rtc_dumpregs * * Description: @@ -179,7 +175,7 @@ static int rtchw_set_alrmbr(rtc_alarmreg_t alarmreg); * Returned Value: * None * - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_DEBUG_RTC_INFO static void rtc_dumpregs(FAR const char *msg) @@ -216,7 +212,7 @@ static void rtc_dumpregs(FAR const char *msg) # define rtc_dumpregs(msg) #endif -/************************************************************************************ +/**************************************************************************** * Name: rtc_dumptime * * Description: @@ -228,7 +224,7 @@ static void rtc_dumpregs(FAR const char *msg) * Returned Value: * None * - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_DEBUG_RTC_INFO static void rtc_dumptime(FAR const struct tm *tp, FAR const char *msg) @@ -245,7 +241,7 @@ static void rtc_dumptime(FAR const struct tm *tp, FAR const char *msg) # define rtc_dumptime(tp, msg) #endif -/************************************************************************************ +/**************************************************************************** * Name: rtc_wprunlock * * Description: @@ -257,7 +253,7 @@ static void rtc_dumptime(FAR const struct tm *tp, FAR const char *msg) * Returned Value: * None * - ************************************************************************************/ + ****************************************************************************/ static void rtc_wprunlock(void) { @@ -280,7 +276,7 @@ static void rtc_wprunlock(void) putreg32(0x53, STM32_RTC_WPR); } -/************************************************************************************ +/**************************************************************************** * Name: rtc_wprlock * * Description: @@ -292,7 +288,7 @@ static void rtc_wprunlock(void) * Returned Value: * None * - ************************************************************************************/ + ****************************************************************************/ static inline void rtc_wprlock(void) { @@ -300,14 +296,14 @@ static inline void rtc_wprlock(void) putreg32(0xff, STM32_RTC_WPR); - /* Disable write access to the backup domain (RTC registers, RTC backup data - * registers and backup SRAM). + /* Disable write access to the backup domain (RTC registers, RTC backup + * data registers and backup SRAM). */ (void)stm32_pwr_enablebkp(false); } -/************************************************************************************ +/**************************************************************************** * Name: rtc_synchwait * * Description: @@ -320,7 +316,7 @@ static inline void rtc_wprlock(void) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ static int rtc_synchwait(void) { @@ -359,7 +355,7 @@ static int rtc_synchwait(void) return ret; } -/************************************************************************************ +/**************************************************************************** * Name: rtc_enterinit * * Description: @@ -371,7 +367,7 @@ static int rtc_synchwait(void) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ static int rtc_enterinit(void) { @@ -407,7 +403,7 @@ static int rtc_enterinit(void) return ret; } -/************************************************************************************ +/**************************************************************************** * Name: rtc_exitinit * * Description: @@ -419,7 +415,7 @@ static int rtc_enterinit(void) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ static void rtc_exitinit(void) { @@ -430,7 +426,7 @@ static void rtc_exitinit(void) putreg32(regval, STM32_RTC_ISR); } -/************************************************************************************ +/**************************************************************************** * Name: rtc_bin2bcd * * Description: @@ -442,7 +438,7 @@ static void rtc_exitinit(void) * Returned Value: * The value in BCD representation * - ************************************************************************************/ + ****************************************************************************/ static uint32_t rtc_bin2bcd(int value) { @@ -457,7 +453,7 @@ static uint32_t rtc_bin2bcd(int value) return (msbcd << 4) | value; } -/************************************************************************************ +/**************************************************************************** * Name: rtc_bin2bcd * * Description: @@ -469,7 +465,7 @@ static uint32_t rtc_bin2bcd(int value) * Returned Value: * The value in binary representation * - ************************************************************************************/ + ****************************************************************************/ static int rtc_bcd2bin(uint32_t value) { @@ -477,13 +473,13 @@ static int rtc_bcd2bin(uint32_t value) return (int)(tens + (value & 0x0f)); } -/************************************************************************************ +/**************************************************************************** * Name: rtc_setup * * Description: - * Performs first time configuration of the RTC. A special value written into - * back-up register 0 will prevent this function from being called on sub-sequent - * resets or power up. + * Performs first time configuration of the RTC. A special value written + * into back-up register 0 will prevent this function from being called on + * sub-sequent resets or power up. * * Input Parameters: * None @@ -491,7 +487,7 @@ static int rtc_bcd2bin(uint32_t value) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ static int rtc_setup(void) { @@ -545,12 +541,12 @@ static int rtc_setup(void) return ret; } -/************************************************************************************ +/**************************************************************************** * Name: rtc_resume * * Description: - * Called when the RTC was already initialized on a previous power cycle. This - * just brings the RTC back into full operation. + * Called when the RTC was already initialized on a previous power cycle. + * This just brings the RTC back into full operation. * * Input Parameters: * None @@ -558,7 +554,7 @@ static int rtc_setup(void) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ static void rtc_resume(void) { @@ -577,7 +573,7 @@ static void rtc_resume(void) #endif } -/************************************************************************************ +/**************************************************************************** * Name: stm32_rtc_alarm_handler * * Description: @@ -590,7 +586,7 @@ static void rtc_resume(void) * Returned Value: * Zero (OK) on success; A negated errno value on failure. * - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_RTC_ALARM static int stm32_rtc_alarm_handler(int irq, void *context) @@ -660,7 +656,7 @@ static int stm32_rtc_alarm_handler(int irq, void *context) } #endif -/************************************************************************************ +/**************************************************************************** * Name: rtchw_check_alrXwf X= a or B * * Description: @@ -672,7 +668,7 @@ static int stm32_rtc_alarm_handler(int irq, void *context) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_RTC_ALARM static int rtchw_check_alrawf(void) @@ -726,12 +722,12 @@ static int rtchw_check_alrbwf(void) } #endif -/************************************************************************************ +/**************************************************************************** * Name: stm32_rtchw_set_alrmXr X is a or b * * Description: - * Set the alarm (A or B) hardware registers, using the required hardware access - * protocol + * Set the alarm (A or B) hardware registers, using the required hardware + * access protocol * * Input Parameters: * alarmreg - the register @@ -739,7 +735,7 @@ static int rtchw_check_alrbwf(void) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_RTC_ALARM static int rtchw_set_alrmar(rtc_alarmreg_t alarmreg) @@ -815,16 +811,16 @@ rtchw_set_alrmbr_exit: } #endif -/************************************************************************************ +/**************************************************************************** * Public Functions - ************************************************************************************/ + ****************************************************************************/ -/************************************************************************************ +/**************************************************************************** * Name: up_rtc_initialize * * Description: - * Initialize the hardware RTC per the selected configuration. This function is - * called once during the OS initialization sequence + * Initialize the hardware RTC per the selected configuration. This + * function is called once during the OS initialization sequence * * Input Parameters: * None @@ -832,7 +828,7 @@ rtchw_set_alrmbr_exit: * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ int up_rtc_initialize(void) { @@ -844,9 +840,9 @@ int up_rtc_initialize(void) int nretry = 0; /* Clocking for the PWR block must be provided. However, this is done - * unconditionally in stm32f7xxx_rcc.c on power up. This done unconditionally - * because the PWR block is also needed to set the internal voltage regulator for - * maximum performance. + * unconditionally in stm32f7xxx_rcc.c on power up. This done + * unconditionally because the PWR block is also needed to set the + * internal voltage regulator for maximum performance. */ /* Select the clock source */ @@ -858,15 +854,14 @@ int up_rtc_initialize(void) if (regval != RTC_MAGIC) { - /* Issue the Backup domain Reset Per Section 5.3.20 DocID028270 Rev 2 - * The LSEON, LSEBYP, RTCSEL and RTCEN bits in the RCC backup domain control - * register (RCC_BDCR) are in the Backup domain. As a result, after Reset, - * these bits are write-protected and the DBP bit in the PWR power control - * register (PWR_CR1) has to be set before these can be modified. - * Refer to Section 5.1.1: System reset on page 148 for further information. - * These bits are only reset after a Backup domain Reset - * (see Section 5.1.3: Backup domain reset). + * The LSEON, LSEBYP, RTCSEL and RTCEN bits in the RCC backup domain + * control register (RCC_BDCR) are in the Backup domain. As a result, + * after Reset, these bits are write-protected and the DBP bit in the + * PWR power control register (PWR_CR1) has to be set before these can + * be modified. Refer to Section 5.1.1: System reset on page 148 for + * further information. These bits are only reset after a Backup + * domain Reset (see Section 5.1.3: Backup domain reset). * * This has to be done here so that PWR is already enabled */ @@ -875,15 +870,15 @@ int up_rtc_initialize(void) modifyreg32(STM32_RCC_BDCR, RCC_BDCR_BDRST, 0); #if RCC_BDCR_RTCSEL == RCC_BDCR_RTCSEL_LSE - /* Because of the Backup domain Reset - we must re enable the LSE */ + /* Because of the Backup domain Reset - we must re enable the LSE */ - stm32_rcc_enablelse(); + stm32_rcc_enablelse(); #endif - /* Some boards do not have the external 32khz oscillator installed, for those - * boards we must fallback to the crummy internal RC clock or the external high - * rate clock - */ + /* Some boards do not have the external 32khz oscillator installed, for + * those boards we must fallback to the crummy internal RC clock or the + * external high rate clock + */ #ifdef CONFIG_STM32F7_RTC_HSECLOCK /* Use the HSE clock as the input to the RTC block */ @@ -927,7 +922,7 @@ int up_rtc_initialize(void) * if it is used */ - stm32_rcc_enablelse(); + stm32_rcc_enablelse(); #endif /* Change to the new clock as the input to the RTC block */ @@ -940,7 +935,9 @@ int up_rtc_initialize(void) putreg32(RTC_MAGIC, RTC_MAGIC_REG); - /* Enable the RTC Clock by setting the RTCEN bit in the RCC register */ + /* Enable the RTC Clock by setting the RTCEN bit in the RCC + * register. + */ modifyreg32(STM32_RCC_BDCR, 0, RCC_BDCR_RTCEN); } @@ -949,14 +946,14 @@ int up_rtc_initialize(void) (void)stm32_pwr_enablebkp(false); /* Loop, attempting to initialize/resume the RTC. This loop is necessary - * because it seems that occasionally it takes longer to initialize the RTC - * (the actual failure is in rtc_synchwait()). + * because it seems that occasionally it takes longer to initialize the + * RTC (the actual failure is in rtc_synchwait()). */ do { - /* Wait for the RTC Time and Date registers to be synchronized with RTC APB - * clock. + /* Wait for the RTC Time and Date registers to be synchronized with + * RTC APB clock. */ ret = rtc_synchwait(); @@ -1027,12 +1024,12 @@ int up_rtc_initialize(void) } #ifdef CONFIG_RTC_ALARM - /* Configure RTC interrupt to catch alarm interrupts. All RTC interrupts are - * connected to the EXTI controller. To enable the RTC Alarm interrupt, the - * following sequence is required: + /* Configure RTC interrupt to catch alarm interrupts. All RTC interrupts + * are connected to the EXTI controller. To enable the RTC Alarm + * interrupt, the following sequence is required: * - * 1. Configure and enable the EXTI Line 17 RTC ALARM in interrupt mode and select the - * rising edge sensitivity. + * 1. Configure and enable the EXTI Line 17 RTC ALARM in interrupt mode + * and select the rising edge sensitivity. * For STM32F4xx * EXTI line 21 RTC Tamper & Timestamp * EXTI line 22 RTC Wakeup @@ -1050,18 +1047,18 @@ int up_rtc_initialize(void) return OK; } -/************************************************************************************ +/**************************************************************************** * Name: stm32_rtc_getdatetime_with_subseconds * * Description: * Get the current date and time from the date/time RTC. This interface * is only supported by the date/time RTC hardware implementation. - * It is used to replace the system timer. It is only used by the RTOS during - * initialization to set up the system time when CONFIG_RTC and CONFIG_RTC_DATETIME - * are selected (and CONFIG_RTC_HIRES is not). + * It is used to replace the system timer. It is only used by the RTOS + * during initialization to set up the system time when CONFIG_RTC and + * CONFIG_RTC_DATETIME are selected (and CONFIG_RTC_HIRES is not). * - * NOTE: Some date/time RTC hardware is capability of sub-second accuracy. That - * sub-second accuracy is returned through 'nsec'. + * NOTE: Some date/time RTC hardware is capability of sub-second accuracy. + * That sub-second accuracy is returned through 'nsec'. * * Input Parameters: * tp - The location to return the high resolution time value. @@ -1070,7 +1067,7 @@ int up_rtc_initialize(void) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_STM32_HAVE_RTC_SUBSECONDS int stm32_rtc_getdatetime_with_subseconds(FAR struct tm *tp, FAR long *nsec) @@ -1085,9 +1082,9 @@ int up_rtc_getdatetime(FAR struct tm *tp) uint32_t tr; uint32_t tmp; - /* Sample the data time registers. There is a race condition here... If we sample - * the time just before midnight on December 31, the date could be wrong because - * the day rolled over while were sampling. + /* Sample the data time registers. There is a race condition here... If + * we sample the time just before midnight on December 31, the date could + * be wrong because the day rolled over while were sampling. */ do @@ -1139,7 +1136,8 @@ int up_rtc_getdatetime(FAR struct tm *tp) #if defined(CONFIG_LIBC_LOCALTIME) || defined(CONFIG_TIME_EXTENDED) tmp = (dr & RTC_DR_WDU_MASK) >> RTC_DR_WDU_SHIFT; tp->tm_wday = tmp % 7; - tp->tm_yday = tp->tm_mday + clock_daysbeforemonth(tp->tm_mon, clock_isleapyear(tp->tm_year + 1900)); + tp->tm_yday = tp->tm_mday + + clock_daysbeforemonth(tp->tm_mon, clock_isleapyear(tp->tm_year + 1900)); tp->tm_isdst = 0 #endif @@ -1171,20 +1169,20 @@ int up_rtc_getdatetime(FAR struct tm *tp) return OK; } -/************************************************************************************ +/**************************************************************************** * Name: up_rtc_getdatetime * * Description: * Get the current date and time from the date/time RTC. This interface * is only supported by the date/time RTC hardware implementation. - * It is used to replace the system timer. It is only used by the RTOS during - * initialization to set up the system time when CONFIG_RTC and CONFIG_RTC_DATETIME - * are selected (and CONFIG_RTC_HIRES is not). + * It is used to replace the system timer. It is only used by the RTOS + * during initialization to set up the system time when CONFIG_RTC and + * CONFIG_RTC_DATETIME are selected (and CONFIG_RTC_HIRES is not). * - * NOTE: Some date/time RTC hardware is capability of sub-second accuracy. That - * sub-second accuracy is lost in this interface. However, since the system time - * is reinitialized on each power-up/reset, there will be no timing inaccuracy in - * the long run. + * NOTE: Some date/time RTC hardware is capability of sub-second accuracy. + * That sub-second accuracy is lost in this interface. However, since the + * system time is reinitialized on each power-up/reset, there will be no + * timing inaccuracy in the long run. * * Input Parameters: * tp - The location to return the high resolution time value. @@ -1192,7 +1190,7 @@ int up_rtc_getdatetime(FAR struct tm *tp) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ #ifdef CONFIG_STM32_HAVE_RTC_SUBSECONDS int up_rtc_getdatetime(FAR struct tm *tp) @@ -1201,13 +1199,13 @@ int up_rtc_getdatetime(FAR struct tm *tp) } #endif -/************************************************************************************ +/**************************************************************************** * Name: stm32_rtc_setdatetime * * Description: * Set the RTC to the provided time. RTC implementations which provide - * up_rtc_getdatetime() (CONFIG_RTC_DATETIME is selected) should provide this - * function. + * up_rtc_getdatetime() (CONFIG_RTC_DATETIME is selected) should provide + * this function. * * Input Parameters: * tp - the time to use @@ -1215,7 +1213,7 @@ int up_rtc_getdatetime(FAR struct tm *tp) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ int stm32_rtc_setdatetime(FAR const struct tm *tp) { @@ -1227,20 +1225,23 @@ int stm32_rtc_setdatetime(FAR const struct tm *tp) /* Then write the broken out values to the RTC */ - /* Convert the struct tm format to RTC time register fields. All of the STM32 - * All of the ranges of values correspond between struct tm and the time - * register. + /* Convert the struct tm format to RTC time register fields. All of the + * STM32 All of the ranges of values correspond between struct tm and the + * time register. */ tr = (rtc_bin2bcd(tp->tm_sec) << RTC_TR_SU_SHIFT) | (rtc_bin2bcd(tp->tm_min) << RTC_TR_MNU_SHIFT) | (rtc_bin2bcd(tp->tm_hour) << RTC_TR_HU_SHIFT); - /* Now convert the fields in struct tm format to the RTC date register fields: - * Days: 1-31 match in both cases. - * Month: STM32 is 1-12, struct tm is 0-11. - * Years: STM32 is 00-99, struct tm is years since 1900. - * WeekDay: STM32 is 1 = Mon - 7 = Sun + /* Now convert the fields in struct tm format to the RTC date register + * fields: + * + * Days: 1-31 match in both cases. + * Month: STM32 is 1-12, struct tm is 0-11. + * Years: STM32 is 00-99, struct tm is years since 1900. + * WeekDay: STM32 is 1 = Mon - 7 = Sun + * * Issue: I am not sure what the STM32 years mean. Are these the * years 2000-2099? I'll assume so. */ @@ -1283,12 +1284,12 @@ int stm32_rtc_setdatetime(FAR const struct tm *tp) return ret; } -/************************************************************************************ +/**************************************************************************** * Name: up_rtc_settime * * Description: - * Set the RTC to the provided time. All RTC implementations must be able to - * set their time based on a standard timespec. + * Set the RTC to the provided time. All RTC implementations must be able + * to set their time based on a standard timespec. * * Input Parameters: * tp - the time to use @@ -1296,13 +1297,15 @@ int stm32_rtc_setdatetime(FAR const struct tm *tp) * Returned Value: * Zero (OK) on success; a negated errno on failure * - ************************************************************************************/ + ****************************************************************************/ int up_rtc_settime(FAR const struct timespec *tp) { FAR struct tm newtime; - /* Break out the time values (not that the time is set only to units of seconds) */ + /* Break out the time values (not that the time is set only to units of + * seconds) + */ (void)gmtime_r(&tp->tv_sec, &newtime); return stm32_rtc_setdatetime(&newtime);