summaryrefslogtreecommitdiff
path: root/ecosflash/flash.S
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-02-28 08:25:46 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-02-28 08:25:46 +0000
commitd17e1cd93384d56886be7e67cf2b31e97118d811 (patch)
tree119eb57a4a078992cf5e79c4f59c410923e39adb /ecosflash/flash.S
parent0689e3dd6752f45f493eceb3edf040fbc7849846 (diff)
downloadopenocd+libswd-d17e1cd93384d56886be7e67cf2b31e97118d811.tar.gz
openocd+libswd-d17e1cd93384d56886be7e67cf2b31e97118d811.tar.bz2
openocd+libswd-d17e1cd93384d56886be7e67cf2b31e97118d811.tar.xz
openocd+libswd-d17e1cd93384d56886be7e67cf2b31e97118d811.zip
eCos flash driver.
git-svn-id: svn://svn.berlios.de/openocd/trunk@365 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'ecosflash/flash.S')
-rw-r--r--ecosflash/flash.S58
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: