Add start of an architecture port to the Atmel USB XMEGA devices.
[pub/USBasp.git] / LUFA / Common / Common.h
index 87fc08c..d46f921 100644 (file)
                        #define ARCH_BIG_ENDIAN
 
                        #include "Endianness.h"
+               #elif (ARCH == ARCH_XMEGA)
+                       #include <avr/io.h>
+                       #include <avr/interrupt.h>
+                       #include <avr/pgmspace.h>
+                       #include <avr/eeprom.h>
+                       #include <util/delay.h>
+                       
+                       typedef uint8_t uint_reg_t;
+                       
+                       #define ARCH_HAS_EEPROM_ADDRESS_SPACE
+                       #define ARCH_HAS_FLASH_ADDRESS_SPACE
+                       #define ARCH_HAS_MULTI_ADDRESS_SPACE
+                       #define ARCH_LITTLE_ENDIAN
+
+                       #include "Endianness.h"         
                #else
                        #error Unknown device architecture specified.
                #endif
                                        __builtin_mtsr(AVR32_COUNT, 0);
                                        while (__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));                           
                                }
+                               #elif (ARCH == ARCH_XMEGA)
+                               if (GCC_IS_COMPILE_CONST(Milliseconds))
+                               {
+                                       _delay_ms(Milliseconds);
+                               }
+                               else
+                               {
+                                       while (Milliseconds--)
+                                         _delay_ms(1);
+                               }                               
                                #endif
                        }
 
                                #if (ARCH == ARCH_AVR8)
                                return SREG;
                                #elif (ARCH == ARCH_UC3)
-                               return __builtin_mfsr(AVR32_SR);                                
+                               return __builtin_mfsr(AVR32_SR);
+                               #elif (ARCH == ARCH_XMEGA)
+                               return SREG;
                                #endif
 
                                GCC_MEMORY_BARRIER();
                                  __builtin_ssrf(AVR32_SR_GM_OFFSET);
                                else
                                  __builtin_csrf(AVR32_SR_GM_OFFSET);
+                               #elif (ARCH == ARCH_XMEGA)
+                               SREG = GlobalIntState;                          
                                #endif
                                
                                GCC_MEMORY_BARRIER();
                                sei();
                                #elif (ARCH == ARCH_UC3)
                                __builtin_csrf(AVR32_SR_GM_OFFSET);
+                               #elif (ARCH == ARCH_XMEGA)
+                               sei();
                                #endif
 
                                GCC_MEMORY_BARRIER();
                                cli();
                                #elif (ARCH == ARCH_UC3)
                                __builtin_ssrf(AVR32_SR_GM_OFFSET);
+                               #elif (ARCH == ARCH_XMEGA)
+                               cli();
                                #endif
 
                                GCC_MEMORY_BARRIER();