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 + | 
