diff options
Diffstat (limited to 'ecosflash/flash.S')
-rw-r--r-- | ecosflash/flash.S | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/ecosflash/flash.S b/ecosflash/flash.S new file mode 100644 index 00000000..dc30d163 --- /dev/null +++ b/ecosflash/flash.S @@ -0,0 +1,58 @@ +/* + 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: |