Bootload from SD card to sector 0, and jump to sector 24 where new firmware resides

Dependencies:   FatFS mbed

Fork of Panel-Controller-Bootloader by Emma

Committer:
bonchenko
Date:
Wed Apr 22 10:18:55 2015 +0000
Revision:
2:0fa89ba8f6fe
Parent:
0:c3a652eff606
Bootloader from SD card works perfectly. Compiled with offset in EmBlocks, ADE cannot print readings - but its happened without bootloader too. The problem is Emblocks compiler settings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bonchenko 0:c3a652eff606 1 /* Includes */
bonchenko 0:c3a652eff606 2 #include <stddef.h>
bonchenko 0:c3a652eff606 3 #include "stm32f10x.h"
bonchenko 2:0fa89ba8f6fe 4 #include "stm32f10x_usart.h"
bonchenko 0:c3a652eff606 5 #include "main.h"
bonchenko 0:c3a652eff606 6
bonchenko 2:0fa89ba8f6fe 7 extern "C"
bonchenko 0:c3a652eff606 8 {
bonchenko 0:c3a652eff606 9 #include "flash.h"
bonchenko 0:c3a652eff606 10 #include "usart.h"
bonchenko 0:c3a652eff606 11 }
bonchenko 0:c3a652eff606 12
bonchenko 0:c3a652eff606 13 /* Private define */
bonchenko 0:c3a652eff606 14 /* Private macro */
bonchenko 0:c3a652eff606 15 /* Private variables */
bonchenko 0:c3a652eff606 16 typedef void (*pFunction)(void);
bonchenko 0:c3a652eff606 17 uint32_t JumpAddress;
bonchenko 0:c3a652eff606 18 pFunction Jump_To_Application;
bonchenko 0:c3a652eff606 19 FLASH_RESULT flashResult;
bonchenko 0:c3a652eff606 20
bonchenko 0:c3a652eff606 21 /* Private function prototypes */
bonchenko 0:c3a652eff606 22 /* Private functions */
bonchenko 0:c3a652eff606 23 void RCC_Configuration();
bonchenko 0:c3a652eff606 24 void NVIC_Configuration(void);
bonchenko 0:c3a652eff606 25 void Timer2_Init(void);
bonchenko 0:c3a652eff606 26 void Timer2_DeInit(void);
bonchenko 0:c3a652eff606 27 void Timer3_Init(void);
bonchenko 0:c3a652eff606 28 void Timer3_DeInit(void);
bonchenko 0:c3a652eff606 29 /**
bonchenko 0:c3a652eff606 30 **===========================================================================
bonchenko 0:c3a652eff606 31 **
bonchenko 0:c3a652eff606 32 ** Abstract: main program
bonchenko 0:c3a652eff606 33 **
bonchenko 0:c3a652eff606 34 **===========================================================================
bonchenko 0:c3a652eff606 35 */
bonchenko 0:c3a652eff606 36 int main(void)
bonchenko 0:c3a652eff606 37 {
bonchenko 0:c3a652eff606 38 USART_Initialise();
bonchenko 2:0fa89ba8f6fe 39 USART_SendString("Bootloader EMMA\r\n");
bonchenko 0:c3a652eff606 40 RCC_Configuration();
bonchenko 0:c3a652eff606 41 NVIC_Configuration();
bonchenko 0:c3a652eff606 42 Timer2_Init();
bonchenko 0:c3a652eff606 43 Timer3_Init();
bonchenko 0:c3a652eff606 44 USART_SendString("Starting\r\n");
bonchenko 2:0fa89ba8f6fe 45
bonchenko 0:c3a652eff606 46 //If new firmware present on microSD card -> Flash to MCU
bonchenko 0:c3a652eff606 47 flashResult = FlashFirmware();
bonchenko 0:c3a652eff606 48 USART_SendString("OK\r\n");
bonchenko 0:c3a652eff606 49
bonchenko 0:c3a652eff606 50 /* Check if the result of the Flash Firmware function */
bonchenko 0:c3a652eff606 51 if(flashResult == FLASH_OK
bonchenko 0:c3a652eff606 52 || flashResult == FLASH_NO_FILE
bonchenko 0:c3a652eff606 53 || flashResult == FLASH_NO_SD_CARD)
bonchenko 0:c3a652eff606 54 {
bonchenko 0:c3a652eff606 55 USART_SendString("FLASH_OK or NO_FILE or NO_SD\r\n");
bonchenko 0:c3a652eff606 56 /* Test if user code is programmed starting from address "ApplicationAddress" */
bonchenko 2:0fa89ba8f6fe 57 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x6000);
bonchenko 0:c3a652eff606 58 if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
bonchenko 0:c3a652eff606 59 {
bonchenko 0:c3a652eff606 60 // Disable Timers
bonchenko 0:c3a652eff606 61 Timer2_DeInit();
bonchenko 0:c3a652eff606 62 Timer3_DeInit();
bonchenko 0:c3a652eff606 63
bonchenko 0:c3a652eff606 64 /* Jump to user application */
bonchenko 0:c3a652eff606 65 JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
bonchenko 2:0fa89ba8f6fe 66 __disable_irq ();
bonchenko 0:c3a652eff606 67 Jump_To_Application = (pFunction) JumpAddress;
bonchenko 0:c3a652eff606 68
bonchenko 0:c3a652eff606 69 /* Initialise user application's Stack Pointer */
bonchenko 0:c3a652eff606 70 __set_MSP(*(__IO uint32_t*) ApplicationAddress);
bonchenko 0:c3a652eff606 71 Jump_To_Application();
bonchenko 0:c3a652eff606 72 }
bonchenko 0:c3a652eff606 73 }
bonchenko 0:c3a652eff606 74
bonchenko 0:c3a652eff606 75 while(1)
bonchenko 0:c3a652eff606 76 {
bonchenko 0:c3a652eff606 77 // Led1Flash(1, 5000);
bonchenko 0:c3a652eff606 78 }
bonchenko 0:c3a652eff606 79 }
bonchenko 0:c3a652eff606 80
bonchenko 0:c3a652eff606 81 void RCC_Configuration()
bonchenko 0:c3a652eff606 82 {
bonchenko 0:c3a652eff606 83 /* GPIOA */
bonchenko 0:c3a652eff606 84 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
bonchenko 0:c3a652eff606 85
bonchenko 0:c3a652eff606 86 /* GPIOB */
bonchenko 0:c3a652eff606 87 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
bonchenko 0:c3a652eff606 88
bonchenko 0:c3a652eff606 89 /* GPIOC */
bonchenko 0:c3a652eff606 90 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
bonchenko 0:c3a652eff606 91
bonchenko 0:c3a652eff606 92 /* GPIOD */
bonchenko 0:c3a652eff606 93 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
bonchenko 0:c3a652eff606 94
bonchenko 0:c3a652eff606 95 /* GPIOE */
bonchenko 0:c3a652eff606 96 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
bonchenko 0:c3a652eff606 97
bonchenko 0:c3a652eff606 98 /* AFIO */
bonchenko 0:c3a652eff606 99 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
bonchenko 0:c3a652eff606 100
bonchenko 0:c3a652eff606 101 /* TIM2 */
bonchenko 0:c3a652eff606 102 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
bonchenko 0:c3a652eff606 103
bonchenko 0:c3a652eff606 104 /* TIM3 */
bonchenko 0:c3a652eff606 105 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
bonchenko 0:c3a652eff606 106 }
bonchenko 0:c3a652eff606 107
bonchenko 0:c3a652eff606 108 void NVIC_Configuration(void)
bonchenko 0:c3a652eff606 109 {
bonchenko 0:c3a652eff606 110 #ifdef VECT_TAB_RAM
bonchenko 0:c3a652eff606 111 /* Set the Vector Table base location at 0x20000000 */
bonchenko 0:c3a652eff606 112 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
bonchenko 0:c3a652eff606 113 #else /* VECT_TAB_FLASH */
bonchenko 0:c3a652eff606 114 /* Set the Vector Table base location at 0x08000000 */
bonchenko 0:c3a652eff606 115 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
bonchenko 0:c3a652eff606 116 #endif
bonchenko 0:c3a652eff606 117
bonchenko 0:c3a652eff606 118 NVIC_InitTypeDef NVIC_InitStructure;
bonchenko 0:c3a652eff606 119
bonchenko 0:c3a652eff606 120 // Enable the TIM3 Interrupt
bonchenko 0:c3a652eff606 121 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
bonchenko 0:c3a652eff606 122 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
bonchenko 0:c3a652eff606 123 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
bonchenko 0:c3a652eff606 124 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
bonchenko 0:c3a652eff606 125 NVIC_Init(&NVIC_InitStructure);
bonchenko 0:c3a652eff606 126 }
bonchenko 0:c3a652eff606 127
bonchenko 0:c3a652eff606 128 void Timer2_Init(void)
bonchenko 0:c3a652eff606 129 {
bonchenko 0:c3a652eff606 130 // Time base configuration Timer2 clock
bonchenko 0:c3a652eff606 131 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
bonchenko 0:c3a652eff606 132 TIM_TimeBaseStructure.TIM_Period = 65535;
bonchenko 0:c3a652eff606 133 TIM_TimeBaseStructure.TIM_Prescaler = 7199;
bonchenko 0:c3a652eff606 134 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;
bonchenko 0:c3a652eff606 135 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
bonchenko 0:c3a652eff606 136 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
bonchenko 0:c3a652eff606 137
bonchenko 0:c3a652eff606 138 TIM_ARRPreloadConfig(TIM2, ENABLE);
bonchenko 0:c3a652eff606 139 TIM_Cmd(TIM2, ENABLE);
bonchenko 0:c3a652eff606 140 }
bonchenko 0:c3a652eff606 141
bonchenko 0:c3a652eff606 142 void Timer3_Init(void)
bonchenko 2:0fa89ba8f6fe 143 {
bonchenko 0:c3a652eff606 144 // Time base configuration Timer3 clock
bonchenko 0:c3a652eff606 145 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
bonchenko 0:c3a652eff606 146 TIM_TimeBaseStructure.TIM_Period = 10;
bonchenko 0:c3a652eff606 147 TIM_TimeBaseStructure.TIM_Prescaler = 7199;
bonchenko 0:c3a652eff606 148 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;
bonchenko 0:c3a652eff606 149 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
bonchenko 0:c3a652eff606 150 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
bonchenko 0:c3a652eff606 151
bonchenko 0:c3a652eff606 152 TIM_ARRPreloadConfig(TIM3, ENABLE);
bonchenko 0:c3a652eff606 153 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
bonchenko 0:c3a652eff606 154 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
bonchenko 0:c3a652eff606 155 TIM_Cmd(TIM3, ENABLE);
bonchenko 0:c3a652eff606 156 }
bonchenko 0:c3a652eff606 157
bonchenko 0:c3a652eff606 158 void Timer2_DeInit()
bonchenko 0:c3a652eff606 159 {
bonchenko 0:c3a652eff606 160 TIM_Cmd(TIM2, DISABLE);
bonchenko 0:c3a652eff606 161 TIM_DeInit(TIM2);
bonchenko 0:c3a652eff606 162 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, DISABLE);
bonchenko 0:c3a652eff606 163 }
bonchenko 0:c3a652eff606 164
bonchenko 0:c3a652eff606 165 void Timer3_DeInit(void)
bonchenko 0:c3a652eff606 166 {
bonchenko 0:c3a652eff606 167 TIM_Cmd(TIM3, DISABLE);
bonchenko 0:c3a652eff606 168 TIM_ITConfig(TIM3, TIM_IT_Update, DISABLE);
bonchenko 0:c3a652eff606 169 TIM_ARRPreloadConfig(TIM3, DISABLE);
bonchenko 0:c3a652eff606 170 NVIC_DisableIRQ(TIM3_IRQn);
bonchenko 0:c3a652eff606 171 TIM_DeInit(TIM3);
bonchenko 0:c3a652eff606 172 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE);
bonchenko 0:c3a652eff606 173 }
bonchenko 0:c3a652eff606 174
bonchenko 0:c3a652eff606 175 void SD_LowLevel_DeInit(void)
bonchenko 0:c3a652eff606 176 {
bonchenko 0:c3a652eff606 177 GPIO_InitTypeDef GPIO_InitStructure;
bonchenko 0:c3a652eff606 178
bonchenko 0:c3a652eff606 179 SPI_Cmd(SD_SPI, DISABLE); /*!< SD_SPI disable */
bonchenko 0:c3a652eff606 180 SPI_I2S_DeInit(SD_SPI); /*!< DeInitializes the SD_SPI */
bonchenko 0:c3a652eff606 181
bonchenko 0:c3a652eff606 182 /*!< SD_SPI Periph clock disable */
bonchenko 0:c3a652eff606 183 RCC_APB2PeriphClockCmd(SD_SPI_CLK, DISABLE);
bonchenko 0:c3a652eff606 184
bonchenko 0:c3a652eff606 185 /*!< Configure SD_SPI pins: SCK */
bonchenko 0:c3a652eff606 186 GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
bonchenko 0:c3a652eff606 187 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
bonchenko 0:c3a652eff606 188 GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 189
bonchenko 0:c3a652eff606 190 /*!< Configure SD_SPI pins: MISO */
bonchenko 0:c3a652eff606 191 GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
bonchenko 0:c3a652eff606 192 GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 193
bonchenko 0:c3a652eff606 194 /*!< Configure SD_SPI pins: MOSI */
bonchenko 0:c3a652eff606 195 GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
bonchenko 0:c3a652eff606 196 GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 197
bonchenko 0:c3a652eff606 198 /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
bonchenko 0:c3a652eff606 199 GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
bonchenko 0:c3a652eff606 200 GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 201
bonchenko 0:c3a652eff606 202 /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
bonchenko 0:c3a652eff606 203 GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
bonchenko 0:c3a652eff606 204 GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 205 }
bonchenko 0:c3a652eff606 206
bonchenko 0:c3a652eff606 207
bonchenko 0:c3a652eff606 208 void SD_LowLevel_Init(void)
bonchenko 0:c3a652eff606 209 {
bonchenko 0:c3a652eff606 210 GPIO_InitTypeDef GPIO_InitStructure;
bonchenko 0:c3a652eff606 211 SPI_InitTypeDef SPI_InitStructure;
bonchenko 0:c3a652eff606 212
bonchenko 0:c3a652eff606 213 /*!< SD_SPI_CS_GPIO, SD_SPI_MOSI_GPIO, SD_SPI_MISO_GPIO, SD_SPI_DETECT_GPIO
bonchenko 0:c3a652eff606 214 and SD_SPI_SCK_GPIO Periph clock enable */
bonchenko 0:c3a652eff606 215 RCC_APB2PeriphClockCmd(SD_CS_GPIO_CLK | SD_SPI_MOSI_GPIO_CLK | SD_SPI_MISO_GPIO_CLK |
bonchenko 0:c3a652eff606 216 SD_SPI_SCK_GPIO_CLK | SD_DETECT_GPIO_CLK, ENABLE);
bonchenko 0:c3a652eff606 217
bonchenko 0:c3a652eff606 218 /*!< SD_SPI Periph clock enable */
bonchenko 0:c3a652eff606 219 RCC_APB2PeriphClockCmd(SD_SPI_CLK, ENABLE);
bonchenko 0:c3a652eff606 220
bonchenko 0:c3a652eff606 221 /*!< Configure SD_SPI pins: SCK */
bonchenko 0:c3a652eff606 222 GPIO_InitStructure.GPIO_Pin = SD_SPI_SCK_PIN;
bonchenko 0:c3a652eff606 223 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
bonchenko 0:c3a652eff606 224 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
bonchenko 0:c3a652eff606 225 GPIO_Init(SD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 226
bonchenko 0:c3a652eff606 227 /*!< Configure SD_SPI pins: MOSI */
bonchenko 0:c3a652eff606 228 GPIO_InitStructure.GPIO_Pin = SD_SPI_MOSI_PIN;
bonchenko 0:c3a652eff606 229 GPIO_Init(SD_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 230
bonchenko 0:c3a652eff606 231 /*!< Configure SD_SPI pins: MISO */
bonchenko 0:c3a652eff606 232 GPIO_InitStructure.GPIO_Pin = SD_SPI_MISO_PIN;
bonchenko 0:c3a652eff606 233 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
bonchenko 0:c3a652eff606 234 GPIO_Init(SD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 235
bonchenko 0:c3a652eff606 236 /*!< Configure SD_SPI_CS_PIN pin: SD Card CS pin */
bonchenko 0:c3a652eff606 237 GPIO_InitStructure.GPIO_Pin = SD_CS_PIN;
bonchenko 0:c3a652eff606 238 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
bonchenko 0:c3a652eff606 239 GPIO_Init(SD_CS_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 240
bonchenko 0:c3a652eff606 241 /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */
bonchenko 0:c3a652eff606 242 GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN;
bonchenko 0:c3a652eff606 243 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
bonchenko 0:c3a652eff606 244 GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure);
bonchenko 0:c3a652eff606 245
bonchenko 0:c3a652eff606 246 /*!< SD_SPI Config */
bonchenko 0:c3a652eff606 247 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
bonchenko 0:c3a652eff606 248 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
bonchenko 0:c3a652eff606 249 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
bonchenko 0:c3a652eff606 250 SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
bonchenko 0:c3a652eff606 251 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
bonchenko 0:c3a652eff606 252 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
bonchenko 0:c3a652eff606 253 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
bonchenko 0:c3a652eff606 254
bonchenko 0:c3a652eff606 255 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
bonchenko 0:c3a652eff606 256 SPI_InitStructure.SPI_CRCPolynomial = 7;
bonchenko 0:c3a652eff606 257 SPI_Init(SD_SPI, &SPI_InitStructure);
bonchenko 0:c3a652eff606 258
bonchenko 0:c3a652eff606 259 SPI_Cmd(SD_SPI, ENABLE); /*!< SD_SPI enable */
bonchenko 0:c3a652eff606 260 }
bonchenko 0:c3a652eff606 261
bonchenko 0:c3a652eff606 262 #ifdef USE_FULL_ASSERT
bonchenko 0:c3a652eff606 263
bonchenko 0:c3a652eff606 264 /**
bonchenko 0:c3a652eff606 265 * @brief Reports the name of the source file and the source line number
bonchenko 0:c3a652eff606 266 * where the assert_param error has occurred.
bonchenko 0:c3a652eff606 267 * @param file: pointer to the source file name
bonchenko 0:c3a652eff606 268 * @param line: assert_param error line source number
bonchenko 0:c3a652eff606 269 * @retval None
bonchenko 0:c3a652eff606 270 */
bonchenko 0:c3a652eff606 271 void assert_failed(uint8_t* file, uint32_t line)
bonchenko 0:c3a652eff606 272 {
bonchenko 0:c3a652eff606 273 /* User can add his own implementation to report the file name and line number,
bonchenko 0:c3a652eff606 274 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
bonchenko 0:c3a652eff606 275
bonchenko 0:c3a652eff606 276 /* Infinite loop */
bonchenko 0:c3a652eff606 277 while (1)
bonchenko 0:c3a652eff606 278 {
bonchenko 0:c3a652eff606 279 }
bonchenko 0:c3a652eff606 280 }
bonchenko 0:c3a652eff606 281 #endif
bonchenko 0:c3a652eff606 282
bonchenko 0:c3a652eff606 283 /*
bonchenko 0:c3a652eff606 284 * Minimal __assert_func used by the assert() macro
bonchenko 0:c3a652eff606 285 * */
bonchenko 0:c3a652eff606 286 void __assert_func(const char *file, int line, const char *func, const char *failedexpr)
bonchenko 0:c3a652eff606 287 {
bonchenko 0:c3a652eff606 288 while(1)
bonchenko 0:c3a652eff606 289 {}
bonchenko 0:c3a652eff606 290 }
bonchenko 0:c3a652eff606 291
bonchenko 0:c3a652eff606 292 /*
bonchenko 0:c3a652eff606 293 * Minimal __assert() uses __assert__func()
bonchenko 0:c3a652eff606 294 * */
bonchenko 0:c3a652eff606 295 void __assert(const char *file, int line, const char *failedexpr)
bonchenko 0:c3a652eff606 296 {
bonchenko 0:c3a652eff606 297 __assert_func (file, line, NULL, failedexpr);
bonchenko 0:c3a652eff606 298 }
bonchenko 0:c3a652eff606 299
bonchenko 0:c3a652eff606 300 #ifdef USE_SEE
bonchenko 0:c3a652eff606 301 #ifndef USE_DEFAULT_TIMEOUT_CALLBACK
bonchenko 0:c3a652eff606 302 /**
bonchenko 0:c3a652eff606 303 * @brief Basic management of the timeout situation.
bonchenko 0:c3a652eff606 304 * @param None.
bonchenko 0:c3a652eff606 305 * @retval sEE_FAIL.
bonchenko 0:c3a652eff606 306 */
bonchenko 0:c3a652eff606 307 uint32_t sEE_TIMEOUT_UserCallback(void)
bonchenko 0:c3a652eff606 308 {
bonchenko 0:c3a652eff606 309 /* Return with error code */
bonchenko 0:c3a652eff606 310 return sEE_FAIL;
bonchenko 0:c3a652eff606 311 }
bonchenko 0:c3a652eff606 312 #endif
bonchenko 0:c3a652eff606 313 #endif /* USE_SEE */