From f0c4282b44dcf92fcf0933df9d47367c03f41ece Mon Sep 17 00:00:00 2001 From: patacongo Date: Wed, 15 Jun 2011 17:23:48 +0000 Subject: Fix some AVR context save errors git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3704 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/arch/avr/src/atmega/atmega_lowconsole.c | 2 +- nuttx/arch/avr/src/avr/excptmacros.h | 28 ++++++++++++++------------- 2 files changed, 16 insertions(+), 14 deletions(-) (limited to 'nuttx/arch') diff --git a/nuttx/arch/avr/src/atmega/atmega_lowconsole.c b/nuttx/arch/avr/src/atmega/atmega_lowconsole.c index c1fda6244..4e52f4aba 100644 --- a/nuttx/arch/avr/src/atmega/atmega_lowconsole.c +++ b/nuttx/arch/avr/src/atmega/atmega_lowconsole.c @@ -377,7 +377,7 @@ void usart1_configure(void) #elif CONFIG_USART1_BITS == 8 ucsr1c |= ((1 << UCSZ10) | (1 << UCSZ11)); #elif CONFIG_USART1_BITS == 9 - ucsr1c |= (U(1 << CSZ10) | (1 << UCSZ11)); + ucsr1c |= ((1 << CSZ10) | (1 << UCSZ11)); ucsr1b |= (1 << UCSZ12); #else # error "Unsupported word size" diff --git a/nuttx/arch/avr/src/avr/excptmacros.h b/nuttx/arch/avr/src/avr/excptmacros.h index 38aacdb96..e7be1569b 100755 --- a/nuttx/arch/avr/src/avr/excptmacros.h +++ b/nuttx/arch/avr/src/avr/excptmacros.h @@ -150,34 +150,36 @@ * handler. * * On Entry: - * r0 - has already been pushed onto the stack and now holds the IRQ number + * r24 - has already been pushed onto the stack and now holds the IRQ number * sp - Points to the top of the stack * Only the stack is available for storage * * PCL * PCH - * R0 + * R24 * --- <- SP * * At completion: - * Register state is saved on the stack; All registers are available for usage except sp. + * Register state is saved on the stack; All registers are available for usage except sp and + * r24 which still contains the IRQ number as set by the HANDLER macro. * ********************************************************************************************/ .macro EXCPT_PROLOGUE - /* Save R1 - The zero register (but might not be zero) */ + /* Save R0 -- the scratch register */ - push r1 + push r0 /* Save the status register on the stack */ - in r1, __SREG__ /* Save the status register */ + in r0, __SREG__ /* Save the status register */ cli /* Disable interrupts */ - push r1 + push r0 - /* R1 must be zero for our purposes */ + /* Save R1 -- the zero register (which may not be zero). R1 must be zero for our purposes */ + push r1 clr r1 /* Save r2-r17 - Call-saved, "static" registers */ @@ -230,12 +232,12 @@ * it was on entry into this macro. We'll have to subtract to get that value. */ - in r24, __SP_L__ - in r25, __SP_H__ - adiw r24, XCPTCONTEXT_REGS + in r26, __SP_L__ + in r27, __SP_H__ + adiw r26, XCPTCONTEXT_REGS - push r24 - push r25 + push r26 + push r27 .endm /******************************************************************************************** -- cgit v1.2.3