Commit 4d131de8 authored by Dean Camera's avatar Dean Camera
Browse files

Add board driver support for the Atmel XMEGA-B1 Xplained board.

Fix Dataflash driver for the A3BU-Xplained board.

Minor documentation improvements.
parent fdab3aef
This diff is collapsed.
......@@ -90,7 +90,7 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
......@@ -102,7 +102,7 @@
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
......
......@@ -195,6 +195,9 @@
/** Selects the Micropendous (Arduino-like) revision 2 specific board drivers, including the Button and LED drivers. */
#define BOARD_MICROPENDOUS_REV2 43
/** Selects the XMEGA B1 Xplained specific board drivers, including the Button and LED drivers. */
#define BOARD_B1_XPLAINED 44
#if !defined(__DOXYGEN__)
#define BOARD_ BOARD_NONE
......
......@@ -19,6 +19,7 @@
* - Added new LEDs_Disable(), Buttons_Disable() and Joystick_Disable() functions to the board hardware drivers
* - Added support for the Micropendous family of boards (Arduino-like revisions 1 and 2, DIP, 32U2, A, 1, 2, 3 and 4)
* - Added INVERTED_VBUS_ENABLE_LINE and NO_AUTO_VBUS_MANAGEMENT compile time options (thanks to Opendous Inc.)
* - Added support for the Atmel XMEGA B1 Xplained board
* - Library Applications:
* - Added User Application APIs to the CDC and DFU class bootloaders
* - Added INVERTED_ISP_MISO compile time option to the AVRISP-MKII clone project (thanks to Chuck Rohs)
......
......@@ -381,6 +381,7 @@
* \section Sec_XMEGASupport_Boards Supported Atmel Boards
* Currently supported Atmel XMEGA boards (see \ref Group_BoardTypes):
* - XMEGA A3BU Xplained
* - XMEGA B1 Xplained
*
* \section Sec_XMEGASupport_ThirdParty Supported Third Party Models
* Currently supported third-party boards (see \ref Group_BoardTypes for makefile \c BOARD constant names):
......
......@@ -94,7 +94,7 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
......@@ -106,7 +106,7 @@
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
......
......@@ -94,7 +94,7 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
......@@ -106,7 +106,7 @@
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
......
......@@ -94,7 +94,7 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
......@@ -106,7 +106,7 @@
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
......
......@@ -97,7 +97,7 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
......@@ -109,7 +109,7 @@
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
......
......@@ -109,7 +109,7 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
......@@ -121,7 +121,7 @@
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
......
......@@ -141,6 +141,8 @@
(BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_REV2) || \
(BOARD == BOARD_MICROPENDOUS_DIP))
#include "AVR8/MICROPENDOUS/Buttons.h"
#elif (BOARD == BOARD_B1_XPLAINED)
#include "XMEGA/B1_XPLAINED/Buttons.h"
#else
#include "Board/Buttons.h"
#endif
......
......@@ -201,7 +201,7 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
......@@ -209,7 +209,7 @@
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
......
......@@ -178,6 +178,8 @@
#elif ((BOARD == BOARD_MICROPENDOUS_REV1) || (BOARD == BOARD_MICROPENDOUS_REV2) || \
(BOARD == BOARD_MICROPENDOUS_32U2))
#include "AVR8/MICROPENDOUS/LEDs.h"
#elif (BOARD == BOARD_B1_XPLAINED)
#include "XMEGA/B1_XPLAINED/LEDs.h"
#else
#include "Board/LEDs.h"
#endif
......
......@@ -93,25 +93,24 @@
/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*
* \return Last response byte from the dataflash
*/
static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline uint8_t Dataflash_TransferByte(const uint8_t Byte)
{
// TODO
return 0;
return SPI_TransferByte(&SPID, Byte);
}
/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
*
* \param[in] Byte of data to send to the dataflash
* \param[in] Byte Byte of data to send to the dataflash
*/
static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
static inline void Dataflash_SendByte(const uint8_t Byte)
{
// TODO
SPI_SendByte(&SPID, Byte);
}
/** Sends a dummy byte to the currently selected dataflash IC, and returns the next byte from the dataflash.
......@@ -121,8 +120,7 @@
static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Dataflash_ReceiveByte(void)
{
// TODO
return 0;
return SPI_ReceiveByte(&SPID);
}
/** Determines the currently selected dataflash chip.
......
......@@ -117,7 +117,7 @@
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return (PORTR_OUT & LEDS_ALL_LEDS);
return (~PORTR_OUT & LEDS_ALL_LEDS);
}
#endif
......
/*
LUFA Library
Copyright (C) Dean Camera, 2012.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the author not be used in
advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
software, including all implied warranties of merchantability
and fitness. In no event shall the author be liable for any
special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action,
arising out of or in connection with the use or performance of
this software.
*/
/** \file
* \brief Board specific Buttons driver header for the Atmel XMEGA B1 Xplained.
* \copydetails Group_Buttons_B1_XPLAINED
*
* \note This file should not be included directly. It is automatically included as needed by the Buttons driver
* dispatch header located in LUFA/Drivers/Board/Buttons.h.
*/
/** \ingroup Group_Buttons
* \defgroup Group_Buttons_B1_XPLAINED B1_XPLAINED
* \brief Board specific Buttons driver header for the Atmel XMEGA B1 Xplained.
*
* Board specific Buttons driver header for the Atmel XMEGA B1 Xplained.
*
* @{
*/
#ifndef __BUTTONS_B1_XPLAINED_H__
#define __BUTTONS_B1_XPLAINED_H__
/* Includes: */
#include <avr/io.h>
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_BUTTONS_H)
#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead.
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** Button mask for the first button on the board. */
#define BUTTONS_BUTTON1 (1 << 0)
/** Button mask for the second button on the board. */
#define BUTTONS_BUTTON2 (1 << 1)
/** Button mask for the third button on the board. */
#define BUTTONS_BUTTON3 (1 << 2)
/** Button mask for the fourth button on the board. */
#define BUTTONS_BUTTON4 (1 << 3)
/* Inline Functions: */
#if !defined(__DOXYGEN__)
static inline void Buttons_Init(void)
{
PORTE_OUTCLR = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2 | BUTTONS_BUTTON3 | BUTTONS_BUTTON4);
PORTCFG_MPCMASK = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2 | BUTTONS_BUTTON3 | BUTTONS_BUTTON4);
PORTE_PIN0CTRL = PORT_OPC_PULLUP_gc;
}
static inline void Buttons_Disable(void)
{
PORTE_OUTCLR = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2 | BUTTONS_BUTTON3 | BUTTONS_BUTTON4);
PORTCFG_MPCMASK = (BUTTONS_BUTTON1 | BUTTONS_BUTTON2 | BUTTONS_BUTTON3 | BUTTONS_BUTTON4);
PORTE_PIN0CTRL = 0;
}
static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t Buttons_GetStatus(void)
{
return (~PORTE_IN & (BUTTONS_BUTTON1 | BUTTONS_BUTTON2 | BUTTONS_BUTTON3 | BUTTONS_BUTTON4));
}
#endif
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
#endif
/** @} */
/*
LUFA Library
Copyright (C) Dean Camera, 2012.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the author not be used in
advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
software, including all implied warranties of merchantability
and fitness. In no event shall the author be liable for any
special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action,
arising out of or in connection with the use or performance of
this software.
*/
/** \file
* \brief Board specific LED driver header for the Atmel XMEGA B1 Xplained.
* \copydetails Group_LEDs_B1_XPLAINED
*
* \note This file should not be included directly. It is automatically included as needed by the LEDs driver
* dispatch header located in LUFA/Drivers/Board/LEDs.h.
*/
/** \ingroup Group_LEDs
* \defgroup Group_LEDs_B1_XPLAINED B1_XPLAINED
* \brief Board specific LED driver header for the Atmel XMEGA B1 Xplained.
*
* Board specific LED driver header for the Atmel XMEGA B1 Xplained.
*
* @{
*/
#ifndef __LEDS_B1_XPLAINED_H__
#define __LEDS_B1_XPLAINED_H__
/* Includes: */
#include <avr/io.h>
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
/* Preprocessor Checks: */
#if !defined(__INCLUDE_FROM_LEDS_H)
#error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead.
#endif
/* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
/* Macros: */
#define LEDS_PORTF_LEDS (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4)
#define LEDS_PORTE_LEDS LEDS_LED5
#define LEDS_PORTE_MASK_SHIFT 1
#endif
/* Public Interface - May be used in end-application: */
/* Macros: */
/** LED mask for the first LED on the board. */
#define LEDS_LED1 (1 << 4)
/** LED mask for the second LED on the board. */
#define LEDS_LED2 (1 << 5)
/** LED mask for the third LED on the board. */
#define LEDS_LED3 (1 << 6)
/** LED mask for the fourth LED on the board. */
#define LEDS_LED4 (1 << 7)
/** LED mask for the fifth LED on the board. */
#define LEDS_LED5 ((1 << 4) >> LEDS_PORTE_MASK_SHIFT)
/** LED mask for all the LEDs on the board. */
#define LEDS_ALL_LEDS (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4 | LEDS_LED5)
/** LED mask for none of the board LEDs. */
#define LEDS_NO_LEDS 0
/* Inline Functions: */
#if !defined(__DOXYGEN__)
static inline void LEDs_Init(void)
{
PORTF_DIRSET = LEDS_PORTF_LEDS;
PORTF_OUTSET = LEDS_PORTF_LEDS;
PORTE_DIRSET = (LEDS_PORTE_LEDS << LEDS_PORTE_MASK_SHIFT);
PORTE_OUTCLR = (LEDS_PORTE_LEDS << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_Disable(void)
{
PORTF_DIRCLR = LEDS_PORTF_LEDS;
PORTF_OUTCLR = LEDS_PORTF_LEDS;
PORTE_DIRCLR = (LEDS_PORTE_LEDS << LEDS_PORTE_MASK_SHIFT);
PORTE_OUTCLR = (LEDS_PORTE_LEDS << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
PORTF_OUTCLR = (LEDMask & LEDS_PORTF_LEDS);
PORTE_OUTSET = ((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
{
PORTF_OUTSET = (LEDMask & LEDS_PORTF_LEDS);
PORTE_OUTCLR = ((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
{
PORTF_OUTSET = LEDS_PORTF_LEDS;
PORTE_OUTCLR = (LEDS_PORTE_LEDS << LEDS_PORTE_MASK_SHIFT);
PORTF_OUTCLR = (LEDMask & LEDS_PORTF_LEDS);
PORTE_OUTSET = ((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT);
}
static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
{
PORTF_OUT = (PORTF.OUT & (~LEDMask & LEDS_PORTF_LEDS)) | (ActiveMask & LEDS_PORTF_LEDS);
PORTE_OUT = (PORTF.OUT & (((~LEDMask & LEDS_PORTF_LEDS)) << LEDS_PORTE_MASK_SHIFT) &
~((ActiveMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT));
}
static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
{
PORTF_OUTTGL = (LEDMask & LEDS_PORTF_LEDS);
PORTE_OUTTGL = ((LEDMask & LEDS_PORTE_LEDS) << LEDS_PORTE_MASK_SHIFT);
}
static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
static inline uint8_t LEDs_GetLEDs(void)
{
return ((~PORTF_OUT & LEDS_PORTF_LEDS) | (PORTE_OUT & (LEDS_PORTE_LEDS << LEDS_PORTE_MASK_SHIFT)));
}
#endif
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
}
#endif
#endif
/** @} */
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