Revision 470d0567 Target/Demo/ARMCM3_STM32F103_DiWheelDrive_GCC/Boot/main.c
Target/Demo/ARMCM3_STM32F103_DiWheelDrive_GCC/Boot/main.c | ||
---|---|---|
23 | 23 |
* You should have received a copy of the GNU General Public License along with OpenBLT. |
24 | 24 |
* If not, see <http://www.gnu.org/licenses/>. |
25 | 25 |
* |
26 |
* A special exception to the GPL is included to allow you to distribute a combined work
|
|
27 |
* that includes OpenBLT without being obliged to provide the source code for any
|
|
26 |
* A special exception to the GPL is included to allow you to distribute a combined work |
|
27 |
* that includes OpenBLT without being obliged to provide the source code for any |
|
28 | 28 |
* proprietary components. The exception text is included at the bottom of the license |
29 | 29 |
* file <license.html>. |
30 |
*
|
|
30 |
* |
|
31 | 31 |
* \endinternal |
32 | 32 |
****************************************************************************************/ |
33 | 33 |
|
... | ... | |
39 | 39 |
#include "stm32f10x_conf.h" /* STM32 peripheral drivers */ |
40 | 40 |
#include "timer.h" |
41 | 41 |
#include "ARMCM3_STM32/types.h" |
42 |
#include "AMiRo/interfaces.h"
|
|
42 |
#include "AMiRo/amiroblt.h"
|
|
43 | 43 |
#include "AMiRo/helper.h" |
44 | 44 |
|
45 | 45 |
|
... | ... | |
157 | 157 |
void shutdownToHibernate(const blt_bool exec_disambiguation); |
158 | 158 |
void shutdownAndRestart(const blt_bool exec_disambiguation); |
159 | 159 |
|
160 |
volatile BlBackupRegister backup_reg;
|
|
160 |
volatile blBackupRegister_t backup_reg;
|
|
161 | 161 |
|
162 | 162 |
/**************************************************************************************** |
163 | 163 |
* Callback configuration |
... | ... | |
168 | 168 |
void blCallbackShutdownRestart(void); |
169 | 169 |
void blCallbackHandleShutdownRequest(void); |
170 | 170 |
|
171 |
const BlCallbackTable cbtable __attribute ((section ("_callback_table"))) = {
|
|
171 |
const blCallbackTable_t cbtable __attribute__ ((section ("_callback_table"))) = {
|
|
172 | 172 |
.magicNumber = BL_MAGIC_NUMBER, |
173 |
.versionMajor = BL_VERSION_MAJOR,
|
|
174 |
.versionMinor = BL_VERSION_MINOR,
|
|
175 |
.versionHotfix = 0,
|
|
173 |
.vBootloader = {BL_VERSION_ID_AMiRoBLT_Release, BL_VERSION_MAJOR, BL_VERSION_MINOR, 0},
|
|
174 |
.vSSSP = {BL_VERSION_ID_SSSP, SSSP_VERSION_MAJOR, SSSP_VERSION_MINOR, 0},
|
|
175 |
.vCompiler = {BL_VERSION_ID_GCC, __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__}, // currently only GCC is supported
|
|
176 | 176 |
.cbShutdownHibernate = blCallbackShutdownHibernate, |
177 | 177 |
.cbShutdownDeepsleep = blCallbackShutdownDeepsleep, |
178 | 178 |
.cbShutdownTransportation = blCallbackShutdownTransportation, |
... | ... | |
189 | 189 |
|
190 | 190 |
|
191 | 191 |
/************************************************************************************//** |
192 |
** \brief This is the entry point for the bootloader application and is called
|
|
192 |
** \brief This is the entry point for the bootloader application and is called |
|
193 | 193 |
** by the reset interrupt vector after the C-startup routines executed. |
194 | 194 |
** \return Program return code. |
195 | 195 |
** |
... | ... | |
276 | 276 |
|
277 | 277 |
|
278 | 278 |
/************************************************************************************//** |
279 |
** \brief Initializes the microcontroller.
|
|
279 |
** \brief Initializes the microcontroller. |
|
280 | 280 |
** \return none. |
281 | 281 |
** |
282 | 282 |
****************************************************************************************/ |
... | ... | |
286 | 286 |
blt_int32u pll_multiplier; |
287 | 287 |
#if (BOOT_FILE_LOGGING_ENABLE > 0) && (BOOT_COM_UART_ENABLE == 0) |
288 | 288 |
GPIO_InitTypeDef GPIO_InitStruct; |
289 |
USART_InitTypeDef USART_InitStruct;
|
|
290 |
#endif
|
|
289 |
USART_InitTypeDef USART_InitStruct; |
|
290 |
#endif |
|
291 | 291 |
|
292 | 292 |
/* reset the RCC clock configuration to the default reset state (for debug purpose) */ |
293 | 293 |
/* set HSION bit */ |
... | ... | |
302 | 302 |
RCC->CFGR &= (blt_int32u)0xFF80FFFF; |
303 | 303 |
/* disable all interrupts and clear pending bits */ |
304 | 304 |
RCC->CIR = 0x009F0000; |
305 |
/* enable HSE */
|
|
305 |
/* enable HSE */ |
|
306 | 306 |
RCC->CR |= ((blt_int32u)RCC_CR_HSEON); |
307 | 307 |
/* wait till HSE is ready and if Time out is reached exit */ |
308 | 308 |
do |
309 | 309 |
{ |
310 | 310 |
HSEStatus = RCC->CR & RCC_CR_HSERDY; |
311 |
StartUpCounter++;
|
|
312 |
}
|
|
311 |
StartUpCounter++; |
|
312 |
} |
|
313 | 313 |
while((HSEStatus == 0) && (StartUpCounter != 1500)); |
314 | 314 |
/* check if time out was reached */ |
315 | 315 |
if ((RCC->CR & RCC_CR_HSERDY) == RESET) |
... | ... | |
323 | 323 |
FLASH->ACR &= (blt_int32u)((blt_int32u)~FLASH_ACR_LATENCY); |
324 | 324 |
#if (BOOT_CPU_SYSTEM_SPEED_KHZ > 48000) |
325 | 325 |
/* configure 2 flash wait states */ |
326 |
FLASH->ACR |= (blt_int32u)FLASH_ACR_LATENCY_2;
|
|
327 |
#elif (BOOT_CPU_SYSTEM_SPEED_KHZ > 24000)
|
|
326 |
FLASH->ACR |= (blt_int32u)FLASH_ACR_LATENCY_2; |
|
327 |
#elif (BOOT_CPU_SYSTEM_SPEED_KHZ > 24000) |
|
328 | 328 |
/* configure 1 flash wait states */ |
329 |
FLASH->ACR |= (blt_int32u)FLASH_ACR_LATENCY_1;
|
|
329 |
FLASH->ACR |= (blt_int32u)FLASH_ACR_LATENCY_1; |
|
330 | 330 |
#endif |
331 | 331 |
/* HCLK = SYSCLK */ |
332 | 332 |
RCC->CFGR |= (blt_int32u)RCC_CFGR_HPRE_DIV1; |
... | ... | |
354 | 354 |
} |
355 | 355 |
/* select PLL as system clock source */ |
356 | 356 |
RCC->CFGR &= (blt_int32u)((blt_int32u)~(RCC_CFGR_SW)); |
357 |
RCC->CFGR |= (blt_int32u)RCC_CFGR_SW_PLL;
|
|
357 |
RCC->CFGR |= (blt_int32u)RCC_CFGR_SW_PLL; |
|
358 | 358 |
/* wait till PLL is used as system clock source */ |
359 | 359 |
while ((RCC->CFGR & (blt_int32u)RCC_CFGR_SWS) != (blt_int32u)0x08) |
360 | 360 |
{ |
Also available in: Unified diff