59 lines
1.2 KiB
ArmAsm
59 lines
1.2 KiB
ArmAsm
/*
|
|
Jump table for flash driver
|
|
|
|
Registers in ARM callling convention is to place args in registers
|
|
starting at r0.
|
|
|
|
So for:
|
|
|
|
void foo(int a, int b, int c).
|
|
|
|
a=r0
|
|
b=r1
|
|
c=r2
|
|
|
|
|
|
*/
|
|
.global _stack_base
|
|
.global _stack_start
|
|
.global _workarea
|
|
.global _start
|
|
.global _start_bss_clear
|
|
_start:
|
|
// offset=0
|
|
// int erase(void *address, int len)
|
|
ldr sp,=_stack_start
|
|
bl erase
|
|
nop // Stop CPU here using hw breakpoint
|
|
|
|
// offset=0xc
|
|
// int program(void *buffer, void *address, int len)
|
|
ldr sp,=_stack_start
|
|
bl program
|
|
nop // Stop CPU here using hw breakpoint
|
|
|
|
// offset=0x18
|
|
ldr r0,=_workarea
|
|
nop // Stop CPU here using hw breakpoint
|
|
|
|
// offset=0x20
|
|
// int init() - returns error message if the flash chip can't be detected
|
|
ldr sp,=_stack_start
|
|
bl init
|
|
nop // Stop CPU here using hw breakpoint
|
|
|
|
.section ".bss"
|
|
.balign 4
|
|
_stack_base:
|
|
.rept 4096
|
|
.byte 0
|
|
.endr
|
|
_stack_start:
|
|
.balign 4
|
|
_workarea:
|
|
.rept 8192
|
|
.byte 0
|
|
.endr
|
|
// NB!!! we clear bss while the stack is in use, so we start BSS clearing here !!! :-)
|
|
_start_bss_clear:
|