1 2 3 .syntax unified 4 .cpu cortex-m3 5 .fpu softvfp 6 .thumb 7 8.global g_pfnVectors 9.global Default_Handler 10 11/* start address for the initialization values of the .data section. 12defined in linker script */ 13.word _sidata 14/* start address for the .data section. defined in linker script */ 15.word _sdata 16/* end address for the .data section. defined in linker script */ 17.word _edata 18/* start address for the .bss section. defined in linker script */ 19.word _sbss 20/* end address for the .bss section. defined in linker script */ 21.word _ebss 22 23.equ BootRAM, 0xF108F85F 24/** 25 * @brief This is the code that gets called when the processor first 26 * starts execution following a reset event. Only the absolutely 27 * necessary set is performed, after which the application 28 * supplied main() routine is called. 29 * @param None 30 * @retval : None 31*/ 32 33 .section .text.Reset_Handler 34 .weak Reset_Handler 35 .type Reset_Handler, %function 36Reset_Handler: 37 38/* Copy the data segment initializers from flash to SRAM */ 39 ldr r0, =_sdata 40 ldr r1, =_edata 41 ldr r2, =_sidata 42 movs r3, #0 43 b LoopCopyDataInit 44 45CopyDataInit: 46 ldr r4, [r2, r3] 47 str r4, [r0, r3] 48 adds r3, r3, #4 49 50LoopCopyDataInit: 51 adds r4, r0, r3 52 cmp r4, r1 53 bcc CopyDataInit 54 55/* Zero fill the bss segment. */ 56 ldr r2, =_sbss 57 ldr r4, =_ebss 58 movs r3, #0 59 b LoopFillZerobss 60 61FillZerobss: 62 str r3, [r2] 63 adds r2, r2, #4 64 65LoopFillZerobss: 66 cmp r2, r4 67 bcc FillZerobss 68/*unlock*/ 69 ldr r0,=0x400210F0 70 mov r1,#0x00000001 71 str r1,[r0] 72 ldr r2,=0x40016C00 73 ldr r3,=0xa7d93a86 74 str r3,[r2] 75 ldr r3,=0xab12dfcd 76 str r3,[r2] 77 ldr r3,=0xcded3526 78 str r3,[r2] 79 ldr r3,=0x200183FF 80 str r3,[r2,#0x18] 81 ldr r4,=0x4002228c 82 ldr r5,=0xa5a5a5a5 83 str r5,[r4] 84/*lock*/ 85 ldr r2,=0x400210f0 86 ldr r3,=0x00000000 87 str r3,[r2] 88 ldr r2,=0x40016c00 89 ldr r3,=0x5826c579 90 str r3,[r2] 91 ldr r3,=0x54ed2032 92 str r3,[r2] 93 ldr r3,=0x3212cad9 94 str r3,[r2] 95 ldr r2,=0x4002228c 96 ldr r3,=0x5a5a5a5a 97 str r3,[r2] 98 99 mov r1,#0x00000000 100 101/* Call the clock system intitialization function.*/ 102 bl SystemInit 103/* Call static constructors */ 104 bl __libc_init_array 105/* Call the application's entry point.*/ 106 bl entry 107 bx lr 108.size Reset_Handler, .-Reset_Handler 109 110/** 111 * @brief This is the code that gets called when the processor receives an 112 * unexpected interrupt. This simply enters an infinite loop, preserving 113 * the system state for examination by a debugger. 114 * 115 * @param None 116 * @retval : None 117*/ 118 .section .text.Default_Handler,"ax",%progbits 119Default_Handler: 120Infinite_Loop: 121 b Infinite_Loop 122 .size Default_Handler, .-Default_Handler 123/****************************************************************************** 124* 125* The minimal vector table for a Cortex M3. Note that the proper constructs 126* must be placed on this to ensure that it ends up at physical address 127* 0x0000.0000. 128* 129******************************************************************************/ 130 .section .isr_vector,"a",%progbits 131 .type g_pfnVectors, %object 132 .size g_pfnVectors, .-g_pfnVectors 133 134 135g_pfnVectors: 136 137 .word _estack 138 .word Reset_Handler 139 .word NMI_Handler 140 .word HardFault_Handler 141 .word MemManage_Handler 142 .word BusFault_Handler 143 .word UsageFault_Handler 144 .word 0 145 .word 0 146 .word 0 147 .word 0 148 .word SVC_Handler 149 .word DebugMon_Handler 150 .word 0 151 .word PendSV_Handler 152 .word SysTick_Handler 153 .word WWDG_IRQHandler 154 .word PVD_IRQHandler 155 .word TAMPER_IRQHandler 156 .word RTC_IRQHandler 157 .word FLASH_IRQHandler 158 .word RCC_IRQHandler 159 .word EXTI0_IRQHandler 160 .word EXTI1_IRQHandler 161 .word EXTI2_IRQHandler 162 .word EXTI3_IRQHandler 163 .word EXTI4_IRQHandler 164 .word DMA1_Channel1_IRQHandler 165 .word DMA1_Channel2_IRQHandler 166 .word DMA1_Channel3_IRQHandler 167 .word DMA1_Channel4_IRQHandler 168 .word DMA1_Channel5_IRQHandler 169 .word DMA1_Channel6_IRQHandler 170 .word DMA1_Channel7_IRQHandler 171 .word ADC1_2_IRQHandler 172 .word USB_HP_CAN1_TX_IRQHandler 173 .word USB_LP_CAN1_RX0_IRQHandler 174 .word CAN1_RX1_IRQHandler 175 .word CAN1_SCE_IRQHandler 176 .word EXTI9_5_IRQHandler 177 .word TIM1_BRK_IRQHandler 178 .word TIM1_UP_IRQHandler 179 .word TIM1_TRG_COM_IRQHandler 180 .word TIM1_CC_IRQHandler 181 .word TIM2_IRQHandler 182 .word TIM3_IRQHandler 183 .word TIM4_IRQHandler 184 .word I2C1_EV_IRQHandler 185 .word I2C1_ER_IRQHandler 186 .word I2C2_EV_IRQHandler 187 .word I2C2_ER_IRQHandler 188 .word SPI1_IRQHandler 189 .word SPI2_IRQHandler 190 .word USART1_IRQHandler 191 .word USART2_IRQHandler 192 .word USART3_IRQHandler 193 .word EXTI15_10_IRQHandler 194 .word RTC_Alarm_IRQHandler 195 .word USBWakeUp_IRQHandler 196 .word 0 197 .word 0 198 .word 0 199 .word 0 200 .word 0 201 .word 0 202 .word 0 203 .word BootRAM 204 205/******************************************************************************* 206* 207* Provide weak aliases for each Exception handler to the Default_Handler. 208* As they are weak aliases, any function with the same name will override 209* this definition. 210* 211*******************************************************************************/ 212 213 .weak NMI_Handler 214 .thumb_set NMI_Handler,Default_Handler 215 216 .weak HardFault_Handler 217 .thumb_set HardFault_Handler,Default_Handler 218 219 .weak MemManage_Handler 220 .thumb_set MemManage_Handler,Default_Handler 221 222 .weak BusFault_Handler 223 .thumb_set BusFault_Handler,Default_Handler 224 225 .weak UsageFault_Handler 226 .thumb_set UsageFault_Handler,Default_Handler 227 228 .weak SVC_Handler 229 .thumb_set SVC_Handler,Default_Handler 230 231 .weak DebugMon_Handler 232 .thumb_set DebugMon_Handler,Default_Handler 233 234 .weak PendSV_Handler 235 .thumb_set PendSV_Handler,Default_Handler 236 237 .weak SysTick_Handler 238 .thumb_set SysTick_Handler,Default_Handler 239 240 .weak WWDG_IRQHandler 241 .thumb_set WWDG_IRQHandler,Default_Handler 242 243 .weak PVD_IRQHandler 244 .thumb_set PVD_IRQHandler,Default_Handler 245 246 .weak TAMPER_IRQHandler 247 .thumb_set TAMPER_IRQHandler,Default_Handler 248 249 .weak RTC_IRQHandler 250 .thumb_set RTC_IRQHandler,Default_Handler 251 252 .weak FLASH_IRQHandler 253 .thumb_set FLASH_IRQHandler,Default_Handler 254 255 .weak RCC_IRQHandler 256 .thumb_set RCC_IRQHandler,Default_Handler 257 258 .weak EXTI0_IRQHandler 259 .thumb_set EXTI0_IRQHandler,Default_Handler 260 261 .weak EXTI1_IRQHandler 262 .thumb_set EXTI1_IRQHandler,Default_Handler 263 264 .weak EXTI2_IRQHandler 265 .thumb_set EXTI2_IRQHandler,Default_Handler 266 267 .weak EXTI3_IRQHandler 268 .thumb_set EXTI3_IRQHandler,Default_Handler 269 270 .weak EXTI4_IRQHandler 271 .thumb_set EXTI4_IRQHandler,Default_Handler 272 273 .weak DMA1_Channel1_IRQHandler 274 .thumb_set DMA1_Channel1_IRQHandler,Default_Handler 275 276 .weak DMA1_Channel2_IRQHandler 277 .thumb_set DMA1_Channel2_IRQHandler,Default_Handler 278 279 .weak DMA1_Channel3_IRQHandler 280 .thumb_set DMA1_Channel3_IRQHandler,Default_Handler 281 282 .weak DMA1_Channel4_IRQHandler 283 .thumb_set DMA1_Channel4_IRQHandler,Default_Handler 284 285 .weak DMA1_Channel5_IRQHandler 286 .thumb_set DMA1_Channel5_IRQHandler,Default_Handler 287 288 .weak DMA1_Channel6_IRQHandler 289 .thumb_set DMA1_Channel6_IRQHandler,Default_Handler 290 291 .weak DMA1_Channel7_IRQHandler 292 .thumb_set DMA1_Channel7_IRQHandler,Default_Handler 293 294 .weak ADC1_2_IRQHandler 295 .thumb_set ADC1_2_IRQHandler,Default_Handler 296 297 .weak USB_HP_CAN1_TX_IRQHandler 298 .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler 299 300 .weak USB_LP_CAN1_RX0_IRQHandler 301 .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler 302 303 .weak CAN1_RX1_IRQHandler 304 .thumb_set CAN1_RX1_IRQHandler,Default_Handler 305 306 .weak CAN1_SCE_IRQHandler 307 .thumb_set CAN1_SCE_IRQHandler,Default_Handler 308 309 .weak EXTI9_5_IRQHandler 310 .thumb_set EXTI9_5_IRQHandler,Default_Handler 311 312 .weak TIM1_BRK_IRQHandler 313 .thumb_set TIM1_BRK_IRQHandler,Default_Handler 314 315 .weak TIM1_UP_IRQHandler 316 .thumb_set TIM1_UP_IRQHandler,Default_Handler 317 318 .weak TIM1_TRG_COM_IRQHandler 319 .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler 320 321 .weak TIM1_CC_IRQHandler 322 .thumb_set TIM1_CC_IRQHandler,Default_Handler 323 324 .weak TIM2_IRQHandler 325 .thumb_set TIM2_IRQHandler,Default_Handler 326 327 .weak TIM3_IRQHandler 328 .thumb_set TIM3_IRQHandler,Default_Handler 329 330 .weak TIM4_IRQHandler 331 .thumb_set TIM4_IRQHandler,Default_Handler 332 333 .weak I2C1_EV_IRQHandler 334 .thumb_set I2C1_EV_IRQHandler,Default_Handler 335 336 .weak I2C1_ER_IRQHandler 337 .thumb_set I2C1_ER_IRQHandler,Default_Handler 338 339 .weak I2C2_EV_IRQHandler 340 .thumb_set I2C2_EV_IRQHandler,Default_Handler 341 342 .weak I2C2_ER_IRQHandler 343 .thumb_set I2C2_ER_IRQHandler,Default_Handler 344 345 .weak SPI1_IRQHandler 346 .thumb_set SPI1_IRQHandler,Default_Handler 347 348 .weak SPI2_IRQHandler 349 .thumb_set SPI2_IRQHandler,Default_Handler 350 351 .weak USART1_IRQHandler 352 .thumb_set USART1_IRQHandler,Default_Handler 353 354 .weak USART2_IRQHandler 355 .thumb_set USART2_IRQHandler,Default_Handler 356 357 .weak USART3_IRQHandler 358 .thumb_set USART3_IRQHandler,Default_Handler 359 360 .weak EXTI15_10_IRQHandler 361 .thumb_set EXTI15_10_IRQHandler,Default_Handler 362 363 .weak RTC_Alarm_IRQHandler 364 .thumb_set RTC_Alarm_IRQHandler,Default_Handler 365 366 .weak USBWakeUp_IRQHandler 367 .thumb_set USBWakeUp_IRQHandler,Default_Handler 368 369 370