From b2c3a559c7701728526026fcd64e85d9004715f2 Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 7 Jun 2011 23:37:59 +0000 Subject: First AVR compile git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3681 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/arch/avr/src/at90usb/at90usb_head.S | 32 ++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'nuttx/arch/avr/src/at90usb/at90usb_head.S') diff --git a/nuttx/arch/avr/src/at90usb/at90usb_head.S b/nuttx/arch/avr/src/at90usb/at90usb_head.S index 8c9c18bd2..7a1d71e9f 100755 --- a/nuttx/arch/avr/src/at90usb/at90usb_head.S +++ b/nuttx/arch/avr/src/at90usb/at90usb_head.S @@ -46,7 +46,20 @@ * Pre-processor definitions ****************************************************************************/ -#define STACKBASE (_ebss+CONFIG_IDLETHREAD_STACKSIZE-4) +/* Stack is allocated just after .bss and before the heap */ + +#define STACKBASE (_ebss+CONFIG_IDLETHREAD_STACKSIZE-1) + +/* The RAMPZ register is only available for CPUs with more than 64Kb of FLASH. + * Only the AT90USB646, 647, 1286, and 1287 are supported by this file. + * + * - Support for the EPLMX instructions is assumed if RAMPZ is present + * - If RAMPZ is not present, support for LPMX is assumed + */ + +#if defined(CONFIG_ARCH_CHIP_AT90USB1286) || defined(CONFIG_ARCH_CHIP_AT90USB1286) +# define HAVE_RAMPZ 1 +#endif /**************************************************************************** * External Symbols @@ -180,6 +193,7 @@ __start: /* Copy initial global data values from FLASH into RAM */ +#ifdef HAVE_RAMPZ ldi r17, hi8(_edata) ldi r26, lo8(_sdata) ldi r27, hi8(_sdata) @@ -197,6 +211,22 @@ __start: cpi r26, lo8(_edata) cpc r27, r17 brne .Lcopyloop +#else + ldi r17, hi8(_edata) + ldi r26, lo8(_sdata) + ldi r27, hi8(_sdata) + ldi r30, lo8(_eronly) + ldi r31, hi8(_eronly) + rjmp .Lcopystart + +.Lcopyloop: + lpm r0, Z+ + st X+, r0 +.Lcopystart: + cpi r26, lo8(_edata) + cpc r27, r17 + brne .Lcopyloop +#endif /* Clear uninitialized data */ -- cgit v1.2.3