Commit 3d4d8e7f authored by Dean Camera's avatar Dean Camera
Browse files

Add new ARCH option to the makefiles to (eventually) specify the target device...

Add new ARCH option to the makefiles to (eventually) specify the target device architecture. Update non-usb peripheral drivers to reflect future multiple architecture support.
parent 100a197d
......@@ -44,7 +44,7 @@
*/
/** \ingroup Group_Common
* @defgroup Group_GCCAttr Function/Variable Attributes
* \defgroup Group_GCCAttr Function/Variable Attributes
*
* Macros for easy access GCC function and variable attributes, which can be applied to function prototypes or
* variable attributes.
......@@ -52,11 +52,11 @@
* @{
*/
#ifndef __FUNCATTR_H__
#define __FUNCATTR_H__
#ifndef __LUFA_FUNCATTR_H__
#define __LUFA_FUNCATTR_H__
/* Preprocessor Checks: */
#if !defined(__COMMON_H__)
#if !defined(__INCLUDE_FROM_COMMON_H)
#error Do not include this file directly. Include LUFA/Common/Common.h instead to gain this functionality.
#endif
......
......@@ -39,7 +39,7 @@
*/
/** \ingroup Group_Common
* @defgroup Group_BoardTypes Board Types
* \defgroup Group_BoardTypes Board Types
*
* Macros for indicating the chosen physical board hardware to the library. These macros should be used when
* defining the BOARD token to the chosen hardware via the -D switch in the project makefile.
......@@ -47,11 +47,11 @@
* @{
*/
#ifndef __BOARDTYPES_H__
#define __BOARDTYPES_H__
#ifndef __LUFA_BOARDTYPES_H__
#define __LUFA_BOARDTYPES_H__
/* Preprocessor Checks: */
#if !defined(__COMMON_H__)
#if !defined(__INCLUDE_FROM_COMMON_H)
#error Do not include this file directly. Include LUFA/Common/Common.h instead to gain this functionality.
#endif
......
......@@ -35,7 +35,7 @@
* also includes other common code headers.
*/
/** @defgroup Group_Common Common Utility Headers - LUFA/Drivers/Common/Common.h
/** \defgroup Group_Common Common Utility Headers - LUFA/Drivers/Common/Common.h
*
* Common utility headers containing macros, functions, enums and types which are common to all
* aspects of the library.
......@@ -43,25 +43,41 @@
* @{
*/
/** @defgroup Group_Debugging Debugging Macros
/** \defgroup Group_Debugging Debugging Macros
*
* Macros for debugging use.
*/
/** @defgroup Group_BitManip Endian and Bit Macros
/** \defgroup Group_BitManip Endian and Bit Macros
*
* Functions for swapping endianness and reversing bit orders.
*/
#ifndef __COMMON_H__
#define __COMMON_H__
#ifndef __LUFA_COMMON_H__
#define __LUFA_COMMON_H__
/* Macros: */
#if !defined(__DOXYGEN__)
#define __INCLUDE_FROM_COMMON_H
#endif
/* Includes: */
#include <stdint.h>
#include <stdbool.h>
#include "Architectures.h"
#include "Attributes.h"
#include "BoardTypes.h"
/* Architecture specific utility includes: */
#if (ARCH == ARCH_AVR8)
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <util/atomic.h>
#include <util/delay.h>
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
......@@ -89,7 +105,9 @@
*
* \return The larger of the two input parameters
*/
#define MAX(x, y) ((x > y) ? x : y)
#if !defined(MAX) || defined(__DOXYGEN__)
#define MAX(x, y) ((x > y) ? x : y)
#endif
/** Convenience macro to determine the smaller of two values.
*
......@@ -101,44 +119,61 @@
*
* \return The smaller of the two input parameters
*/
#define MIN(x, y) ((x < y) ? x : y)
/** Defines a volatile \c NOP statement which cannot be optimized out by the compiler, and thus can always
* be set as a breakpoint in the resulting code. Useful for debugging purposes, where the optimiser
* removes/reorders code to the point where break points cannot reliably be set.
*
* \ingroup Group_Debugging
*/
#define JTAG_DEBUG_POINT() __asm__ __volatile__ ("NOP" ::)
#if !defined(MIN) || defined(__DOXYGEN__)
#define MIN(x, y) ((x < y) ? x : y)
#endif
/** Defines an explicit JTAG break point in the resulting binary via the assembly \c BREAK statement. When
* a JTAG is used, this causes the program execution to halt when reached until manually resumed.
*
* \ingroup Group_Debugging
*/
#define JTAG_DEBUG_BREAK() __asm__ __volatile__ ("BREAK" ::)
#if (ARCH == ARCH_AVR8)
/** Defines a volatile \c NOP statement which cannot be optimized out by the compiler, and thus can always
* be set as a breakpoint in the resulting code. Useful for debugging purposes, where the optimiser
* removes/reorders code to the point where break points cannot reliably be set.
*
* \ingroup Group_Debugging
*/
#define JTAG_DEBUG_POINT() __asm__ __volatile__ ("NOP" ::)
/** Macro for testing condition "x" and breaking via \ref JTAG_DEBUG_BREAK() if the condition is false.
*
* \param[in] Condition Condition that will be evaluated,
*
* \ingroup Group_Debugging
*/
#define JTAG_DEBUG_ASSERT(Condition) MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
/** Defines an explicit JTAG break point in the resulting binary via the assembly \c BREAK statement. When
* a JTAG is used, this causes the program execution to halt when reached until manually resumed.
*
* \ingroup Group_Debugging
*/
#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.
*
* \param[in] Addr Address of the pointer to read.
*
* \return Pointer retrieved from PROGMEM space.
*/
#define pgm_read_ptr(Addr) (void*)pgm_read_word(Addr)
#endif
/** Macro for testing condition "x" and breaking via \ref JTAG_DEBUG_BREAK() if the condition is false.
*
* \param[in] Condition Condition that will be evaluated,
*
* \ingroup Group_Debugging
*/
#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.
*
* The output takes the form "{FILENAME}: Function {FUNCTION NAME}, Line {LINE NUMBER}: Assertion {Condition} failed."
*
* \param[in] Condition Condition that will be evaluated,
*
* \ingroup Group_Debugging
*/
#define STDOUT_ASSERT(Condition) MACROS{ if (!(x)) { printf_P(PSTR("%s: Function \"%s\", Line %d: " \
"Assertion \"%s\" failed.\r\n"), \
__FILE__, __func__, __LINE__, #Condition); } }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.
*
* The output takes the form "{FILENAME}: Function {FUNCTION NAME}, Line {LINE NUMBER}: Assertion {Condition} failed."
*
* \param[in] Condition Condition that will be evaluated,
*
* \ingroup Group_Debugging
*/
#define STDOUT_ASSERT(Condition) MACROS{ if (!(x)) { printf_P(PSTR("%s: Function \"%s\", Line %d: " \
"Assertion \"%s\" failed.\r\n"), \
__FILE__, __func__, __LINE__, #Condition); } }MACROE
#endif
/** Forces GCC to use pointer indirection (via the AVR'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
......@@ -150,19 +185,6 @@
*/
#define GCC_FORCE_POINTER_ACCESS(StructPtr) __asm__ __volatile__("" : "=b" (StructPtr) : "0" (StructPtr))
#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.
*
* \param[in] Addr Address of the pointer to read.
*
* \return Pointer retrieved from PROGMEM space.
*/
#define pgm_read_ptr(Addr) (void*)pgm_read_word(Addr)
#endif
/** Swaps the byte ordering of a 16-bit value at compile time. Do not use this macro for swapping byte orderings
* of dynamic values computed at runtime, use \ref SwapEndian_16() instead. The result of this macro can be used
* inside struct or other variable initializers outside of a function, something that is not possible with the
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_ADAFRUITU4 ADAFRUITU4
* \defgroup Group_LEDs_ADAFRUITU4 ADAFRUITU4
*
* Board specific LED driver header for the Adafruit U4 Breakout board (http://ladyada.net/products/atmega32u4breakout).
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_Buttons
* @defgroup Group_Buttons_ATAVRUSBRF01 ATAVRUSBRF01
* \defgroup Group_Buttons_ATAVRUSBRF01 ATAVRUSBRF01
*
* Board specific Buttons driver header for the Atmel ATAVRUSBRF01.
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_ATAVRUSBRF01 ATAVRUSBRF01
* \defgroup Group_LEDs_ATAVRUSBRF01 ATAVRUSBRF01
*
* Board specific LED driver header for the Atmel ATAVRUSBRF01.
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_Buttons
* @defgroup Group_Buttons_BENITO BENITO
* \defgroup Group_Buttons_BENITO BENITO
*
* Board specific Buttons driver header for the Tempusdictum Benito (http://dorkbotpdx.org/wiki/benito).
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_BENITO BENITO
* \defgroup Group_LEDs_BENITO BENITO
*
* Board specific LED driver header for the Tempusdictum Benito (http://dorkbotpdx.org/wiki/benito).
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_BLACKCAT BLACKCAT
* \defgroup Group_LEDs_BLACKCAT BLACKCAT
*
* Board specific LED driver header for the TCNISO Blackcat USB JTAG (http://www.embeddedcomputers.net/products/BlackcatUSB/.
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_BUI BUI
* \defgroup Group_LEDs_BUI BUI
*
* Board specific LED driver header for the Busware BUI (http://www.busware.de/tiki-index.php?page=BUI).
*
......
......@@ -41,7 +41,7 @@
*/
/** \ingroup Group_Buttons
* @defgroup Group_Buttons_BUMBLEB BUMBLEB
* \defgroup Group_Buttons_BUMBLEB BUMBLEB
*
* Board specific buttons driver header for the Fletchtronics BUMBLEB (http://fletchtronics.net/bumble-b). The BUMBLEB
* third-party board does not include any on-board peripherals, but does have an officially recommended external peripheral
......
......@@ -41,7 +41,7 @@
*/
/** \ingroup Group_Joystick
* @defgroup Group_Joystick_BUMBLEB BUMBLEB
* \defgroup Group_Joystick_BUMBLEB BUMBLEB
*
* Board specific joystick driver header for the Fletchtronics BUMBLEB (http://fletchtronics.net/bumble-b). The BUMBLEB
* third-party board does not include any on-board peripherals, but does have an officially recommended external peripheral
......
......@@ -41,7 +41,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_BUMBLEB BUMBLEB
* \defgroup Group_LEDs_BUMBLEB BUMBLEB
*
* Board specific LED driver header for the Fletchtronics BUMBLEB (http://fletchtronics.net/bumble-b). The BUMBLEB
* third-party board does not include any on-board peripherals, but does have an officially recommended external
......
......@@ -44,7 +44,7 @@
*/
/** \ingroup Group_BoardDrivers
* @defgroup Group_Buttons Buttons Driver - LUFA/Drivers/Board/Buttons.h
* \defgroup Group_Buttons Buttons Driver - LUFA/Drivers/Board/Buttons.h
*
* \section Sec_Dependencies Module Source Dependencies
* The following files must be built with any user project that uses this module:
......@@ -125,10 +125,8 @@
#include "MINIMUS/Buttons.h"
#elif (BOARD == BOARD_MICROSIN162)
#include "MICROSIN162/Buttons.h"
#elif (BOARD == BOARD_USER)
#include "Board/Buttons.h"
#else
#error The selected board does not contain any GPIO buttons.
#include "Board/Buttons.h"
#endif
/* Pseudo-Functions for Doxygen: */
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_CULV3 CULV3
* \defgroup Group_LEDs_CULV3 CULV3
*
* Board specific LED driver header for the Busware CUL V3 (http://busware.de/tiki-index.php?page=CUL).
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_LEDs
* @defgroup Group_LEDs_CULV3 CULV3
* \defgroup Group_LEDs_CULV3 CULV3
*
* Board specific LED driver header for the Busware CUL V3 (http://busware.de/tiki-index.php?page=CUL).
*
......
......@@ -44,7 +44,7 @@
*/
/** \ingroup Group_BoardDrivers
* @defgroup Group_Dataflash Dataflash Driver - LUFA/Drivers/Board/Dataflash.h
* \defgroup Group_Dataflash Dataflash Driver - LUFA/Drivers/Board/Dataflash.h
*
* \section Sec_Dependencies Module Source Dependencies
* The following files must be built with any user project that uses this module:
......@@ -123,8 +123,8 @@
#endif
/* Includes: */
#include "../Peripheral/SPI.h"
#include "../../Common/Common.h"
#include "../Peripheral/SPI.h"
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
......@@ -247,10 +247,8 @@
#include "XPLAIN/Dataflash.h"
#elif (BOARD == BOARD_EVK527)
#include "EVK527/Dataflash.h"
#elif (BOARD == BOARD_USER)
#include "Board/Dataflash.h"
#else
#error The selected board does not contain a dataflash IC.
#include "Board/Dataflash.h"
#endif
/* Disable C linkage for C++ Compilers: */
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_Dataflash_EVK527
* @defgroup Group_Dataflash_EVK527_AT45DB321C AT45DB321C
* \defgroup Group_Dataflash_EVK527_AT45DB321C AT45DB321C
*
* Board specific Dataflash commands header for the AT45DB321C as mounted on the Atmel EVK527.
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_Buttons
* @defgroup Group_Buttons_EVK527 EVK527
* \defgroup Group_Buttons_EVK527 EVK527
*
* Board specific Buttons driver header for the Atmel EVK527.
*
......
......@@ -38,7 +38,7 @@
*/
/** \ingroup Group_Dataflash
* @defgroup Group_Dataflash_EVK527 EVK527
* \defgroup Group_Dataflash_EVK527 EVK527
*
* Board specific Dataflash driver header for the Atmel EVK527.
*
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment