startup.S 2.1 KB
Newer Older
1 2 3 4 5 6 7 8
/*
 * Copyright (c) 2020-2020, BLUETRUM Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "ab32vg1.h"

Z
ZHU Hao 已提交
9
.set _memcpy,    0x84044
10 11 12
.global _start
.section .reset, "ax"
_start:
G
greedyhao 已提交
13 14
    la      tp, _tp
    la      gp, _gp
G
greedyhao 已提交
15

16 17 18 19
    //load comm
    la      a0, __comm_vma
    la      a1, __comm_lma
    la      a2, __comm_size
Z
ZHU Hao 已提交
20
    call    _memcpy
21

G
greedyhao 已提交
22 23 24 25
    //load ram1
    la      a0, __ram1_vma
    la      a1, __ram1_lma
    la      a2, __ram1_size
Z
ZHU Hao 已提交
26
    call    _memcpy
27 28 29 30

    la      a0, __irq_stack_start           //Stack清成0x23
    li      a1, 0x23
    la      a2, __irq_stack_size
Z
ZHU Hao 已提交
31
    call    rt_memset
32 33 34 35 36 37 38 39 40
    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
Z
ZHU Hao 已提交
41
    call    rt_memset
42

G
greedyhao 已提交
43 44
    call    cache_init

45 46 47 48
    la      a0, __comm_vma
    sw      a0, PICADR(zero)

    call    entry
G
greedyhao 已提交
49 50
    la      ra, __exception
    jr      ra
51 52

.section .vector, "ax"
G
greedyhao 已提交
53 54 55 56 57 58
    .org    0x10
__exception:
    li      sp, 0x10600                     //出错后,不破坏错误点的堆栈数据
    jal     exception_isr
    1: j       1b
    mret
59 60 61 62

    .org    0x40
    jal x0, low_prio_irq

G
greedyhao 已提交
63 64 65 66
    .org    0x80
#define METHOD 1
#if METHOD == 1
    addi    sp, sp, -6*4
G
greedyhao 已提交
67
    # lw      a0, PICEN(zero)
G
greedyhao 已提交
68 69
    lw      a1, EPC(zero)
    lw      a2, EPICCON(zero)
G
greedyhao 已提交
70
    # sw      a0, 3*4(sp)
G
greedyhao 已提交
71 72
    sw      a1, 4*4(sp)
    sw      a2, 5*4(sp)
G
greedyhao 已提交
73 74 75 76
    # andi    a0, a0, 1
    # sw      a0, PICEN(zero)
    li      a2, 0
    sw      a2, EPICCON(zero)
G
greedyhao 已提交
77 78
    la      a0, 0f
    sw      a0, EPC(zero)
G
greedyhao 已提交
79
    j       isr_cache
G
greedyhao 已提交
80 81 82 83 84
0:
    sw      a0, 0(sp)
    sw      a1, 4(sp)
    sw      a2, 8(sp)

G
greedyhao 已提交
85
    # lw      a0, 3*4(sp)
G
greedyhao 已提交
86 87
    lw      a1, 4*4(sp)
    lw      a2, 5*4(sp)
G
greedyhao 已提交
88
    # sw      a0, PICEN(zero)
G
greedyhao 已提交
89 90 91 92 93 94 95 96 97 98
    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

G
greedyhao 已提交
99 100 101 102 103
    .org    0x1e0
    1: j       1b
    nop
    mret

104 105 106 107 108 109 110
    .global cpu_irq_comm
cpu_irq_comm:
    la      a5, __irq_stack
    mv      sp, a5
    j       cpu_irq_comm_do

    ret
G
greedyhao 已提交
111 112 113

    .global _tp
    .set    _tp,        0x84800