1 .org 0x200 2 .global Reset_Handler,hard_fault_handler,svc_handler,pendsv_handler,systick,irq0,irq1,irq2,irq3,irq4,irq5,irq6,irq7,irq8,irq9,irq10,irq11,irq12,irq13,irq14,irq15,irq16,irq17,irq18,irq19,irq20,irq21,irq22,irq23,irq24,irq25,irq26,irq27,irq28,irq29,irq30,irq31 3 4 .long 5 6 7Reset_Handler: 8 ldr r0,=hardware_init 9 bx r0 10 .thumb_func 11 12hard_fault_handler: 13 ldr r0,=HARD_FAULT_IRQHandler 14 bx r0 15 nop 16 .thumb_func 17 18svc_handler: 19 ldr r0,=SVC_IRQHandler 20 bx r0 21 nop 22 .thumb_func 23 24pendsv_handler: 25 ldr r0,=PENDSV_IRQHandler 26 bx r0 27 nop 28 .thumb_func 29systick: 30 ldr r0,=SYSTICK_IRQHandler 31 bx r0 32 nop 33 .thumb_func 34irq0: 35 mov r0,#4*0 36 b isr 37 .thumb_func 38irq1: 39 mov r0,#4*1 40 b isr 41 .thumb_func 42irq2: 43 mov r0,#4*2 44 b isr 45 .thumb_func 46irq3: 47 mov r0,#4*3 48 b isr 49 .thumb_func 50irq4: 51 mov r0,#4*4 52 b isr 53 .thumb_func 54irq5: 55 mov r0,#4*5 56 b isr 57 .thumb_func 58irq6: 59 mov r0,#4*6 60 b isr 61 .thumb_func 62irq7: 63 mov r0,#4*7 64 b isr 65 .thumb_func 66irq8: 67 mov r0,#4*8 68 b isr 69 .thumb_func 70irq9: 71 mov r0,#4*9 72 b isr 73 .thumb_func 74irq10: 75 mov r0,#4*10 76 b isr 77 .thumb_func 78irq11: 79 mov r0,#4*11 80 b isr 81 .thumb_func 82irq12: 83 mov r0,#4*12 84 b isr 85 .thumb_func 86irq13: 87 mov r0,#4*13 88 b isr 89 .thumb_func 90irq14: 91 mov r0,#4*14 92 b isr 93 .thumb_func 94irq15: 95 mov r0,#4*15 96 b isr 97 .thumb_func 98irq16: 99 mov r0,#4*16 100 b isr 101 .thumb_func 102irq17: 103 mov r0,#4*17 104 b isr 105 .thumb_func 106irq18: 107 mov r0,#4*18 108 b isr 109 .thumb_func 110irq19: 111 mov r0,#4*19 112 b isr 113 .thumb_func 114irq20: 115 mov r0,#4*20 116 b isr 117 .thumb_func 118irq21: 119 mov r0,#4*21 120 b isr 121 .thumb_func 122irq22: mov r0,#4*22 123 b isr 124 .thumb_func 125irq23: 126 mov r0,#4*23 127 b isr 128 .thumb_func 129irq24: 130 mov r0,#4*24 131 b isr 132 .thumb_func 133irq25: mov r0,#4*25 134 b isr 135 .thumb_func 136irq26: 137 mov r0,#4*26 138 b isr 139 .thumb_func 140irq27: 141 mov r0,#4*27 142 b isr 143 .thumb_func 144irq28: 145 mov r0,#4*28 146 b isr 147 .thumb_func 148irq29: 149 mov r0,#4*29 150 b isr 151 .thumb_func 152irq30: 153 mov r0,#4*30 154 b isr 155 .thumb_func 156irq31: 157 mov r0,#4*31 158 b isr 159 .thumb_func 160 161 162 163isr: 164 ldr r1,=isr_table 165 ldr r0,[r0, r1] 166 bx r0 167 168 169 170 171 .align 4 172isr_table: 173 .long USB_IRQHandler 174 .long IIC_IRQHandler 175 .long QSPI_IRQHandler 176 .long SPI0_IRQHandler 177 .long SPI1_IRQHandler 178 .long UART0_IRQHandler 179 .long UART1_IRQHandler 180 .long MEMCP_IRQHandler 181 .long RSA_IRQHandler 182 .long SCI0_IRQHandler 183 .long SCI1_IRQHandler 184 .long BT_IRQHandler 185 .long GPIO_IRQHandler 186 .long TIMER0_IRQHandler 187 .long TIMER1_IRQHandler 188 .long TIMER2_IRQHandler 189 .long TIMER3_IRQHandler 190 .long TIMER4_IRQHandler 191 .long TIMER5_IRQHandler 192 .long TIMER6_IRQHandler 193 .long TIMER7_IRQHandler 194 .long TIMER8_IRQHandler 195 .long SM4_IRQHandler 196 .long SEC_IRQHandler 197 .long MSR_IRQHandler 198 .long TRNG_IRQHandler 199 .long WDT_IRQHandler 200 201 .thumb 202 .thumb_func 203hardware_init: 204 ldr r1, =__exidx_start 205 ldr r2, =__data_start__ 206 ldr r3, =__data_end__ 207 208 sub r3, r2 209 ble .L_loop1_done 210 211 .L_loop1: 212 sub r3, #4 213 ldr r0, [r1,r3] 214 str r0, [r2,r3] 215 bgt .L_loop1 216 217 .L_loop1_done: 218 219 220 221 /* Single BSS section scheme. 222 * 223 * The BSS section is specified by following symbols 224 * _sbss: start of the BSS section. 225 * _ebss: end of the BSS section. 226 * 227 * Both addresses must be aligned to 4 bytes boundary. 228 */ 229 ldr r1, =__bss_start__ 230 ldr r2, =__bss_end__ 231 232 mov r0, #0 233 234 sub r2, r1 235 ble .L_loop3_done 236 237 .L_loop3: 238 sub r2, #4 239 str r0, [r1, r2] 240 bgt .L_loop3 241 .L_loop3_done: 242 ldr r0,=0x12345 243 ldr r3,=0x1111 244 bl main 245 246 247 .globl delay 248 .syntax unified 249delay: 250 subs r0,#1 251 bne delay 252 nop 253 bx lr 254 255 256 257 258 259 260 261.align 1 262.thumb_func 263.weak Default_Handler 264.type Default_Handler, %function 265 266Default_Handler: 267 b . 268 .size Default_Handler, . - Default_Handler 269 270/* Macro to define default handlers. Default handler 271 * will be weak symbol and just dead loops. They can be 272 * overwritten by other handlers */ 273 274 .macro def_irq_handler handler_name 275 .weak \handler_name 276 .set \handler_name, Default_Handler 277 .endm 278 279 def_irq_handler HARD_FAULT_IRQHandler 280 def_irq_handler SVC_IRQHandler 281 def_irq_handler PENDSV_IRQHandler 282 def_irq_handler SYSTICK_IRQHandler 283 def_irq_handler USB_IRQHandler 284 def_irq_handler IIC_IRQHandler 285 def_irq_handler QSPI_IRQHandler 286 def_irq_handler SPI0_IRQHandler 287 def_irq_handler SPI1_IRQHandler 288 def_irq_handler UART0_IRQHandler 289 def_irq_handler UART1_IRQHandler 290 def_irq_handler MEMCP_IRQHandler 291 def_irq_handler RSA_IRQHandler 292 def_irq_handler SCI0_IRQHandler 293 def_irq_handler SCI1_IRQHandler 294 def_irq_handler BT_IRQHandler 295 def_irq_handler GPIO_IRQHandler 296 def_irq_handler EXTI0_IRQHandler 297 def_irq_handler EXTI1_IRQHandler 298 def_irq_handler EXTI2_IRQHandler 299 def_irq_handler TIMER0_IRQHandler 300 def_irq_handler TIMER1_IRQHandler 301 def_irq_handler TIMER2_IRQHandler 302 def_irq_handler TIMER3_IRQHandler 303 def_irq_handler TIMER4_IRQHandler 304 def_irq_handler TIMER5_IRQHandler 305 def_irq_handler TIMER6_IRQHandler 306 def_irq_handler TIMER7_IRQHandler 307 def_irq_handler TIMER8_IRQHandler 308 def_irq_handler SM4_IRQHandler 309 def_irq_handler SEC_IRQHandler 310 def_irq_handler MSR_IRQHandler 311 def_irq_handler TRNG_IRQHandler 312 def_irq_handler WDT_IRQHandler 313 314 315 316 317 318 319