From d17e1cd93384d56886be7e67cf2b31e97118d811 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 28 Feb 2008 08:25:46 +0000 Subject: eCos flash driver. git-svn-id: svn://svn.berlios.de/openocd/trunk@365 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- ecosflash/flash.S | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 ecosflash/flash.S (limited to 'ecosflash/flash.S') 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: -- cgit v1.2.3