1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
| start.S
.text .global _start
_start: b reset ldr pc, und_addr ldr pc, swi_addr b halt b halt b halt ldr pc, irq_addr b halt
und_addr: .word do_und
swi_addr: .word do_swi
irq_addr: .word do_irq
do_und:
ldr sp, =0x34000000
stmdb sp!, {r0-r12, lr} mrs r0, cpsr ldr r1, =und_string bl printException ldmia sp!, {r0-r12, pc}^ und_string: .string "undefined instruction exception"
.align 4
do_swi:
ldr sp, =0x33e00000
stmdb sp!, {r0-r12, lr}
mov r4, lr mrs r0, cpsr ldr r1, =swi_string bl printException
sub r0, r4, #4 bl printSWIVal ldmia sp!, {r0-r12, pc}^ swi_string: .string "swi exception"
.align 4
do_irq:
ldr sp, =0x33d00000
sub lr, lr, #4 stmdb sp!, {r0-r12, lr} bl handle_irq_c ldmia sp!, {r0-r12, pc}^
reset: ldr r0, =0x53000000 ldr r1, =0 str r1, [r0]
ldr r0, =0x4C000000 ldr r1, =0xFFFFFFFF str r1, [r0]
ldr r0, =0x4C000014 ldr r1, =0x5 str r1, [r0]
mrc p15,0,r0,c1,c0,0 orr r0,r0,#0xc0000000 mcr p15,0,r0,c1,c0,0
ldr r0, =0x4C000004 ldr r1, =(92<<12)|(1<<4)|(1<<0) str r1, [r0]
mov r1, #0 ldr r0, [r1] str r1, [r1] ldr r2, [r1] cmp r1, r2 ldr sp, =0x40000000+4096 moveq sp, #4096 streq r0, [r1]
bl sdram_init
bl copy2sdram
bl clean_bss
mrs r0, cpsr bic r0, r0, #0xf bic r0, r0, #(1<<7) msr cpsr, r0
ldr sp, =0x33f00000
ldr pc, =sdram sdram: bl uart0_init
bl print1 und_code: .word 0xdeadc0de bl print2
swi 0x123
ldr pc, =main
halt: b halt
|