stm32l4_rcc: restore backup-registers after backup-domain reset.

This commit is contained in:
Jussi Kivilinna
2017-11-08 13:05:56 -06:00
committed by Gregory Nutt
parent d741185c91
commit 4ca07231ae
3 changed files with 40 additions and 17 deletions
+24 -1
View File
@@ -56,6 +56,7 @@
#include "stm32l4_flash.h"
#include "stm32l4.h"
#include "stm32l4_waste.h"
#include "stm32l4_rtc.h"
/****************************************************************************
* Pre-processor Definitions
@@ -117,8 +118,18 @@ static inline void rcc_resetbkp(void)
/* Check if the RTC is already configured */
init_stat = stm32l4_rtc_is_initialized();
if(!init_stat)
if (!init_stat)
{
uint32_t bkregs[STM32L4_RTC_BKCOUNT];
int i;
/* Backup backup-registers before RTC reset. */
for (i = 0; i < STM32L4_RTC_BKCOUNT; i++)
{
bkregs[i] = getreg32(STM32L4_RTC_BKR(i));
}
/* Enable write access to the backup domain (RTC registers, RTC
* backup data registers and backup SRAM).
*/
@@ -132,6 +143,18 @@ static inline void rcc_resetbkp(void)
modifyreg32(STM32L4_RCC_BDCR, 0, RCC_BDCR_BDRST);
modifyreg32(STM32L4_RCC_BDCR, RCC_BDCR_BDRST, 0);
/* Restore backup-registers, except RTC related. */
for (i = 0; i < STM32L4_RTC_BKCOUNT; i++)
{
if (RTC_MAGIC_REG == STM32L4_RTC_BKR(i))
{
continue;
}
putreg32(bkregs[i], STM32L4_RTC_BKR(i));
}
(void)stm32l4_pwr_enablebkp(false);
}
}
-16
View File
@@ -84,22 +84,6 @@
# error "CONFIG_STM32L4_PWR must selected to use this driver"
#endif
#if !defined(CONFIG_RTC_MAGIC)
# define CONFIG_RTC_MAGIC (0xfacefeee)
#endif
#if !defined(CONFIG_RTC_MAGIC_TIME_SET)
# define CONFIG_RTC_MAGIC_TIME_SET (CONFIG_RTC_MAGIC + 1)
#endif
#if !defined(CONFIG_RTC_MAGIC_REG)
# define CONFIG_RTC_MAGIC_REG (0)
#endif
#define RTC_MAGIC CONFIG_RTC_MAGIC
#define RTC_MAGIC_TIME_SET CONFIG_RTC_MAGIC_TIME_SET
#define RTC_MAGIC_REG STM32L4_RTC_BKR(CONFIG_RTC_MAGIC_REG)
/* Constants ****************************************************************/
#define SYNCHRO_TIMEOUT (0x00020000)
+16
View File
@@ -57,6 +57,22 @@
#define STM32L4_RTC_PRESCALER_SECOND 32767 /* Default prescaler to get a second base */
#define STM32L4_RTC_PRESCALER_MIN 1 /* Maximum speed of 16384 Hz */
#if !defined(CONFIG_RTC_MAGIC)
# define CONFIG_RTC_MAGIC (0xfacefeee)
#endif
#if !defined(CONFIG_RTC_MAGIC_TIME_SET)
# define CONFIG_RTC_MAGIC_TIME_SET (CONFIG_RTC_MAGIC + 1)
#endif
#if !defined(CONFIG_RTC_MAGIC_REG)
# define CONFIG_RTC_MAGIC_REG (0)
#endif
#define RTC_MAGIC CONFIG_RTC_MAGIC
#define RTC_MAGIC_TIME_SET CONFIG_RTC_MAGIC_TIME_SET
#define RTC_MAGIC_REG STM32L4_RTC_BKR(CONFIG_RTC_MAGIC_REG)
/****************************************************************************
* Public Types
****************************************************************************/