|
- /*
- 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:
|