Advertisement
Guest User

Startup File (c)

a guest
Nov 14th, 2012
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.96 KB | None | 0 0
  1. /**
  2.  ******************************************************************************
  3.  * @file      startup_stm32f10x_md_vl.c
  4.  * @author    Coocox
  5.  * @version   V1.0
  6.  * @date      3/4/2011
  7.  * @brief     STM32F10x Medium Density Value Line Devices Startup code.
  8.  *            This module performs:
  9.  *                - Set the initial SP
  10.  *                - Set the vector table entries with the exceptions ISR address
  11.  *                - Initialize data and bss
  12.  *                - Setup the microcontroller system.
  13.  *                - Call the application's entry point.
  14.  *            After Reset the Cortex-M3 processor is in Thread mode,
  15.  *            priority is Privileged, and the Stack is set to Main.
  16.  *******************************************************************************
  17.  */
  18.  
  19.  
  20. /*----------Stack Configuration-----------------------------------------------*/  
  21. #define STACK_SIZE       0x00000100      /*!< Stack size (in Words)           */
  22. __attribute__ ((section(".co_stack")))
  23. unsigned long pulStack[STACK_SIZE];      
  24.  
  25.  
  26. /*----------Macro definition--------------------------------------------------*/  
  27. #define WEAK __attribute__ ((weak))          
  28.  
  29.  
  30. /*----------Declaration of the default fault handlers-------------------------*/  
  31. /* System exception vector handler */
  32. void WEAK  Reset_Handler(void);
  33. void WEAK  NMI_Handler(void);
  34. void WEAK  HardFault_Handler(void);
  35. void WEAK  MemManage_Handler(void);
  36. void WEAK  BusFault_Handler(void);
  37. void WEAK  UsageFault_Handler(void);
  38. void WEAK  SVC_Handler(void);
  39. void WEAK  DebugMon_Handler(void);
  40. void WEAK  PendSV_Handler(void);
  41. void WEAK  SysTick_Handler(void);
  42. void WEAK  WWDG_IRQHandler(void);
  43. void WEAK  PVD_IRQHandler(void);
  44. void WEAK  TAMPER_IRQHandler(void);
  45. void WEAK  RTC_IRQHandler(void);
  46. void WEAK  FLASH_IRQHandler(void);
  47. void WEAK  RCC_IRQHandler(void);
  48. void WEAK  EXTI0_IRQHandler(void);
  49. void WEAK  EXTI1_IRQHandler(void);
  50. void WEAK  EXTI2_IRQHandler(void);
  51. void WEAK  EXTI3_IRQHandler(void);
  52. void WEAK  EXTI4_IRQHandler(void);
  53. void WEAK  DMA1_Channel1_IRQHandler(void);
  54. void WEAK  DMA1_Channel2_IRQHandler(void);
  55. void WEAK  DMA1_Channel3_IRQHandler(void);
  56. void WEAK  DMA1_Channel4_IRQHandler(void);
  57. void WEAK  DMA1_Channel5_IRQHandler(void);
  58. void WEAK  DMA1_Channel6_IRQHandler(void);
  59. void WEAK  DMA1_Channel7_IRQHandler(void);
  60. void WEAK  ADC1_IRQHandler(void);
  61. void WEAK  EXTI9_5_IRQHandler(void);
  62. void WEAK  TIM1_BRK_TIM15_IRQHandler(void);
  63. void WEAK  TIM1_UP_TIM16_IRQHandler(void);
  64. void WEAK  TIM1_TRG_COM_TIM17_IRQHandler(void);
  65. void WEAK  TIM1_CC_IRQHandler(void);
  66. void WEAK  TIM2_IRQHandler(void);
  67. void WEAK  TIM3_IRQHandler(void);
  68. void WEAK  TIM4_IRQHandler(void);
  69. void WEAK  I2C1_EV_IRQHandler(void);
  70. void WEAK  I2C1_ER_IRQHandler(void);
  71. void WEAK  I2C2_EV_IRQHandler(void);
  72. void WEAK  I2C2_ER_IRQHandler(void);
  73. void WEAK  SPI1_IRQHandler(void);
  74. void WEAK  SPI2_IRQHandler(void);
  75. void WEAK  USART1_IRQHandler(void);
  76. void WEAK  USART2_IRQHandler(void);
  77. void WEAK  USART3_IRQHandler(void);
  78. void WEAK  EXTI15_10_IRQHandler(void);
  79. void WEAK  RTCAlarm_IRQHandler(void);
  80. void WEAK  CEC_IRQHandler(void);
  81. void WEAK  TIM6_DAC_IRQHandler(void);
  82. void WEAK  TIM7_IRQHandler(void);
  83.  
  84. /*----------Symbols defined in linker script----------------------------------*/  
  85. extern unsigned long _sidata;    /*!< Start address for the initialization
  86.                                       values of the .data section.            */
  87. extern unsigned long _sdata;     /*!< Start address for the .data section     */    
  88. extern unsigned long _edata;     /*!< End address for the .data section       */    
  89. extern unsigned long _sbss;      /*!< Start address for the .bss section      */
  90. extern unsigned long _ebss;      /*!< End address for the .bss section        */      
  91. extern void _eram;               /*!< End address for ram                     */
  92.  
  93.  
  94. /*----------Function prototypes-----------------------------------------------*/  
  95. extern int main(void);           /*!< The entry point for the application.    */
  96. extern void SystemInit(void);    /*!< Setup the microcontroller system(CMSIS) */
  97. void Default_Reset_Handler(void);   /*!< Default reset handler                */
  98. static void Default_Handler(void);  /*!< Default exception handler            */
  99.  
  100.  
  101. /**
  102.   *@brief The minimal vector table for a Cortex M3.  Note that the proper constructs
  103.   *       must be placed on this to ensure that it ends up at physical address
  104.   *       0x00000000.  
  105.   */
  106. __attribute__ ((section(".isr_vector")))
  107. void (* const g_pfnVectors[])(void) =
  108. {      
  109.   /*----------Core Exceptions-------------------------------------------------*/
  110.   (void *)&pulStack[STACK_SIZE-1],     /*!< The initial stack pointer         */
  111.   Reset_Handler,                /*!< Reset Handler                            */
  112.   NMI_Handler,                  /*!< NMI Handler                              */
  113.   HardFault_Handler,            /*!< Hard Fault Handler                       */
  114.   MemManage_Handler,            /*!< MPU Fault Handler                        */
  115.   BusFault_Handler,             /*!< Bus Fault Handler                        */
  116.   UsageFault_Handler,           /*!< Usage Fault Handler                      */
  117.   0,0,0,0,                      /*!< Reserved                                 */
  118.   SVC_Handler,                  /*!< SVCall Handler                           */
  119.   DebugMon_Handler,             /*!< Debug Monitor Handler                    */
  120.   0,                            /*!< Reserved                                 */
  121.   PendSV_Handler,               /*!< PendSV Handler                           */
  122.   SysTick_Handler,              /*!< SysTick Handler                          */
  123.  
  124.   /*----------External Exceptions---------------------------------------------*/
  125.   WWDG_IRQHandler,              /*!<  0: Window Watchdog                      */
  126.   PVD_IRQHandler,               /*!<  1: PVD through EXTI Line detect         */
  127.   TAMPER_IRQHandler,            /*!<  2: Tamper                               */
  128.   RTC_IRQHandler,               /*!<  3: RTC                                  */
  129.   FLASH_IRQHandler,             /*!<  4: Flash                                */
  130.   RCC_IRQHandler,               /*!<  5: RCC                                  */
  131.   EXTI0_IRQHandler,             /*!<  6: EXTI Line 0                          */
  132.   EXTI1_IRQHandler,             /*!<  7: EXTI Line 1                          */
  133.   EXTI2_IRQHandler,             /*!<  8: EXTI Line 2                          */
  134.   EXTI3_IRQHandler,             /*!<  9: EXTI Line 3                          */
  135.   EXTI4_IRQHandler,             /*!< 10: EXTI Line 4                          */
  136.   DMA1_Channel1_IRQHandler,     /*!< 11: DMA1 Channel 1                       */
  137.   DMA1_Channel2_IRQHandler,     /*!< 12: DMA1 Channel 2                       */
  138.   DMA1_Channel3_IRQHandler,     /*!< 13: DMA1 Channel 3                       */
  139.   DMA1_Channel4_IRQHandler,     /*!< 14: DMA1 Channel 4                       */
  140.   DMA1_Channel5_IRQHandler,     /*!< 15: DMA1 Channel 5                       */
  141.   DMA1_Channel6_IRQHandler,     /*!< 16: DMA1 Channel 6                       */
  142.   DMA1_Channel7_IRQHandler,     /*!< 17: DMA1 Channel 7                       */
  143.   ADC1_IRQHandler,              /*!< 18: ADC1                                 */
  144.   0,                            /*!< 19: USB High Priority or CAN1 TX         */
  145.   0,                            /*!< 20: USB Low  Priority or CAN1 RX0        */
  146.   0,                            /*!< 21: CAN1 RX1                             */
  147.   0,                            /*!< 22: CAN1 SCE                             */
  148.   EXTI9_5_IRQHandler,           /*!< 23: EXTI Line 9..5                       */
  149.   TIM1_BRK_TIM15_IRQHandler,    /*!< 24: TIM1 Break and TIM15                 */
  150.   TIM1_UP_TIM16_IRQHandler,     /*!< 25: TIM1 Update and TIM16                */
  151.   TIM1_TRG_COM_TIM17_IRQHandler,/*!< 26: TIM1 Trigger and Commutation and TIM17        */
  152.   TIM1_CC_IRQHandler,           /*!< 27: TIM1 Capture Compare                 */
  153.   TIM2_IRQHandler,              /*!< 28: TIM2                                 */
  154.   TIM3_IRQHandler,              /*!< 29: TIM3                                 */
  155.   TIM4_IRQHandler,              /*!< 30: TIM4                                 */
  156.   I2C1_EV_IRQHandler,           /*!< 31: I2C1 Event                           */
  157.   I2C1_ER_IRQHandler,           /*!< 32: I2C1 Error                           */
  158.   I2C2_EV_IRQHandler,           /*!< 33: I2C2 Event                           */
  159.   I2C2_ER_IRQHandler,           /*!< 34: I2C2 Error                           */
  160.   SPI1_IRQHandler,              /*!< 35: SPI1                                 */
  161.   SPI2_IRQHandler,              /*!< 36: SPI2                                 */
  162.   USART1_IRQHandler,            /*!< 37: USART1                               */
  163.   USART2_IRQHandler,            /*!< 38: USART2                               */
  164.   USART3_IRQHandler,            /*!< 39: USART3                               */
  165.   EXTI15_10_IRQHandler,         /*!< 40: EXTI Line 15..10                     */
  166.   RTCAlarm_IRQHandler,          /*!< 41: RTC Alarm through EXTI Line          */
  167.   CEC_IRQHandler,               /*!< 42: HDMI-CEC                             */  
  168.   0,0,0,0,0,0,                  /*!< Reserved                                 */
  169.   0,0,0,0,0,                    /*!< Reserved                                 */
  170.   TIM6_DAC_IRQHandler,           /*!< 54: TIM6 and DAC underrun                */
  171.   TIM7_IRQHandler,               /*!< 55: TIM7                                 */
  172.   (void *)0xF108F85F            /*!< Boot in RAM mode                         */
  173. };        
  174.  
  175.  
  176. /**
  177.   * @brief  This is the code that gets called when the processor first
  178.   *         starts execution following a reset event. Only the absolutely
  179.   *         necessary set is performed, after which the application
  180.   *         supplied main() routine is called.
  181.   * @param  None
  182.   * @retval None
  183.   */
  184. void Default_Reset_Handler(void)
  185. {
  186.   << here is my code / breakpoint
  187.  
  188.   /* Initialize data and bss */
  189.   unsigned long *pulSrc, *pulDest;
  190.  
  191.   /* Copy the data segment initializers from flash to SRAM */
  192.   pulSrc = &_sidata;
  193.  
  194.   for(pulDest = &_sdata; pulDest < &_edata; )
  195.   {
  196.     *(pulDest++) = *(pulSrc++);
  197.   }
  198.  
  199.   /* Zero fill the bss segment.  This is done with inline assembly since this
  200.      will clear the value of pulDest if it is not kept in a register. */
  201.   __asm("  ldr     r0, =_sbss\n"
  202.         "  ldr     r1, =_ebss\n"
  203.         "  mov     r2, #0\n"
  204.         "  .thumb_func\n"
  205.         "  zero_loop:\n"
  206.         "    cmp     r0, r1\n"
  207.         "    it      lt\n"
  208.         "    strlt   r2, [r0], #4\n"
  209.         "    blt     zero_loop");
  210.  
  211.   /* Setup the microcontroller system. */
  212.   SystemInit();
  213.    
  214.   /* Call the application's entry point.*/
  215.   main();
  216. }
  217.  
  218. /**
  219.   *@brief Provide weak aliases for each Exception handler to the Default_Handler.
  220.   *       As they are weak aliases, any function with the same name will override
  221.   *       this definition.
  222.   */
  223. #pragma weak Reset_Handler = Default_Reset_Handler  
  224. #pragma weak NMI_Handler = Default_Handler
  225. #pragma weak HardFault_Handler = Default_Handler
  226. #pragma weak MemManage_Handler = Default_Handler
  227. #pragma weak BusFault_Handler = Default_Handler
  228. #pragma weak UsageFault_Handler = Default_Handler
  229. #pragma weak SVC_Handler = Default_Handler
  230. #pragma weak DebugMon_Handler = Default_Handler
  231. #pragma weak PendSV_Handler = Default_Handler
  232. #pragma weak SysTick_Handler = Default_Handler
  233. #pragma weak WWDG_IRQHandler = Default_Handler
  234. #pragma weak PVD_IRQHandler = Default_Handler
  235. #pragma weak TAMPER_IRQHandler = Default_Handler
  236. #pragma weak RTC_IRQHandler = Default_Handler
  237. #pragma weak FLASH_IRQHandler = Default_Handler
  238. #pragma weak RCC_IRQHandler = Default_Handler
  239. #pragma weak EXTI0_IRQHandler = Default_Handler
  240. #pragma weak EXTI1_IRQHandler = Default_Handler
  241. #pragma weak EXTI2_IRQHandler = Default_Handler
  242. #pragma weak EXTI3_IRQHandler = Default_Handler
  243. #pragma weak EXTI4_IRQHandler = Default_Handler
  244. #pragma weak DMA1_Channel1_IRQHandler = Default_Handler
  245. #pragma weak DMA1_Channel2_IRQHandler = Default_Handler
  246. #pragma weak DMA1_Channel3_IRQHandler = Default_Handler
  247. #pragma weak DMA1_Channel4_IRQHandler = Default_Handler
  248. #pragma weak DMA1_Channel5_IRQHandler = Default_Handler
  249. #pragma weak DMA1_Channel6_IRQHandler = Default_Handler
  250. #pragma weak DMA1_Channel7_IRQHandler = Default_Handler
  251. #pragma weak ADC1_IRQHandler = Default_Handler
  252. #pragma weak EXTI9_5_IRQHandler = Default_Handler
  253. #pragma weak TIM1_BRK_TIM15_IRQHandler = Default_Handler
  254. #pragma weak TIM1_UP_TIM16_IRQHandler = Default_Handler
  255. #pragma weak TIM1_TRG_COM_TIM17_IRQHandler = Default_Handler
  256. #pragma weak TIM1_CC_IRQHandler = Default_Handler
  257. #pragma weak TIM2_IRQHandler = Default_Handler
  258. #pragma weak TIM3_IRQHandler = Default_Handler
  259. #pragma weak TIM4_IRQHandler = Default_Handler
  260. #pragma weak I2C1_EV_IRQHandler = Default_Handler
  261. #pragma weak I2C1_ER_IRQHandler = Default_Handler
  262. #pragma weak I2C2_EV_IRQHandler = Default_Handler
  263. #pragma weak I2C2_ER_IRQHandler = Default_Handler
  264. #pragma weak SPI1_IRQHandler = Default_Handler
  265. #pragma weak SPI2_IRQHandler = Default_Handler
  266. #pragma weak USART1_IRQHandler = Default_Handler
  267. #pragma weak USART2_IRQHandler = Default_Handler
  268. #pragma weak USART3_IRQHandler = Default_Handler
  269. #pragma weak EXTI15_10_IRQHandler = Default_Handler
  270. #pragma weak RTCAlarm_IRQHandler = Default_Handler
  271. #pragma weak CEC_IRQHandler = Default_Handler
  272. #pragma weak TIM6_DAC_IRQHandler = Default_Handler
  273. #pragma weak TIM7_IRQHandler = Default_Handler
  274.  
  275. /**
  276.   * @brief  This is the code that gets called when the processor receives an
  277.   *         unexpected interrupt.  This simply enters an infinite loop,
  278.   *         preserving the system state for examination by a debugger.
  279.   * @param  None
  280.   * @retval None  
  281.   */
  282. static void Default_Handler(void)
  283. {
  284.   /* Go into an infinite loop. */
  285.   while (1)
  286.   {
  287.   }
  288. }
  289.  
  290. /*********************** (C) COPYRIGHT 2011 Coocox ************END OF FILE*****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement