LUFA Library  120219
SPI Peripheral Driver (AVR8)

Functions

static void SPI_Init (const uint8_t SPIOptions)
static void SPI_Disable (void)
static uint8_t SPI_GetCurrentMode (void) ATTR_ALWAYS_INLINE
static uint8_t SPI_TransferByte (const uint8_t Byte) ATTR_ALWAYS_INLINE
static void SPI_SendByte (const uint8_t Byte) ATTR_ALWAYS_INLINE
static uint8_t SPI_ReceiveByte (void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT

SPI Prescaler Configuration Masks

#define SPI_SPEED_FCPU_DIV_2   SPI_USE_DOUBLESPEED
#define SPI_SPEED_FCPU_DIV_4   0
#define SPI_SPEED_FCPU_DIV_8   (SPI_USE_DOUBLESPEED | (1 << SPR0))
#define SPI_SPEED_FCPU_DIV_16   (1 << SPR0)
#define SPI_SPEED_FCPU_DIV_32   (SPI_USE_DOUBLESPEED | (1 << SPR1))
#define SPI_SPEED_FCPU_DIV_64   (SPI_USE_DOUBLESPEED | (1 << SPR1) | (1 << SPR0))
#define SPI_SPEED_FCPU_DIV_128   ((1 << SPR1) | (1 << SPR0))

SPI SCK Polarity Configuration Masks

#define SPI_SCK_LEAD_RISING   (0 << CPOL)
#define SPI_SCK_LEAD_FALLING   (1 << CPOL)

SPI Sample Edge Configuration Masks

#define SPI_SAMPLE_LEADING   (0 << CPHA)
#define SPI_SAMPLE_TRAILING   (1 << CPHA)

SPI Data Ordering Configuration Masks

#define SPI_ORDER_MSB_FIRST   (0 << DORD)
#define SPI_ORDER_LSB_FIRST   (1 << DORD)

SPI Mode Configuration Masks

#define SPI_MODE_SLAVE   (0 << MSTR)
#define SPI_MODE_MASTER   (1 << MSTR)

Detailed Description

Module Description

Driver for the hardware SPI port available on most 8-bit AVR microcontroller models. This module provides an easy to use driver for the setup and transfer of data over the AVR's SPI port.

Note:
This file should not be included directly. It is automatically included as needed by the SPI driver dispatch header located in LUFA/Drivers/Peripheral/SPI.h.

Example Usage

The following snippet is an example of how this module may be used within a typical application.

      // Initialize the SPI driver before first use
      SPI_Init(SPI_SPEED_FCPU_DIV_2 | SPI_ORDER_MSB_FIRST | SPI_SCK_LEAD_FALLING |
               SPI_SAMPLE_TRAILING | SPI_MODE_MASTER);

      // Send several bytes, ignoring the returned data
      SPI_SendByte(0x01);
      SPI_SendByte(0x02);
      SPI_SendByte(0x03);

      // Receive several bytes, sending a dummy 0x00 byte each time
      uint8_t Byte1 = SPI_ReceiveByte();
      uint8_t Byte2 = SPI_ReceiveByte();
      uint8_t Byte3 = SPI_ReceiveByte();

      // Send a byte, and store the received byte from the same transaction
      uint8_t ResponseByte = SPI_TransferByte(0xDC);

Define Documentation

#define SPI_MODE_MASTER   (1 << MSTR)

SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into master mode.

#define SPI_MODE_SLAVE   (0 << MSTR)

SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into slave mode.

#define SPI_ORDER_LSB_FIRST   (1 << DORD)

SPI data order mask for SPI_Init(). Indicates that data should be shifted out LSB first.

#define SPI_ORDER_MSB_FIRST   (0 << DORD)

SPI data order mask for SPI_Init(). Indicates that data should be shifted out MSB first.

#define SPI_SAMPLE_LEADING   (0 << CPHA)

SPI data sample mode mask for SPI_Init(). Indicates that the data should sampled on the leading edge.

#define SPI_SAMPLE_TRAILING   (1 << CPHA)

SPI data sample mode mask for SPI_Init(). Indicates that the data should be sampled on the trailing edge.

#define SPI_SCK_LEAD_FALLING   (1 << CPOL)

SPI clock polarity mask for SPI_Init(). Indicates that the SCK should lead on the falling edge.

#define SPI_SCK_LEAD_RISING   (0 << CPOL)

SPI clock polarity mask for SPI_Init(). Indicates that the SCK should lead on the rising edge.

#define SPI_SPEED_FCPU_DIV_128   ((1 << SPR1) | (1 << SPR0))

SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 128.

#define SPI_SPEED_FCPU_DIV_16   (1 << SPR0)

SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 16.

#define SPI_SPEED_FCPU_DIV_2   SPI_USE_DOUBLESPEED

SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 2.

#define SPI_SPEED_FCPU_DIV_32   (SPI_USE_DOUBLESPEED | (1 << SPR1))

SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 32.

#define SPI_SPEED_FCPU_DIV_4   0

SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 4.

#define SPI_SPEED_FCPU_DIV_64   (SPI_USE_DOUBLESPEED | (1 << SPR1) | (1 << SPR0))

SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 64.

#define SPI_SPEED_FCPU_DIV_8   (SPI_USE_DOUBLESPEED | (1 << SPR0))

SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 8.


Function Documentation

static void SPI_Disable ( void  ) [inline, static]

Turns off the SPI driver, disabling and returning used hardware to their default configuration.

static uint8_t SPI_GetCurrentMode ( void  ) [inline, static]

Retrieves the currently selected SPI mode, once the SPI interface has been configured.

Returns:
SPI_MODE_MASTER if the interface is currently in SPI Master mode, SPI_MODE_SLAVE otherwise
static void SPI_Init ( const uint8_t  SPIOptions) [inline, static]

Initializes the SPI subsystem, ready for transfers. Must be called before calling any other SPI routines.

Parameters:
[in]SPIOptionsSPI Options, a mask consisting of one of each of the SPI_SPEED_*, SPI_SCK_*, SPI_SAMPLE_*, SPI_ORDER_* and SPI_MODE_* masks.
static uint8_t SPI_ReceiveByte ( void  ) [inline, static]

Sends a dummy byte through the SPI interface, blocking until the transfer is complete. The response byte from the attached SPI device is returned.

Returns:
The response byte from the attached SPI device.
static void SPI_SendByte ( const uint8_t  Byte) [inline, static]

Sends a byte through the SPI interface, blocking until the transfer is complete. The response byte sent to from the attached SPI device is ignored.

Parameters:
[in]ByteByte to send through the SPI interface.
static uint8_t SPI_TransferByte ( const uint8_t  Byte) [inline, static]

Sends and receives a byte through the SPI interface, blocking until the transfer is complete.

Parameters:
[in]ByteByte to send through the SPI interface.
Returns:
Response byte from the attached SPI device.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines