From 22b211167cdba6ea2eb2f6d9e4a1296e09e7b2c9 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sat, 11 Feb 2012 13:49:32 +0100 Subject: [PATCH] Ported pios_iap.c to F4 restored failed boot count check on pios_board.c for revo --- flight/PiOS/STM32F4xx/pios_iap.c | 23 ++++++----------------- flight/PiOS/pios.h | 1 + flight/Revolution/System/pios_board.c | 12 +++++++++++- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/flight/PiOS/STM32F4xx/pios_iap.c b/flight/PiOS/STM32F4xx/pios_iap.c index 140732767..ca4ef89ba 100644 --- a/flight/PiOS/STM32F4xx/pios_iap.c +++ b/flight/PiOS/STM32F4xx/pios_iap.c @@ -68,19 +68,17 @@ */ void PIOS_IAP_Init( void ) { -#if 0 /* Enable CRC clock */ - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE); /* Enable PWR and BKP clock */ - RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_AHB1Periph_BKPSRAM, ENABLE); /* Enable write access to Backup domain */ PWR_BackupAccessCmd(ENABLE); /* Clear Tamper pin Event(TE) pending flag */ - RTC_ClearFlag(); -#endif + RTC_ClearFlag(RTC_FLAG_TAMP1F); } /*! @@ -93,8 +91,7 @@ void PIOS_IAP_Init( void ) */ uint32_t PIOS_IAP_CheckRequest( void ) { -#if 0 - uint32_t retval = FALSE; + uint32_t retval = false; uint16_t reg1; uint16_t reg2; @@ -103,13 +100,11 @@ uint32_t PIOS_IAP_CheckRequest( void ) if( reg1 == IAP_MAGIC_WORD_1 && reg2 == IAP_MAGIC_WORD_2 ) { // We have a match. - retval = TRUE; + retval = true; } else { - retval = FALSE; + retval = false; } return retval; -#endif - return 0; } @@ -122,24 +117,18 @@ uint32_t PIOS_IAP_CheckRequest( void ) */ void PIOS_IAP_SetRequest1(void) { -#if 0 RTC_WriteBackupRegister( MAGIC_REG_1, IAP_MAGIC_WORD_1); -#endif } void PIOS_IAP_SetRequest2(void) { -#if 0 RTC_WriteBackupRegister( MAGIC_REG_2, IAP_MAGIC_WORD_2); -#endif } void PIOS_IAP_ClearRequest(void) { -#if 0 RTC_WriteBackupRegister( MAGIC_REG_1, 0); RTC_WriteBackupRegister( MAGIC_REG_2, 0); -#endif } uint16_t PIOS_IAP_ReadBootCount(void) diff --git a/flight/PiOS/pios.h b/flight/PiOS/pios.h index d955b3a0c..f101781b0 100644 --- a/flight/PiOS/pios.h +++ b/flight/PiOS/pios.h @@ -50,6 +50,7 @@ /* STM32 Std Perf Lib */ #if defined(STM32F4XX) # include +# include #elif defined(STM32F2XX) #include #include diff --git a/flight/Revolution/System/pios_board.c b/flight/Revolution/System/pios_board.c index ca28999e5..623d96fad 100644 --- a/flight/Revolution/System/pios_board.c +++ b/flight/Revolution/System/pios_board.c @@ -305,7 +305,17 @@ void PIOS_Board_Init(void) { PIOS_TIM_InitClock(&tim_11_cfg); /* IAP System Setup */ - //PIOS_IAP_Init(); + PIOS_IAP_Init(); + uint16_t boot_count = PIOS_IAP_ReadBootCount(); + if (boot_count < 3) { + PIOS_IAP_WriteBootCount(++boot_count); + AlarmsClear(SYSTEMALARMS_ALARM_BOOTFAULT); + } else { + /* Too many failed boot attempts, force hwsettings to defaults */ + HwSettingsSetDefaults(HwSettingsHandle(), 0); + AlarmsSet(SYSTEMALARMS_ALARM_BOOTFAULT, SYSTEMALARMS_ALARM_CRITICAL); + } + #if defined(PIOS_INCLUDE_COM) #if defined(PIOS_INCLUDE_GPS)