Add code to start the USBB Generic Clock from the user-specified master clock source...
[pub/USBasp.git] / LUFA / Common / Common.h
index 57bebed..355391b 100644 (file)
                #include <stdint.h>
                #include <stdbool.h>
                #include <string.h>
+               #include <stddef.h>
                
                #include "Architectures.h"
                #include "Attributes.h"
                #include "BoardTypes.h"
                
        /* Architecture specific utility includes: */
-               #if (ARCH == ARCH_AVR8)
+               #if defined(__DOXYGEN__)
+                       /** Type define for an unsigned integer the same width as the selected architecture's machine register. */
+                       typedef MACHINE_REG_t uint_reg_t;
+               #elif (ARCH == ARCH_AVR8)
                        #include <avr/io.h>
                        #include <avr/interrupt.h>
                        #include <avr/pgmspace.h>
                        #include <avr/boot.h>
                        #include <util/atomic.h>
                        #include <util/delay.h>
+                       
+                       typedef uint8_t uint_reg_t;
+               #elif (ARCH == ARCH_UC3B)
+                       #include <avr32/io.h>
+
+                       typedef uint32_t uint_reg_t;
+                       
+                       // TODO
+                       #define EEMEM
+                       #define PROGMEM                  const
+                       #define ISR(Name)                void Name (void)
+                       #define ATOMIC_BLOCK(x)          if (1)
+                       #define ATOMIC_RESTORESTATE
+                       #define pgm_read_byte(x)         *x
+                       #define eeprom_read_byte(x)      *x
+                       #define eeprom_update_byte(x, y) *x = y
+                       #define eeprom_write_byte(x, y)  *x = y
+                       #define _delay_ms(x)
+                       #define memcmp_P(...)            memcmp(__VA_ARGS__)
+                       #define memcpy_P(...)            memcpy(__VA_ARGS__)
+                       
+                       #warning The UC3B architecture support is currently experimental and incomplete!
                #endif
 
        /* Public Interface - May be used in end-application: */
                                #define JTAG_DEBUG_BREAK()      __asm__ __volatile__ ("BREAK" ::)
 
                                #if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
-                                       /** Reads a pointer out of PROGMEM space. This is currently a wrapper for the avr-libc \c pgm_read_ptr()
-                                        *  macro with a \c void* cast, so that its value can be assigned directly to a pointer variable or used
-                                        *  in pointer arithmetic without further casting in C. In a future avr-libc distribution this will be
-                                        *  part of the standard API and will be implemented in a more formal manner.
+                                       /** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
+                                        *  avr-libc \c pgm_read_ptr() macro with a \c void* cast, so that its value can be assigned directly
+                                        *  to a pointer variable or used in pointer arithmetic without further casting in C. In a future
+                                        *  avr-libc distribution this will be part of the standard API and will be implemented in a more formal
+                                        *  manner.
                                         *
                                         *  \param[in] Addr  Address of the pointer to read.
                                         *
                                #define JTAG_DEBUG_ASSERT(Condition)    MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
 
                                /** Macro for testing condition "x" and writing debug data to the stdout stream if \c false. The stdout stream
-                                *  must be pre-initialized before this macro is run and linked to an output device, such as the AVR's USART
-                                *  peripheral.
+                                *  must be pre-initialized before this macro is run and linked to an output device, such as the microcontroller's
+                                *  USART peripheral.
                                 *
                                 *  The output takes the form "{FILENAME}: Function {FUNCTION NAME}, Line {LINE NUMBER}: Assertion {Condition} failed."
                                 *
                                                                                __FILE__, __func__, __LINE__, #Condition); } }MACROE
                        #endif
                        
-                       /** Forces GCC to use pointer indirection (via the AVR's pointer register pairs) when accessing the given
+                       /** Forces GCC to use pointer indirection (via the device's pointer register pairs) when accessing the given
                         *  struct pointer. In some cases GCC will emit non-optimal assembly code when accessing a structure through
                         *  a pointer, resulting in a larger binary. When this macro is used on a (non \c const) structure pointer before
                         *  use, it will force GCC to use pointer indirection on the elements rather than direct store and load