diff options
author | laforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2006-09-13 16:02:52 +0000 |
---|---|---|
committer | laforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2006-09-13 16:02:52 +0000 |
commit | a97e460bea62375c9c870fb3e3650fbff20c5ad1 (patch) | |
tree | 64c0de524a604015a367aa979c777325765fbfa3 /firmware/src/start/Cstartup_app.S | |
parent | 8bd3d51b23e328e91c209dbebe8cfe002b0b0042 (diff) |
Completely separate DFU from application program, we now have a real bootloader.
DFU occupies 0x00100000 - 0x00100fff in flash, application starts at 0x00101000.
DFU also occupies the first couple of bytes in SRAM, application starts at 0x00200024.
In order to produce a samba-flashable image, first build dfu.bin by typing
'make -f Makefule.dfu', succeeded by 'make TARGET=... DEBUG=... BOARD=...' and then
concatenating the two files together, e.g. cat dfu.bin main_reqa.bin > flash.bin.
Actual flashing via DFU is still not operational, but will be implemented next
git-svn-id: https://svn.openpcd.org:2342/trunk@194 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
Diffstat (limited to 'firmware/src/start/Cstartup_app.S')
-rw-r--r-- | firmware/src/start/Cstartup_app.S | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/firmware/src/start/Cstartup_app.S b/firmware/src/start/Cstartup_app.S new file mode 100644 index 0000000..4a2187a --- /dev/null +++ b/firmware/src/start/Cstartup_app.S @@ -0,0 +1,81 @@ +/* Cstartup header for the application to be started by at91dfu + * (C) 2006 by Harald Welte <hwelte@hmw-consulting.de> */ + +//#define DEBUG_LL + +#ifdef DEBUG_LL +/* Debugging macros for switching on/off LED1 (green) */ +#define PIOA_PER 0xFFFFF400 +#define PIOA_OER 0xFFFFF410 +#define PIOA_SODR 0xFFFFF430 +#define PIOA_CODR 0xFFFFF434 +#define LED1 25 /* this only works on OpenPICC, not Olimex */ + .macro led1on + ldr r2, =PIOA_CODR + mov r1, #(1 << LED1) + str r1, [r2] + .endm + .macro led1off + ldr r2, =PIOA_SODR + mov r1, #(1 << LED1) + str r1, [r2] + .endm + .macro ledinit + ldr r2, =PIOA_PER + mov r1, #(1 << LED1) + str r1, [r2] + ldr r2, =PIOA_OER + str r1, [r2] + led1off + .endm +#else + .macro ledinit + .endm + .macro led1on + .endm + .macro led1off + .endm +#endif + + .global _startup + .func _startup +_startup: + /* Relocate .data section (copy from Flash to RAM) */ + ldr r1, =_etext + ldr r2, =_data + ldr r3, =_edata +loop_r: cmp r2, r3 + ldrlo r0, [r1], #4 + strlo r0, [r2], #4 + blo loop_r + + /* Clear .bss section (Zero init) */ + mov r0, #0 + ldr r1, =__bss_start__ + ldr r2, =__bss_end__ +loop_z: cmp r1, r2 + strlo r0, [r1], #4 + blo loop_z + + led1on + + /* prepare C function call to main */ + mov r0, #0 /* argc = 0 */ + ldr lr, =exit + ldr r10, =main + + bx r10 + + .size _startup, . - _startup + .endfunc + +/* "exit" dummy to avoid sbrk write read etc. needed by the newlib default "exit" */ + .global exit + .func exit +exit: + b . + .size exit, . - exit + .endfunc + + .end + |