Serial Peripheral Interface (SPI) driver for SAM.
Copyright (c) 2011-2018 Microchip Technology Inc. and its subsidiaries.
#include "compiler.h"
Macros | |
#define | spi_get_pcs(chip_sel_id) ((~(1u<<(chip_sel_id)))&0xF) |
Generate Peripheral Chip Select Value from Chip Select ID. More... | |
#define | SPI_TIMEOUT 15000 |
Time-out value (number of attempts). More... | |
Typedefs | |
typedef enum spi_cs_behavior | spi_cs_behavior_t |
SPI Chip Select behavior modes while transferring. More... | |
Enumerations | |
enum | spi_cs_behavior { SPI_CS_KEEP_LOW = SPI_CSR_CSAAT, SPI_CS_RISE_NO_TX = 0, SPI_CS_RISE_FORCED = SPI_CSR_CSNAAT } |
SPI Chip Select behavior modes while transferring. More... | |
enum | spi_status_t { SPI_ERROR = -1, SPI_OK = 0, SPI_ERROR_TIMEOUT = 1, SPI_ERROR_ARGUMENT, SPI_ERROR_OVERRUN, SPI_ERROR_MODE_FAULT, SPI_ERROR_OVERRUN_AND_MODE_FAULT } |
Status codes used by the SPI driver. More... | |
Functions | |
int16_t | spi_calc_baudrate_div (const uint32_t baudrate, uint32_t mck) |
Calculate the baudrate divider. More... | |
void | spi_configure_cs_behavior (Spi *p_spi, uint32_t ul_pcs_ch, uint32_t ul_cs_behavior) |
Configure CS behavior for SPI transfer (spi_cs_behavior_t). More... | |
static void | spi_disable (Spi *p_spi) |
Disable SPI. More... | |
void | spi_disable_clock (Spi *p_spi) |
Disable SPI clock. More... | |
static void | spi_disable_interrupt (Spi *p_spi, uint32_t ul_sources) |
Disable SPI interrupts. More... | |
static void | spi_disable_loopback (Spi *p_spi) |
Disable loopback mode. More... | |
static void | spi_disable_mode_fault_detect (Spi *p_spi) |
Disable Mode Fault Detection. More... | |
static void | spi_disable_peripheral_select_decode (Spi *p_spi) |
Disable Peripheral Select Decode. More... | |
static void | spi_disable_tx_on_rx_empty (Spi *p_spi) |
Disable waiting RX_EMPTY before transfer starts. More... | |
static void | spi_enable (Spi *p_spi) |
Enable SPI. More... | |
void | spi_enable_clock (Spi *p_spi) |
Enable SPI clock. More... | |
static void | spi_enable_interrupt (Spi *p_spi, uint32_t ul_sources) |
Enable SPI interrupts. More... | |
static void | spi_enable_loopback (Spi *p_spi) |
Enable loopback mode. More... | |
static void | spi_enable_mode_fault_detect (Spi *p_spi) |
Enable Mode Fault Detection. More... | |
static void | spi_enable_peripheral_select_decode (Spi *p_spi) |
Enable Peripheral Select Decode. More... | |
static void | spi_enable_tx_on_rx_empty (Spi *p_spi) |
Enable waiting RX_EMPTY before transfer starts. More... | |
static uint16_t | spi_get (Spi *p_spi) |
Get one data to a SPI peripheral. More... | |
static uint32_t | spi_get_mode (Spi *p_spi) |
Get SPI work mode. More... | |
static uint32_t | spi_get_mode_fault_detect_setting (Spi *p_spi) |
Check if mode fault detection is enabled. More... | |
static Pdc * | spi_get_pdc_base (Spi *p_spi) |
Get PDC registers base address. More... | |
static uint32_t | spi_get_peripheral_select_decode_setting (Spi *p_spi) |
Get Peripheral Select Decode mode. More... | |
static uint32_t | spi_get_peripheral_select_mode (Spi *p_spi) |
Get Peripheral Select mode. More... | |
static void * | spi_get_rx_access (Spi *p_spi) |
Get receive data register address for DMA operation. More... | |
static void * | spi_get_tx_access (Spi *p_spi) |
Get transmit data register address for DMA operation. More... | |
static uint32_t | spi_get_tx_on_rx_empty_setting (Spi *p_spi) |
Check if SPI waits RX_EMPTY before transfer starts. More... | |
uint32_t | spi_get_writeprotect_status (Spi *p_spi) |
Indicate write protect status. More... | |
static uint32_t | spi_is_enabled (Spi *p_spi) |
Test if the SPI is enabled. More... | |
static uint32_t | spi_is_rx_full (Spi *p_spi) |
Check if the SPI contains a received character. More... | |
static uint32_t | spi_is_rx_ready (Spi *p_spi) |
Check if all receptions are ready. More... | |
static uint32_t | spi_is_tx_empty (Spi *p_spi) |
Check if all transmissions are complete. More... | |
static uint32_t | spi_is_tx_ready (Spi *p_spi) |
Check if all transmissions are ready. More... | |
static void | spi_put (Spi *p_spi, uint16_t data) |
Put one data to a SPI peripheral. More... | |
spi_status_t | spi_read (Spi *p_spi, uint16_t *us_data, uint8_t *p_pcs) |
Read the received data and it's peripheral chip select value. More... | |
static uint32_t | spi_read_interrupt_mask (Spi *p_spi) |
Read SPI interrupt mask. More... | |
static uint32_t | spi_read_status (Spi *p_spi) |
Read status register. More... | |
static void | spi_reset (Spi *p_spi) |
Reset SPI and set it to Slave mode. More... | |
int16_t | spi_set_baudrate_div (Spi *p_spi, uint32_t ul_pcs_ch, uint8_t uc_baudrate_divider) |
Set Serial Clock Baud Rate divider value (SCBR). More... | |
void | spi_set_bits_per_transfer (Spi *p_spi, uint32_t ul_pcs_ch, uint32_t ul_bits) |
Set number of bits per transfer. More... | |
void | spi_set_clock_phase (Spi *p_spi, uint32_t ul_pcs_ch, uint32_t ul_phase) |
Set Data Capture Phase. More... | |
void | spi_set_clock_polarity (Spi *p_spi, uint32_t ul_pcs_ch, uint32_t ul_polarity) |
Set clock default state. More... | |
void | spi_set_delay_between_chip_select (Spi *p_spi, uint32_t ul_delay) |
Set delay between chip selects (in number of MCK clocks). More... | |
static void | spi_set_fixed_peripheral_select (Spi *p_spi) |
Set Fixed Peripheral Select. More... | |
static void | spi_set_lastxfer (Spi *p_spi) |
Issue a LASTXFER command. More... | |
static void | spi_set_master_mode (Spi *p_spi) |
Set SPI to Master mode. More... | |
void | spi_set_peripheral_chip_select_value (Spi *p_spi, uint32_t ul_value) |
Set Peripheral Chip Select (PCS) value. More... | |
static void | spi_set_slave_mode (Spi *p_spi) |
Set SPI to Slave mode. More... | |
void | spi_set_transfer_delay (Spi *p_spi, uint32_t ul_pcs_ch, uint8_t uc_dlybs, uint8_t uc_dlybct) |
Configure timing for SPI transfer. More... | |
static void | spi_set_variable_peripheral_select (Spi *p_spi) |
Set Variable Peripheral Select. More... | |
void | spi_set_writeprotect (Spi *p_spi, uint32_t ul_enable) |
Enable or disable write protection of SPI registers. More... | |
spi_status_t | spi_write (Spi *p_spi, uint16_t us_data, uint8_t uc_pcs, uint8_t uc_last) |
Write the transmitted data with specified peripheral chip select value. More... | |
#define spi_get_pcs | ( | chip_sel_id | ) | ((~(1u<<(chip_sel_id)))&0xF) |
Generate Peripheral Chip Select Value from Chip Select ID.
chip_sel_id | The chip select number used |
#define SPI_TIMEOUT 15000 |
Time-out value (number of attempts).
Referenced by spi_read(), and spi_write().
typedef enum spi_cs_behavior spi_cs_behavior_t |
SPI Chip Select behavior modes while transferring.
enum spi_cs_behavior |
enum spi_status_t |
|
inlinestatic |
Disable SPI.
p_spi | Pointer to an SPI instance. |
Referenced by spi_master_initialize(), spi_slave_initialize(), and XDMAC_Handler().
|
inlinestatic |
Disable SPI interrupts.
p_spi | Pointer to an SPI instance. |
ul_sources | Interrupts to be disabled. |
|
inlinestatic |
Disable loopback mode.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Disable Mode Fault Detection.
p_spi | Pointer to an SPI instance. |
Referenced by spi_master_initialize(), and spi_slave_initialize().
|
inlinestatic |
Disable Peripheral Select Decode.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Disable waiting RX_EMPTY before transfer starts.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Enable SPI.
p_spi | Pointer to an SPI instance. |
Referenced by spi_master_initialize(), and spi_slave_initialize().
|
inlinestatic |
Enable SPI interrupts.
p_spi | Pointer to an SPI instance. |
ul_sources | Interrupts to be enabled. |
|
inlinestatic |
Enable loopback mode.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Enable Mode Fault Detection.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Enable Peripheral Select Decode.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Enable waiting RX_EMPTY before transfer starts.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Get one data to a SPI peripheral.
p_spi | Base address of the SPI instance. |
|
inlinestatic |
Get SPI work mode.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Check if mode fault detection is enabled.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Get PDC registers base address.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Get Peripheral Select Decode mode.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Get Peripheral Select mode.
p_spi | Pointer to an SPI instance. |
Referenced by spi_read(), and spi_write().
|
inlinestatic |
Get receive data register address for DMA operation.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Get transmit data register address for DMA operation.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Check if SPI waits RX_EMPTY before transfer starts.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Test if the SPI is enabled.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Check if the SPI contains a received character.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Check if all receptions are ready.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Check if all transmissions are complete.
p_spi | Pointer to an SPI instance. |
1 | if transmissions are complete. |
0 | if transmissions are not complete. |
|
inlinestatic |
Check if all transmissions are ready.
p_spi | Pointer to an SPI instance. |
1 | if transmissions are complete. |
0 | if transmissions are not complete. |
|
inlinestatic |
Put one data to a SPI peripheral.
p_spi | Base address of the SPI instance. |
data | The data byte to be loaded |
|
inlinestatic |
Read SPI interrupt mask.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Read status register.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Reset SPI and set it to Slave mode.
p_spi | Pointer to an SPI instance. |
Referenced by spi_master_initialize(), and spi_slave_initialize().
|
inlinestatic |
Set Fixed Peripheral Select.
Peripheral Chip Select is controlled by SPI_MR.
p_spi | Pointer to an SPI instance. |
|
inlinestatic |
Issue a LASTXFER command.
The next transfer is the last transfer and after that CS is de-asserted.
p_spi | Pointer to an SPI instance. |
Referenced by spi_master_initialize().
|
inlinestatic |
Set SPI to Master mode.
p_spi | Pointer to an SPI instance. |
Referenced by spi_master_initialize().
|
inlinestatic |
Set SPI to Slave mode.
p_spi | Pointer to an SPI instance. |
Referenced by spi_slave_initialize().
|
inlinestatic |
Set Variable Peripheral Select.
Peripheral Chip Select can be controlled by SPI_TDR.
p_spi | Pointer to an SPI instance. |