1# define LREG lw 2# define SREG sw 3# define REGBYTES 4 4 5// <<< Use Configuration Wizard in Context Menu >>> 6 7#define MSTATUS_PRV1 0x1880 8 9.global __initial_sp 10 11// <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:4> 12// <i> Config the stack size for the application 13#define StackSize 0x400 14 15 16.section .app_stack,"aw",@nobits 17.align 2 18Stack_Mem: 19.space StackSize 20__initial_sp: 21 22 23// <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> 24// <i> Config the heap size for the application 25#define HeapSize 0x200 26 27.global __heap_start 28.global __heap_end 29.section .bss,"aw",@nobits 30.align 2 31Heap_Mem: 32__heap_start: 33.space HeapSize 34__heap_end: 35 36 37.section .vectors, "aw", @progbits 38 .align 6 39 .globl __Vectors 40 .type __Vectors, @object 41__Vectors: //#totally 0~63 entries 42 .rept 3 // 43 .long 0 // 44 .endr // 45 .long SW_handler // ##3 46 .rept 3 // 47 .long 0 // 48 .endr // 49 .long CLINT_Handler // ##7 50 .rept 3 // 51 .long 0 // 52 .endr // 53 .long MACHINE_MODE_EXTERNAL_Handler // ##11 no used 54 .rept 4 // ##12~15 reserved 55 .long 0 // 56 .endr // 57 58/* External interrupts */ 59//##------------------------------------------------------------ 60 .long WWDT_Handler // ##16 0 61 .long IWDT_Handler // ##17 1 62 .long LVD_Handler // ##18 2 63 .long CSU_Handler // ##19 3 64 .long CMU_Handler // ##20 4 65 .long EXTI0_3_Handler // ##21 5 66 .long EXTI4_7_Handler // ##22 6 67 .long EXTI8_11_Handler // ##23 7 68 .long EXTI12_15_Handler // ##24 8 69 .long DMA_Handler // ##25 9 70 .long 0 // ##26 10 71 .long USB_Handler // ##27 11 72 .long ADC_Handler // ##28 12 73 .long AD16C4T_UP_TRIG_COM_Handler // ##29 13 74 .long AD16C4T_CC_Handler // ##30 14 75 .long BSTIM0_Handler // ##31 15 76 .long 0 // ## 16 77 .long GPTIMB0_Handler // ##33 17 78 .long GPTIMB1_Handler // ##34 18 79 .long GPTIMB2_Handler // ##35 19 80 .long 0 // ## 20 81 .long AD16C4T_Handler // ##37 21 82 .long 0 // ## 22 83 .long I2C0_Handler // ##39 23 84 .long I2C1_Handler // ##40 24 85 .long SPI0_I2S0_Handler // ##41 25 86 .long SPI1_I2S1_Handler // ##42 26 87 .long EUART0_Handler // ##43 27 88 .long EUART1_Handler // ##44 28 89 .long CUART0_Handler // ##45 29 90 .long CUART1_Handler // ##46 30 91 .long CUART2_Handler // ##47 31 92//##--------------------------------------------------- 93 94/* 95 * For importing variable or functions from other c or assemble files. 96 */ 97.global __main 98.global handle_trap 99 100 .section ".text.init" 101 .globl Reset_Handler 102 .type Reset_Handler, %function 103Reset_Handler: 104 105.option push 106.option norelax 107 la gp, __global_pointer$ 108.option pop 109 110 la a0, Default_Handler 111 ori a0, a0, 3 112 csrw mtvec, a0 113 114 la a0, __Vectors 115 csrw mtvt, a0 116 117 la sp, g_top_irqstack 118 119 /* Load data section */ 120 la a0, __erodata 121 la a1, __data_start__ 122 la a2, __data_end__ 123 bgeu a1, a2, 2f 1241: 125 lw t0, (a0) 126 sw t0, (a1) 127 addi a0, a0, 4 128 addi a1, a1, 4 129 bltu a1, a2, 1b 1302: 131 132 /* Clear bss section */ 133 la a0, __bss_start__ 134 la a1, __bss_end__ 135 bgeu a0, a1, 2f 1361: 137 sw zero, (a0) 138 addi a0, a0, 4 139 bltu a0, a1, 1b 1402: 141 jal entry 142 143 .size Reset_Handler, . - Reset_Handler 144 145 .align 6 146 .weak Default_Handler 147 .global Default_Handler 148 .type Default_Handler, %function 149Default_Handler: 150 addi sp, sp, -272 151 152 SREG x1, 1*REGBYTES(sp) 153 SREG x2, 2*REGBYTES(sp) 154 SREG x3, 3*REGBYTES(sp) 155 SREG x4, 4*REGBYTES(sp) 156 SREG x5, 5*REGBYTES(sp) 157 SREG x6, 6*REGBYTES(sp) 158 SREG x7, 7*REGBYTES(sp) 159 SREG x8, 8*REGBYTES(sp) 160 SREG x9, 9*REGBYTES(sp) 161 SREG x10, 10*REGBYTES(sp) 162 SREG x11, 11*REGBYTES(sp) 163 SREG x12, 12*REGBYTES(sp) 164 SREG x13, 13*REGBYTES(sp) 165 SREG x14, 14*REGBYTES(sp) 166 SREG x15, 15*REGBYTES(sp) 167 168 csrr a0, mcause 169 csrr a1, mepc 170 mv a2, sp 171 jal handle_trap 172 csrw mepc, a0 173 174 # Remain in M-mode after eret 175 li t0, MSTATUS_PRV1 176 csrs mstatus, t0 177 178 LREG x1, 1*REGBYTES(sp) 179 LREG x2, 2*REGBYTES(sp) 180 LREG x3, 3*REGBYTES(sp) 181 LREG x4, 4*REGBYTES(sp) 182 LREG x5, 5*REGBYTES(sp) 183 LREG x6, 6*REGBYTES(sp) 184 LREG x7, 7*REGBYTES(sp) 185 LREG x8, 8*REGBYTES(sp) 186 LREG x9, 9*REGBYTES(sp) 187 LREG x10, 10*REGBYTES(sp) 188 LREG x11, 11*REGBYTES(sp) 189 LREG x12, 12*REGBYTES(sp) 190 LREG x13, 13*REGBYTES(sp) 191 LREG x14, 14*REGBYTES(sp) 192 LREG x15, 15*REGBYTES(sp) 193 194 addi sp, sp, 272 195 mret 196 197 .weak SW_handler 198 .globl SW_handler 199 .type SW_handler, %function 200SW_handler: 201 202 .weak CLINT_Handler 203 .globl CLINT_Handler 204 .type CLINT_Handler, %function 205CLINT_Handler: 206 207 .weak MACHINE_MODE_EXTERNAL_Handler 208 .globl MACHINE_MODE_EXTERNAL_Handler 209 .type MACHINE_MODE_EXTERNAL_Handler, %function 210MACHINE_MODE_EXTERNAL_Handler: 211 212 .weak WWDT_Handler 213 .globl WWDT_Handler 214 .type WWDT_Handler, %function 215WWDT_Handler: 216 217 .weak IWDT_Handler 218 .globl IWDT_Handler 219 .type IWDT_Handler, %function 220IWDT_Handler: 221 222 .weak LVD_Handler 223 .globl LVD_Handler 224 .type LVD_Handler, %function 225LVD_Handler: 226 227 .weak CSU_Handler 228 .globl CSU_Handler 229 .type CSU_Handler, %function 230CSU_Handler: 231 232 .weak CMU_Handler 233 .globl CMU_Handler 234 .type CMU_Handler, %function 235CMU_Handler: 236 237 .weak EXTI0_3_Handler 238 .globl EXTI0_3_Handler 239 .type EXTI0_3_Handler, %function 240EXTI0_3_Handler: 241 242 .weak EXTI4_7_Handler 243 .globl EXTI4_7_Handler 244 .type EXTI4_7_Handler, %function 245EXTI4_7_Handler: 246 247 .weak EXTI8_11_Handler 248 .globl EXTI8_11_Handler 249 .type EXTI8_11_Handler, %function 250EXTI8_11_Handler: 251 252 .weak EXTI12_15_Handler 253 .globl EXTI12_15_Handler 254 .type EXTI12_15_Handler, %function 255EXTI12_15_Handler: 256 257 .weak DMA_Handler 258 .globl DMA_Handler 259 .type DMA_Handler, %function 260DMA_Handler: 261 262 .weak USB_Handler 263 .globl USB_Handler 264 .type USB_Handler, %function 265USB_Handler: 266 267 .weak ADC_Handler 268 .globl ADC_Handler 269 .type ADC_Handler, %function 270ADC_Handler: 271 272 .weak AD16C4T_UP_TRIG_COM_Handler 273 .globl AD16C4T_UP_TRIG_COM_Handler 274 .type AD16C4T_UP_TRIG_COM_Handler, %function 275AD16C4T_UP_TRIG_COM_Handler: 276 277 .weak AD16C4T_CC_Handler 278 .globl AD16C4T_CC_Handler 279 .type AD16C4T_CC_Handler, %function 280AD16C4T_CC_Handler: 281 282 .weak BSTIM0_Handler 283 .globl BSTIM0_Handler 284 .type BSTIM0_Handler, %function 285BSTIM0_Handler: 286 287 .weak GPTIMB0_Handler 288 .globl GPTIMB0_Handler 289 .type GPTIMB0_Handler, %function 290GPTIMB0_Handler: 291 292 .weak GPTIMB1_Handler 293 .globl GPTIMB1_Handler 294 .type GPTIMB1_Handler, %function 295GPTIMB1_Handler: 296 297 .weak GPTIMB2_Handler 298 .globl GPTIMB2_Handler 299 .type GPTIMB2_Handler, %function 300GPTIMB2_Handler: 301 302 .weak AD16C4T_Handler 303 .globl AD16C4T_Handler 304 .type AD16C4T_Handler, %function 305AD16C4T_Handler: 306 307 .weak I2C0_Handler 308 .globl I2C0_Handler 309 .type I2C0_Handler, %function 310I2C0_Handler: 311 312 .weak I2C1_Handler 313 .globl I2C1_Handler 314 .type I2C1_Handler, %function 315I2C1_Handler: 316 317 .weak SPI0_I2S0_Handler 318 .globl SPI0_I2S0_Handler 319 .type SPI0_I2S0_Handler, %function 320SPI0_I2S0_Handler: 321 322 .weak SPI1_I2S1_Handler 323 .globl SPI1_I2S1_Handler 324 .type SPI1_I2S1_Handler, %function 325SPI1_I2S1_Handler: 326 327 .weak EUART0_Handler 328 .globl EUART0_Handler 329 .type EUART0_Handler, %function 330EUART0_Handler: 331 332 .weak EUART1_Handler 333 .globl EUART1_Handler 334 .type EUART1_Handler, %function 335EUART1_Handler: 336 337 .weak CUART0_Handler 338 .globl CUART0_Handler 339 .type CUART0_Handler, %function 340CUART0_Handler: 341 342 .weak CUART1_Handler 343 .globl CUART1_Handler 344 .type CUART1_Handler, %function 345CUART1_Handler: 346 347 .weak CUART2_Handler 348 .globl CUART2_Handler 349 .type CUART2_Handler, %function 350CUART2_Handler: 351 352__exit: 353 j __exit 354 355//##--------------------------------------------------- 356.section .bss 357 358 .align 3 359 .global g_base_irqstack 360 .global g_top_irqstack 361g_base_irqstack: 362 .space StackSize //CONFIG_ARCH_INTERRUPTSTACK 363g_top_irqstack: 364