nt9856x/rtos/code/application/source/cardv/SrcCode/Startup/clock_api.S
2023-03-28 15:07:53 +08:00

201 lines
3.0 KiB
ArmAsm
Executable File

.org 0
.text
.globl _sram_vector_table
.extern Reset
.extern UndefinedHandler
.extern SWIHandler
.extern PrefetchAbortHandler
.extern DataAbortHandler
.extern ReservedHandler
.extern IRQHandler
.extern FIQHandler
.extern dispatch_interrupt
.section .vtrs, "ax"
_sram_vector_table:
/**
* vector table
* ===========================
* 00 - Reset
* 04 - Undefined instructions
* 08 - SWI instructions
* 0C - prefetch abort
* 10 - Data abort
* 14 - Reserved
* 18 - IRQ interrupts
* 1C - FIQ interrupts
*/
ldr pc, _vectorReset
ldr pc, _vectorUndefined
ldr pc, _vectorSWI
ldr pc, _vectorPrefetchAbort
ldr pc, _vectorDataAbort
ldr pc, _vectorReserved
ldr pc, _vectorIRQ
ldr pc, _vectorFIQ
_vectorReset:
.word Reset
_vectorUndefined:
.word UndefinedHandler
_vectorSWI:
.word SWIHandler
_vectorPrefetchAbort:
.word PrefetchAbortHandler
_vectorDataAbort:
.word DataAbortHandler
_vectorReserved:
.word ReservedHandler
_vectorIRQ:
.word IRQHandler
_vectorFIQ:
.word FIQHandler
Reset:
ldr r0, =0xF0290000
ldr r1, ='R'
str r1, [r0]
ldr r1, ='S'
str r1, [r0]
ldr r1, ='T'
str r1, [r0]
reset_block:
b reset_block
nop
UndefinedHandler:
ldr r0, =0xf0290000
ldr r1, ='U'
str r1, [r0]
ldr r1, ='D'
str r1, [r0]
ldr r1, ='F'
str r1, [r0]
#udf_block:
# b udf_block
subs pc, lr, #4
nop
SWIHandler:
ldr r0, =0xf0290000
ldr r1, ='S'
str r1, [r0]
ldr r1, ='W'
str r1, [r0]
ldr r1, ='I'
str r1, [r0]
swi_block:
b swi_block
nop
PrefetchAbortHandler:
ldr r0, =0xf0290000
ldr r1, ='P'
str r1, [r0]
ldr r1, ='R'
str r1, [r0]
ldr r1, ='F'
str r1, [r0]
#pref_block:
# b pref_block
subs pc, lr, #4
nop
DataAbortHandler:
ldr r0, =0xf0290000
ldr r1, ='A'
str r1, [r0]
ldr r1, ='B'
str r1, [r0]
ldr r1, ='T'
str r1, [r0]
ldr r1, ='T'
str r1, [r0]
#abort_block:
# b abort_block
subs pc, lr, #4
nop
ReservedHandler:
ldr r0, =0xf0290000
ldr r1, ='R'
str r1, [r0]
ldr r1, ='S'
str r1, [r0]
ldr r1, ='V'
str r1, [r0]
rsv_block:
b rsv_block
nop
IRQHandler:
ldr r0, =0xf0290000
ldr r1, =0x24
str r1, [r0]
sub sp, sp, #72
stmia sp, {r0 - r12}
add r8, sp, #60
str r1, [r0]
stmdb r8, {sp, lr}^
str r1, [r0]
str lr, [r8, #0]
str r1, [r0]
mrs r6, spsr
str r1, [r0]
str r6, [r8, #4]
str r1, [r0]
str r0, [r8, #8]
str r1, [r0]
ldr r0, =0xf0290000
ldr r1, ='I'
str r1, [r0]
ldr r1, ='R'
str r1, [r0]
ldr r1, ='Q'
str r1, [r0]
mov r0, sp
bl dispatch_interrupt
# mcr p15, 0, sp, c7, c6, 1
ldmia sp, {r0 - lr}^
mov r0, r0
ldr lr, [sp, #60]
add sp, sp, #72
subs pc, lr, #4
nop
FIQHandler:
sub sp, sp, #52
stmia sp, {r0 - r7}
add r8, sp, #40
stmdb r8, {sp, lr}^
str lr, [r8, #0]
mrs r6, spsr
str r6, [r8, #4]
str r0, [r8, #8]
mov r0, sp
bl dispatch_interrupt
ldr r0, =0xf0290000
ldr r1, ='F'
str r1, [r0]
ldr r1, ='I'
str r1, [r0]
ldr r1, ='Q'
str r1, [r0]
ldmia sp, {r0 - r7}^
ldr lr, [sp, #40]
add sp, sp, #52
subs pc, lr, #4
nop
.end