Index: ChangeLog
===================================================================
RCS file: /sources/avr-libc/avr-libc/ChangeLog,v
retrieving revision 1.623.2.151
diff -u -p -r1.623.2.151 ChangeLog
--- ChangeLog 29 May 2007 19:23:44 -0000 1.623.2.151
+++ ChangeLog 6 Jun 2007 21:43:46 -0000
@@ -1,3 +1,16 @@
+2007-06-06 Eric B. Weddington
+
+ * include/avr/common.h: New file.
+ * include/avr/io.h: Move definitions to common.h. Fix documentation.
+ * common/macros.inc: Use new common register definitions.
+ * crt1/gcrt1.S: Use new common register definitions.
+ * include/avr/iomxx0_1.h: Define EIND as normal without conditional
+ compilation.
+ * libc/stdlib/stdlib_private.h: Use new common register definitions.
+ * libm/fplib/strtod.S: Use new common register definitions. Check if
+ the stack high register exists and don't use it if it does not exist.
+ * doc/api/doxygen.config.in: Add avr/io.h back into the documentation list.
+
2007-05-29 Eric B. Weddington
* Makefile.am: Add ChangeLog-2006 to distribution list.
Index: common/macros.inc
===================================================================
RCS file: /sources/avr-libc/avr-libc/common/macros.inc,v
retrieving revision 1.6.2.4
diff -u -p -r1.6.2.4 macros.inc
--- common/macros.inc 18 Jan 2007 21:43:18 -0000 1.6.2.4
+++ common/macros.inc 6 Jun 2007 21:44:00 -0000
@@ -334,7 +334,7 @@
.macro LPM_R0_ZPLUS_INIT hhi
#if __AVR_ENHANCED__
#if BIG_CODE
- out _SFR_IO_ADDR(RAMPZ), \hhi
+ out AVR_RAMPZ_ADDR, \hhi
#endif
#endif
.endm
@@ -351,7 +351,7 @@
#else
#if BIG_CODE
/* ELPM without post-increment, load RAMPZ each time (ATmega103) */
- out _SFR_IO_ADDR(RAMPZ), \hhi
+ out AVR_RAMPZ_ADDR, \hhi
elpm
adiw r30,1
adc \hhi, __zero_reg__
Index: crt1/gcrt1.S
===================================================================
RCS file: /sources/avr-libc/avr-libc/crt1/gcrt1.S,v
retrieving revision 1.8.2.1
diff -u -p -r1.8.2.1 gcrt1.S
--- crt1/gcrt1.S 8 May 2007 20:58:39 -0000 1.8.2.1
+++ crt1/gcrt1.S 6 Jun 2007 21:44:00 -0000
@@ -1,4 +1,5 @@
/* Copyright (c) 2002, Marek Michalkiewicz
+ Copyright (c) 2007, Eric B. Weddington
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -142,13 +143,13 @@ __init:
.section .init2,"ax",@progbits
clr __zero_reg__
- out _SFR_IO_ADDR(SREG), __zero_reg__
+ out AVR_STATUS_ADDR, __zero_reg__
ldi r28,lo8(__stack)
-#ifdef SPH
+#ifdef _HAVE_AVR_STACK_POINTER_HI
ldi r29,hi8(__stack)
- out _SFR_IO_ADDR(SPH), r29
+ out AVR_STACK_POINTER_HI_ADDR, r29
#endif
- out _SFR_IO_ADDR(SPL), r28
+ out AVR_STACK_POINTER_LO_ADDR, r28
#if BIG_CODE
/* Only for >64K devices with RAMPZ, replaces the default code
@@ -173,7 +174,7 @@ __do_copy_data:
.L__do_copy_data_carry:
inc r16
#endif
- out _SFR_IO_ADDR(RAMPZ), r16
+ out AVR_RAMPZ_ADDR, r16
rjmp .L__do_copy_data_start
.L__do_copy_data_loop:
#ifdef __AVR_ENHANCED__
Index: doc/api/doxygen.config.in
===================================================================
RCS file: /sources/avr-libc/avr-libc/doc/api/doxygen.config.in,v
retrieving revision 1.19.2.5
diff -u -p -r1.19.2.5 doxygen.config.in
--- doc/api/doxygen.config.in 30 Mar 2007 04:13:22 -0000 1.19.2.5
+++ doc/api/doxygen.config.in 6 Jun 2007 21:44:33 -0000
@@ -473,6 +473,7 @@ INPUT = @top_srcdir@/in
@top_srcdir@/include/avr/interrupt.h \
@top_srcdir@/doc/api/interrupts.dox \
@top_srcdir@/doc/api/vectortable.dox \
+ @top_srcdir@/include/avr/io.h \
@top_srcdir@/include/avr/pgmspace.h \
@top_srcdir@/include/avr/portpins.h \
@top_srcdir@/include/avr/power.h \
Index: include/avr/io.h
===================================================================
RCS file: /sources/avr-libc/avr-libc/include/avr/io.h,v
retrieving revision 1.24.2.17
diff -u -p -r1.24.2.17 io.h
--- include/avr/io.h 13 May 2007 20:36:03 -0000 1.24.2.17
+++ include/avr/io.h 6 Jun 2007 21:44:42 -0000
@@ -1,4 +1,5 @@
/* Copyright (c) 2002,2003,2005,2006,2007 Marek Michalkiewicz, Joerg Wunsch
+ Copyright (c) 2007 Eric B. Weddington
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -39,16 +40,22 @@
command-line switch. This is done by diverting to the appropriate
file <avr/ioXXXX.h> which should
never be included directly. Some register names common to all
- AVR devices are defined directly within <avr/io.h>,
+ AVR devices are defined directly within <avr/common.h>,
+ which is included in <avr/io.h>,
but most of the details come from the respective include file.
- Note that this file always includes
- \code #include \endcode
- See \ref avr_sfr for the details.
+ Note that this file always includes the following files:
+ \code
+ #include
+ #include
+ #include
+ #include
+ \endcode
+ See \ref avr_sfr for more details about that header file.
Included are definitions of the IO register set and their
respective bit values as specified in the Atmel documentation.
- Note that Atmel is not very consistent in its naming conventions,
+ Note that inconsistencies in naming conventions,
so even identical functions sometimes get different names on
different devices.
@@ -86,94 +93,6 @@
#include
-#ifndef __AVR_HAVE_MOVW__
-# if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
-# define __AVR_HAVE_MOVW__ 1
-# endif
-#endif
-
-#ifndef __AVR_HAVE_LPMX__
-# if defined(__AVR_ENHANCED__) && __AVR_ENHANCED__
-# define __AVR_HAVE_LPMX__ 1
-# endif
-#endif
-
-/*
- * Registers common to all AVR devices.
- */
-
-#if __AVR_ARCH__ != 1
-/*
- * AVR architecture 1 has no RAM, thus no stack pointer.
- *
- * All other archs do have a stack pointer. Some devices have only
- * less than 256 bytes of possible RAM locations (128 Bytes of SRAM
- * and no option for external RAM), thus SPH is officially "reserved"
- * for them. We catch this case below after including the
- * device-specific ioXXXX.h file, by examining XRAMEND, and
- * #undef-ining SP and SPH in that case.
- */
-/* Stack Pointer */
-#define SP _SFR_IO16(0x3D)
-#define SPL _SFR_IO8(0x3D)
-#define SPH _SFR_IO8(0x3E)
-#endif /* #if __AVR_ARCH__ != 1 */
-
-/* Status REGister */
-#define SREG _SFR_IO8(0x3F)
-
-/* Status Register - SREG */
-#define SREG_I 7
-#define SREG_T 6
-#define SREG_H 5
-#define SREG_S 4
-#define SREG_V 3
-#define SREG_N 2
-#define SREG_Z 1
-#define SREG_C 0
-
-/* Pointer definition */
-#if __AVR_ARCH__ != 1
-/* avr1 has only the Z pointer */
-#define XL r26
-#define XH r27
-#define YL r28
-#define YH r29
-#endif /* #if __AVR_ARCH__ != 1 */
-#define ZL r30
-#define ZH r31
-
-/*
- * Only few devices come without EEPROM. In order to assemble the
- * EEPROM library components without defining a specific device, we
- * keep the EEPROM-related definitions here.
- */
-#if defined(__COMPILING_AVR_LIBC__)
-
-/* EEPROM Control Register */
-#define EECR _SFR_IO8(0x1C)
-
-/* EEPROM Data Register */
-#define EEDR _SFR_IO8(0x1D)
-
-/* EEPROM Address Register */
-#define EEAR _SFR_IO16(0x1E)
-#define EEARL _SFR_IO8(0x1E)
-#define EEARH _SFR_IO8(0x1F)
-
-/* EEPROM Control Register */
-#define EERIE 3
-#define EEMWE 2
-#define EEWE 1
-#define EERE 0
-
-/* Extended indirect addressing of ATmega256x devices */
-#if __AVR_ARCH__ == 6
-# define EIND _SFR_IO8(0X3C)
-#endif
-
-#endif /* __COMPILING_AVR_LIBC__ */
-
#if defined (__AVR_AT94K__)
# include
#elif defined (__AVR_AT43USB320__)
@@ -359,13 +278,7 @@
#include
-#if __AVR_ARCH__ != 1
-# if XRAMEND < 0x100 && !defined(__COMPILING_AVR_LIBC__)
-# undef SP
-# define SP _SFR_IO8(0x3D)
-# undef SPH
-# endif
-#endif
+#include
#include
Index: include/avr/iomxx0_1.h
===================================================================
RCS file: /sources/avr-libc/avr-libc/include/avr/iomxx0_1.h,v
retrieving revision 1.7.2.3
diff -u -p -r1.7.2.3 iomxx0_1.h
--- include/avr/iomxx0_1.h 1 Jan 2007 21:43:51 -0000 1.7.2.3
+++ include/avr/iomxx0_1.h 6 Jun 2007 21:44:57 -0000
@@ -463,9 +463,7 @@
#define RAMPZ _SFR_IO8(0X3B)
#define RAMPZ0 0
-#if !(__AVR_ARCH__ == 6 && defined(__COMPILING_AVR_LIBC__))
-# define EIND _SFR_IO8(0X3C)
-#endif
+#define EIND _SFR_IO8(0X3C)
#define EIND0 0
/* SP [0x3D..0x3E] */
Index: libc/stdlib/stdlib_private.h
===================================================================
RCS file: /sources/avr-libc/avr-libc/libc/stdlib/stdlib_private.h,v
retrieving revision 1.2
diff -u -p -r1.2 stdlib_private.h
--- libc/stdlib/stdlib_private.h 13 Sep 2005 13:29:54 -0000 1.2
+++ libc/stdlib/stdlib_private.h 6 Jun 2007 21:45:03 -0000
@@ -31,6 +31,7 @@
#include
#include
+#include
#if !defined(__DOXYGEN__)
@@ -83,6 +84,6 @@ extern char mymem[];
extern char __heap_start;
extern char __heap_end;
-#define STACK_POINTER() ((char *)SP)
+#define STACK_POINTER() ((char *)AVR_STACK_POINTER_REG)
#endif /* MALLOC_TEST */
Index: libm/fplib/strtod.S
===================================================================
RCS file: /sources/avr-libc/avr-libc/libm/fplib/Attic/strtod.S,v
retrieving revision 1.10.2.1
diff -u -p -r1.10.2.1 strtod.S
--- libm/fplib/strtod.S 1 Jan 2007 21:43:51 -0000 1.10.2.1
+++ libm/fplib/strtod.S 6 Jun 2007 21:45:05 -0000
@@ -243,8 +243,12 @@ GLOBAL(strtod)
ST Z,rEndptrH
1:
LDI ZL,18-6 ; number of all 'pushed' registers - not pushed ones
- IN YL,_SFR_IO_ADDR(SPL)
- IN YH,_SFR_IO_ADDR(SPH)
+ IN YL,AVR_STACK_POINTER_LO_ADDR
+#ifdef _HAVE_AVR_STACK_POINTER_HI
+ IN YH,AVR_STACK_POINTER_HI_ADDR
+#else
+ CLR YH
+#endif
EPILOGUE_RESTORES(6)
.L_overflow:
@@ -376,7 +380,7 @@ GLOBAL(strtod)
clr XH
#if __AVR_3_BYTE_PC__
pop ZH
- out _SFR_IO_ADDR(EIND), ZH
+ out AVR_EXTENDED_INDIRECT_ADDR, ZH
#endif /* __AVR_3_BYTE_PC__ */
pop ZH
pop ZL
--- include/avr/common.h 1969-12-31 17:00:00.000000000 -0700
+++ include/avr/common.h 2007-06-06 13:29:02.360846200 -0600
@@ -0,0 +1,235 @@
+/* Copyright (c) 2007 Eric B. Weddington
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE. */
+
+/* $Id$ */
+
+
+#ifndef _AVR_COMMON_H
+#define _AVR_COMMON_H
+
+#include
+
+/*
+This purpose of this header is to define registers that have not been
+previously defined in the individual device IO header files, and to define
+other symbols that are common across AVR device families.
+
+This file is designed to be included in after the individual
+device IO header files, and after
+
+*/
+
+/*------------ Registers Not Previously Defined ------------*/
+
+/*
+These are registers that are not previously defined in the individual
+IO header files, OR they are defined here because they are used in parts of
+avr-libc even if a device is not selected but a general architecture has
+been selected.
+*/
+
+
+/*
+Stack pointer register.
+
+AVR architecture 1 has no RAM, thus no stack pointer.
+
+All other architectures do have a stack pointer. Some devices have only
+less than 256 bytes of possible RAM locations (128 Bytes of SRAM
+and no option for external RAM), thus SPH is officially "reserved"
+for them.
+
+*/
+#if __AVR_ARCH__ != 1
+
+# ifndef SPL
+# define SPL _SFR_IO8(0x3D)
+# endif
+# if XRAMEND < 0x100
+# ifndef SP
+# define SP _SFR_IO8(0x3D)
+# endif
+# else
+# ifndef SP
+# define SP _SFR_IO16(0x3D)
+# endif
+# ifndef SPH
+# define SPH _SFR_IO8(0x3E)
+# endif
+# endif /* XRAMEND < 0x100 && !defined(__COMPILING_AVR_LIBC__) */
+
+#endif /* __AVR_ARCH__ != 1 */
+
+
+/* Status Register */
+#ifndef SREG
+# define SREG _SFR_IO8(0x3F)
+#endif
+
+/* SREG bit definitions */
+#ifndef SREG_C
+# define SREG_C (0)
+#endif
+#ifndef SREG_Z
+# define SREG_Z (1)
+#endif
+#ifndef SREG_N
+# define SREG_N (2)
+#endif
+#ifndef SREG_V
+# define SREG_V (3)
+#endif
+#ifndef SREG_S
+# define SREG_S (4)
+#endif
+#ifndef SREG_H
+# define SREG_H (5)
+#endif
+#ifndef SREG_T
+# define SREG_T (6)
+#endif
+#ifndef SREG_I
+# define SREG_I (7)
+#endif
+
+
+/* AVR 6 Architecture */
+#if __AVR_ARCH__ == 6
+# ifndef EIND
+# define EIND _SFR_IO8(0X3C)
+# endif
+#endif /* __AVR_ARCH__ == 6 */
+
+
+
+#if defined(__COMPILING_AVR_LIBC__)
+
+/*
+Only few devices come without EEPROM. In order to assemble the
+EEPROM library components without defining a specific device, we
+keep the EEPROM-related definitions here.
+*/
+
+/* EEPROM Control Register */
+# ifndef EECR
+# define EECR _SFR_IO8(0x1C)
+# endif
+
+/* EEPROM Data Register */
+# ifndef EEDR
+# define EEDR _SFR_IO8(0x1D)
+# endif
+
+/* EEPROM Address Register */
+# ifndef EEAR
+# define EEAR _SFR_IO16(0x1E)
+# endif
+# ifndef EEARL
+# define EEARL _SFR_IO8(0x1E)
+# endif
+# ifndef EEARH
+# define EEARH _SFR_IO8(0x1F)
+# endif
+
+/* EEPROM Control Register bits */
+# ifndef EERE
+# define EERE (0)
+# endif
+# ifndef EEWE
+# define EEWE (1)
+# endif
+# ifndef EEMWE
+# define EEMWE (2)
+# endif
+# ifndef EERIE
+# define EERIE (3)
+# endif
+
+#endif /* __COMPILING_AVR_LIBC__ */
+
+
+
+/*------------ Common Symbols ------------*/
+
+/*
+Generic definitions for registers that are common across multiple AVR devices
+and families.
+*/
+
+/* Pointer registers definitions */
+#if __AVR_ARCH__ != 1 /* avr1 does not have X and Y pointers */
+# define XL r26
+# define XH r27
+# define YL r28
+# define YH r29
+#endif /* #if __AVR_ARCH__ != 1 */
+#define ZL r30
+#define ZH r31
+
+
+/* Status Register */
+#if defined(SREG)
+# define AVR_STATUS_REG SREG
+# define AVR_STATUS_ADDR _SFR_IO_ADDR(SREG)
+#endif
+
+/* Stack Pointer (combined) Register */
+#if defined(SP)
+# define AVR_STACK_POINTER_REG SP
+# define AVR_STACK_POINTER_ADDR _SFR_IO_ADDR(SP)
+#endif
+
+/* Stack Pointer High Register */
+#if defined(SPH)
+# define _HAVE_AVR_STACK_POINTER_HI 1
+# define AVR_STACK_POINTER_HI_REG SPH
+# define AVR_STACK_POINTER_HI_ADDR _SFR_IO_ADDR(SPH)
+#endif
+
+/* Stack Pointer Low Register */
+#if defined(SPL)
+# define AVR_STACK_POINTER_LO_REG SPL
+# define AVR_STACK_POINTER_LO_ADDR _SFR_IO_ADDR(SPL)
+#endif
+
+/* RAMPZ Register */
+#if defined(RAMPZ)
+# define AVR_RAMPZ_REG RAMPZ
+# define AVR_RAMPZ_ADDR _SFR_IO_ADDR(RAMPZ)
+#endif
+
+/* Extended Indirect Register */
+#if defined(EIND)
+# define AVR_EXTENDED_INDIRECT_REG EIND
+# define AVR_EXTENDED_INDIRECT_ADDR _SFR_IO_ADDR(EIND)
+#endif
+
+
+#endif /* _AVR_COMMON_H */