/******************************************************************************* * Function Name : HAL_Core_Config. * Description : Called in startup routine, before calling C++ constructors. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void HAL_Core_Config(void) { // this ensures the stm32_it.c functions aren't dropped by the linker, thinking // they are unused. Without this none of the interrupts handlers are linked. linkme(); DECLARE_SYS_HEALTH(ENTERED_SparkCoreConfig); #ifdef DFU_BUILD_ENABLE /* Set the Vector Table(VT) base location at 0x5000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x5000); USE_SYSTEM_FLAGS = 1; #endif #ifdef SWD_JTAG_DISABLE /* Disable the Serial Wire JTAG Debug Port SWJ-DP */ GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); #else #ifdef SWD_ENABLE_JTAG_DISABLE /* Disable JTAG, but enable SWJ-DP */ GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); #endif #endif Set_System(); SysTick_Configuration(); /* Enable CRC clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); HAL_RTC_Configuration(); /* Execute Stop mode if STOP mode flag is set via System.sleep(pin, mode) */ HAL_Core_Execute_Stop_Mode(); LED_SetRGBColor(RGB_COLOR_WHITE); LED_On(LED_RGB); #ifdef IWDG_RESET_ENABLE // ToDo this needs rework for new bootloader /* Check if the system has resumed from IWDG reset */ if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) { /* IWDGRST flag set */ IWDG_SYSTEM_RESET = 1; /* Clear reset flags */ RCC_ClearFlag(); } /* We are duplicating the IWDG call here for compatibility with old bootloader */ /* Set IWDG Timeout to 3 secs */ IWDG_Reset_Enable(3 * TIMING_IWDG_RELOAD); #endif #ifdef DFU_BUILD_ENABLE Load_SystemFlags(); #endif sFLASH_Init(); module_user_init_hook(); }
/******************************************************************************* * Function Name : HAL_Core_Config. * Description : Called in startup routine, before calling C++ constructors. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void HAL_Core_Config(void) { DECLARE_SYS_HEALTH(ENTERED_SparkCoreConfig); #ifdef DFU_BUILD_ENABLE //Currently this is done through WICED library API so commented. //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x20000); USE_SYSTEM_FLAGS = 1; #endif Set_System(); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE); //Wiring pins default to inputs #if !defined(USE_SWD_JTAG) && !defined(USE_SWD) for (pin_t pin=0; pin<=19; pin++) HAL_Pin_Mode(pin, INPUT); #if PLATFORM_ID==8 // Additional pins for P1 for (pin_t pin=24; pin<=29; pin++) HAL_Pin_Mode(pin, INPUT); #endif #if PLATFORM_ID==10 // Additional pins for Electron for (pin_t pin=24; pin<=35; pin++) HAL_Pin_Mode(pin, INPUT); #endif #endif HAL_Core_Config_systick_configuration(); HAL_RTC_Configuration(); HAL_RNG_Configuration(); #ifdef DFU_BUILD_ENABLE Load_SystemFlags(); #endif LED_SetRGBColor(RGB_COLOR_WHITE); LED_On(LED_RGB); // override the WICED interrupts, specifically SysTick - there is a bug // where WICED isn't ready for a SysTick until after main() has been called to // fully intialize the RTOS. HAL_Core_Setup_override_interrupts(); #if MODULAR_FIRMWARE // write protect system module parts if not already protected FLASH_WriteProtectMemory(FLASH_INTERNAL, CORE_FW_ADDRESS, USER_FIRMWARE_IMAGE_LOCATION - CORE_FW_ADDRESS, true); #endif #ifdef HAS_SERIAL_FLASH //Initialize Serial Flash sFLASH_Init(); #else FLASH_AddToFactoryResetModuleSlot(FLASH_INTERNAL, INTERNAL_FLASH_FAC_ADDRESS, FLASH_INTERNAL, USER_FIRMWARE_IMAGE_LOCATION, FIRMWARE_IMAGE_SIZE, FACTORY_RESET_MODULE_FUNCTION, MODULE_VERIFY_CRC|MODULE_VERIFY_FUNCTION|MODULE_VERIFY_DESTINATION_IS_START_ADDRESS); //true to verify the CRC during copy also #endif }