From f91ae974a7a3875d268151369712b6a979190058 Mon Sep 17 00:00:00 2001 From: zedamota Date: Mon, 23 Aug 2010 21:30:09 +0000 Subject: [PATCH] OP-21/Bootloader Small change. Now turns off interrupts before jumping to code. git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1393 ebee16cc-31ac-478f-84a7-5cbb03baadba --- flight/Bootloaders/OpenPilot/main.c | 181 +++++++++++++--------------- 1 file changed, 86 insertions(+), 95 deletions(-) diff --git a/flight/Bootloaders/OpenPilot/main.c b/flight/Bootloaders/OpenPilot/main.c index 0cb12c3f5..7c24b1024 100644 --- a/flight/Bootloaders/OpenPilot/main.c +++ b/flight/Bootloaders/OpenPilot/main.c @@ -1,17 +1,17 @@ /******************** (C) COPYRIGHT 2010 STMicroelectronics ******************** -* File Name : main.c -* Author : MCD Application Team -* Version : V3.2.1 -* Date : 07/05/2010 -* Description : Custom HID demo main file -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ + * File Name : main.c + * Author : MCD Application Team + * Version : V3.2.1 + * Date : 07/05/2010 + * Description : Custom HID demo main file + ******************************************************************************** + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. + * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, + * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE + * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING + * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" @@ -23,7 +23,7 @@ extern void FLASH_Download(); /* Private typedef -----------------------------------------------------------*/ -typedef void (*pFunction)(void); +typedef void (*pFunction)(void); /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ @@ -31,110 +31,101 @@ pFunction Jump_To_Application; uint32_t JumpAddress; /* Extern variables ----------------------------------------------------------*/ uint8_t DeviceState; -uint8_t JumpToApp=0; +uint8_t JumpToApp = 0; /* Private function prototypes -----------------------------------------------*/ void Delay(__IO uint32_t nCount); void DelayWithDown(__IO uint32_t nCount); /* Private functions ---------------------------------------------------------*/ /******************************************************************************* -* Function Name : main. -* Description : main routine. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -int main(void) -{ - if (((*(__IO uint32_t*)StartOfUserCode) & 0x2FFE0000 ) == 0x20000000) - { /* Jump to user application */ + * Function Name : main. + * Description : main routine. + * Input : None. + * Output : None. + * Return : None. + *******************************************************************************/ +int main(void) { - JumpAddress = *(__IO uint32_t*) (StartOfUserCode + 4); - Jump_To_Application = (pFunction) JumpAddress; - /* Initialize user application's Stack Pointer */ - __set_MSP(*(__IO uint32_t*) StartOfUserCode); - Jump_To_Application(); - } - Set_System(); + Set_System(); - USB_Interrupts_Config(); + USB_Interrupts_Config(); - Set_USBClock(); + Set_USBClock(); - USB_Init(); + USB_Init(); - DeviceState=idle; - while (JumpToApp==0) - { + DeviceState = idle; + while (JumpToApp == 0) { + STM_EVAL_LEDToggle(LED1); + DelayWithDown(10);//1000000); + } + if (((*(__IO uint32_t*) StartOfUserCode) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ + FLASH_Lock(); + RCC_APB2PeriphResetCmd(0xffffffff, ENABLE); + RCC_APB1PeriphResetCmd(0xffffffff, ENABLE); + RCC_APB2PeriphResetCmd(0xffffffff, DISABLE); + RCC_APB1PeriphResetCmd(0xffffffff, DISABLE); + _SetCNTR(0); // clear interrupt mask + _SetISTR(0); // clear all requests - STM_EVAL_LEDToggle(LED1); - DelayWithDown(10);//1000000); - } - if (((*(__IO uint32_t*)StartOfUserCode) & 0x2FFE0000 ) == 0x20000000) - { /* Jump to user application */ - - JumpAddress = *(__IO uint32_t*) (StartOfUserCode + 4); - Jump_To_Application = (pFunction) JumpAddress; - /* Initialize user application's Stack Pointer */ - __set_MSP(*(__IO uint32_t*) StartOfUserCode); - Jump_To_Application(); - } - while(1) - { - STM_EVAL_LEDToggle(LED1); - STM_EVAL_LEDToggle(LED2); - Delay(1000000); - } + JumpAddress = *(__IO uint32_t*) (StartOfUserCode + 4); + Jump_To_Application = (pFunction) JumpAddress; + /* Initialize user application's Stack Pointer */ + __set_MSP(*(__IO uint32_t*) StartOfUserCode); + Jump_To_Application(); + } + while (1) { + STM_EVAL_LEDToggle(LED1); + STM_EVAL_LEDToggle(LED2); + Delay(1000000); + } } /******************************************************************************* -* Function Name : Delay -* Description : Inserts a delay time. -* Input : nCount: specifies the delay time length. -* Output : None -* Return : None -*******************************************************************************/ -void Delay(__IO uint32_t nCount) -{ - for(; nCount!= 0;nCount--) - { + * Function Name : Delay + * Description : Inserts a delay time. + * Input : nCount: specifies the delay time length. + * Output : None + * Return : None + *******************************************************************************/ +void Delay(__IO uint32_t nCount) { + for (; nCount != 0; nCount--) { - } + } } /******************************************************************************* -* Function Name : Delay -* Description : Inserts a delay time. -* Input : nCount: specifies the delay time length. -* Output : None -* Return : None -*******************************************************************************/ -void DelayWithDown(__IO uint32_t nCount) -{ - for(; nCount!= 0;nCount--) - { - for(__IO uint32_t delay=DownloadDelay ; delay!=0 ; delay--){} - FLASH_Download(); - } + * Function Name : Delay + * Description : Inserts a delay time. + * Input : nCount: specifies the delay time length. + * Output : None + * Return : None + *******************************************************************************/ +void DelayWithDown(__IO uint32_t nCount) { + for (; nCount != 0; nCount--) { + for (__IO uint32_t delay = DownloadDelay; delay != 0; delay--) { + } + FLASH_Download(); + } } #ifdef USE_FULL_ASSERT /******************************************************************************* -* Function Name : assert_failed -* Description : Reports the name of the source file and the source line number -* where the assert_param error has occurred. -* Input : - file: pointer to the source file name -* - line: assert_param error line source number -* Output : None -* Return : None -*******************************************************************************/ + * Function Name : assert_failed + * Description : Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * Input : - file: pointer to the source file name + * - line: assert_param error line source number + * Output : None + * Return : None + *******************************************************************************/ void assert_failed(uint8_t* file, uint32_t line) -{ - /* User can add his own implementation to report the file name and line number, - ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* Infinite loop */ - while(1) - { - } + /* Infinite loop */ + while(1) + { + } } #endif