123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /*
- * Copyright (c) 2020-2020, BLUETRUM Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #include "ab32vg1.h"
- .global _start
- .section .reset, "ax"
- _start:
- la tp, _tp
- la gp, _gp
- //load comm
- la a0, __comm_vma
- la a1, __comm_lma
- la a2, __comm_size
- call _memcpy
- //load ram1
- la a0, __ram1_vma
- la a1, __ram1_lma
- la a2, __ram1_size
- call _memcpy
- la a0, __irq_stack_start //Stack清成0x23
- li a1, 0x23
- la a2, __irq_stack_size
- call rt_memset
- la ra, __irq_stack
- lui a5, 0x1
- sw zero, -1920(a5)
- sw zero, -1916(a5)
- //clear bss
- la a0, __bss_start
- li a1, 0
- la a2, __bss_size
- call rt_memset
- call cache_init
- la a0, __comm_vma
- sw a0, PICADR(zero)
- call entry
- la ra, __exception
- jr ra
- .section .vector, "ax"
- .org 0x10
- __exception:
- li sp, 0x10600 //出错后,不破坏错误点的堆栈数据
- jal exception_isr
- 1: j 1b
- mret
- .org 0x40
- jal x0, low_prio_irq
- .org 0x80
- #define METHOD 1
- #if METHOD == 1
- addi sp, sp, -6*4
- # lw a0, PICEN(zero)
- lw a1, EPC(zero)
- lw a2, EPICCON(zero)
- # sw a0, 3*4(sp)
- sw a1, 4*4(sp)
- sw a2, 5*4(sp)
- # andi a0, a0, 1
- # sw a0, PICEN(zero)
- li a2, 0
- sw a2, EPICCON(zero)
- la a0, 0f
- sw a0, EPC(zero)
- j isr_cache
- 0:
- sw a0, 0(sp)
- sw a1, 4(sp)
- sw a2, 8(sp)
- # lw a0, 3*4(sp)
- lw a1, 4*4(sp)
- lw a2, 5*4(sp)
- # sw a0, PICEN(zero)
- sw a1, EPC(zero)
- sw a2, EPICCON(zero)
- lw a0, 0(sp)
- lw a1, 4(sp)
- lw a2, 8(sp)
- addi sp, sp, 6*4
- mret
- #endif
- .org 0x1e0
- 1: j 1b
- nop
- mret
- .global cpu_irq_comm
- cpu_irq_comm:
- la a5, __irq_stack
- mv sp, a5
- j cpu_irq_comm_do
- ret
- .global _tp
- .set _tp, 0x84800
- .set _memcpy, 0x84044
|