summaryrefslogtreecommitdiff
path: root/nuttx/arch/avr/src
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-06-15 18:34:21 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-06-15 18:34:21 +0000
commitcfed92be8b2d93060baa14d7527dfd4e20e02962 (patch)
tree0799443a1f0aee82beaac05307251eb4ec6a0059 /nuttx/arch/avr/src
parentf0c4282b44dcf92fcf0933df9d47367c03f41ece (diff)
downloadpx4-nuttx-cfed92be8b2d93060baa14d7527dfd4e20e02962.tar.gz
px4-nuttx-cfed92be8b2d93060baa14d7527dfd4e20e02962.tar.bz2
px4-nuttx-cfed92be8b2d93060baa14d7527dfd4e20e02962.zip
More corrections to AVR assembly macros
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3705 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/avr/src')
-rwxr-xr-xnuttx/arch/avr/src/at90usb/at90usb_exceptions.S4
-rwxr-xr-xnuttx/arch/avr/src/atmega/atmega_exceptions.S4
-rwxr-xr-xnuttx/arch/avr/src/avr/excptmacros.h64
3 files changed, 26 insertions, 46 deletions
diff --git a/nuttx/arch/avr/src/at90usb/at90usb_exceptions.S b/nuttx/arch/avr/src/at90usb/at90usb_exceptions.S
index 8fa931a04..90d9cbac3 100755
--- a/nuttx/arch/avr/src/at90usb/at90usb_exceptions.S
+++ b/nuttx/arch/avr/src/at90usb/at90usb_exceptions.S
@@ -129,8 +129,8 @@ excpt_common:
* the push operation post-decrements -- need to REVISIT this).
*/
- in r16, __SP_L__ /* Get the save structure pointer in a Call-saved register pair */
- in r17, __SP_H__ /* (Careful, push post-decrements) */
+ in r16, _SFR_IO_ADDR(SPL) /* Get the save structure pointer in a Call-saved register pair */
+ in r17, _SFR_IO_ADDR(SPH) /* (Careful, push post-decrements) */
movw r22, r16 /* Pass register save structure as the parameter 2 */
USE_INTSTACK rx, ry, rz /* Switch to the interrupt stack */
call up_doirq /* Dispatch the interrupt */
diff --git a/nuttx/arch/avr/src/atmega/atmega_exceptions.S b/nuttx/arch/avr/src/atmega/atmega_exceptions.S
index 0bba35cc3..766a81881 100755
--- a/nuttx/arch/avr/src/atmega/atmega_exceptions.S
+++ b/nuttx/arch/avr/src/atmega/atmega_exceptions.S
@@ -122,8 +122,8 @@ excpt_common:
* the push operation post-decrements -- need to REVISIT this).
*/
- in r16, __SP_L__ /* Get the save structure pointer in a Call-saved register pair */
- in r17, __SP_H__ /* (Careful, push post-decrements) */
+ in r16, _SFR_IO_ADDR(SPL) /* Get the save structure pointer in a Call-saved register pair */
+ in r17, _SFR_IO_ADDR(SPH) /* (Careful, push post-decrements) */
movw r22, r16 /* Pass register save structure as the parameter 2 */
USE_INTSTACK rx, ry, rz /* Switch to the interrupt stack */
call up_doirq /* Dispatch the interrupt */
diff --git a/nuttx/arch/avr/src/avr/excptmacros.h b/nuttx/arch/avr/src/avr/excptmacros.h
index e7be1569b..140d3d467 100755
--- a/nuttx/arch/avr/src/avr/excptmacros.h
+++ b/nuttx/arch/avr/src/avr/excptmacros.h
@@ -57,26 +57,6 @@
* Pre-processor Definitions
********************************************************************************************/
-#ifndef __SREG__
-# define __SREG__ 0x3f
-#endif
-
-#ifndef __SP_H__
-# define __SP_H__ 0x3e
-#endif
-
-#ifndef __SP_L__
-# define __SP_L__ 0x3d
-#endif
-
-#ifndef __tmp_reg__
-# define __tmp_reg__ r0
-#endif
-
-#ifndef __zero_reg__
-# define __zero_reg__ r1
-#endif
-
/********************************************************************************************
* Global Symbols
********************************************************************************************/
@@ -97,8 +77,8 @@
* ...
* my_exception:
* EXCPT_PROLOGUE - Save registers on stack
- * in r22, __SP_L__ - Pass register save structure as the parameter 2
- * in r23, __SP_H__ - (Careful, push post-decrements)
+ * in r22, _SFR_IO_ADDR(SPL) - Pass register save structure as the parameter 2
+ * in r23, _SFR_IO_ADDR(SPH) - (Careful, push post-decrements)
* USE_INTSTACK rx, ry, rz - Switch to the interrupt stack
* call handler - Handle the exception IN=old regs OUT=new regs
* RESTORE_STACK rx, ry - Undo the operations of USE_INTSTACK
@@ -173,8 +153,8 @@
/* Save the status register on the stack */
- in r0, __SREG__ /* Save the status register */
- cli /* Disable interrupts */
+ in r0, _SFR_IO_ADDR(SREG) /* Save the status register */
+ cli /* Disable interrupts */
push r0
/* Save R1 -- the zero register (which may not be zero). R1 must be zero for our purposes */
@@ -232,11 +212,11 @@
* it was on entry into this macro. We'll have to subtract to get that value.
*/
- in r26, __SP_L__
- in r27, __SP_H__
+ in r26, _SFR_IO_ADDR(SPL)
+ in r27, _SFR_IO_ADDR(SPH)
adiw r26, XCPTCONTEXT_REGS
- push r26
+ push r26 /* SPL then SPH */
push r27
.endm
@@ -261,8 +241,8 @@
/* We don't need to restore the stack pointer */
- pop r27
- pop r26
+ pop r27 /* Discard SPH */
+ pop r26 /* Discard SPL */
/* Restore r26-r27 */
@@ -317,7 +297,7 @@
/* Restore the status register (probably enabling interrupts) */
pop r0 /* Restore the status register */
- out __SREG__, r0
+ out _SFR_IO_ADDR(SREG), r0
/* Finally, restore r0 and r24 - the scratch and IRQ number registers */
@@ -345,11 +325,11 @@
.macro USER_SAVE
- /* Save the current stack pointer. */
+ /* Save the current stack pointer (SPH then SPL). */
- in r24, __SP_L__
- st x+, r24
- in r25, __SP_H__
+ in r25, _SFR_IO_ADDR(SPH)
+ st x+, r25
+ in r24, _SFR_IO_ADDR(SPL)
st x+, r24
/* Skip over r26-r27 and r30-r31 - Call-used, "volatile" registers */
@@ -391,7 +371,7 @@
/* Save the status register (probably not necessary since interrupts are disabled) */
- in r0, __SREG__
+ in r0, _SFR_IO_ADDR(SREG)
st x+, r0
/* Skip R0 and r24 - These are scratch register and Call-used, "volatile" registers */
@@ -428,10 +408,10 @@
/* Fetch the new stack pointer */
- ld r24, x+ /* Fetch stack pointer (post-incrementing) */
- out __SP_L__, r24
- ld r25, x+
- out __SP_H__, r25
+ ld r25, x+ /* Fetch stack pointer (post-incrementing) */
+ out _SFR_IO_ADDR(SPH), r25 /* (SPH then SPL) */
+ ld r24, x+
+ out _SFR_IO_ADDR(SPL), r24
/* Fetch the return address and save it at the bottom of the new stack so
* that we can iret to switch contexts.
@@ -439,9 +419,9 @@
movw r28, r26 /* Get a pointer to the PCH/PCL storage location */
adiw r28, REG_PCH
- ld r25, y+ /* Load PCH and PCL */
+ ld r25, y+ /* Load PCH (r25) and PCL (r24) */
ld r24, y+
- push r24 /* Push PCH and PCL on the stack */
+ push r24 /* Push PCH and PCL on the stack (PCL then PCH) */
push r25
/* Then get value of X [r26:r27]. Save X on the new stack where we can
@@ -501,7 +481,7 @@
/* Restore the status register (probably enabling interrupts) */
ld r0, x+
- out __SREG__, r0
+ out _SFR_IO_ADDR(SREG), r0
/* Restore r0 and r241 - The scratch and IRQ number registers */