Microchip® Advanced Software Framework

spi_interrupt.c File Reference

SAM Serial Peripheral Interface Driver.

Copyright (c) 2013-2018 Microchip Technology Inc. and its subsidiaries.

#include "spi_interrupt.h"

Functions

void _spi_interrupt_handler (uint8_t instance)
 
static void _spi_read (struct spi_module *const module)
 
static void _spi_read_buffer (struct spi_module *const module, uint8_t *rx_data, uint16_t length)
 
static void _spi_read_dummy (struct spi_module *const module)
 
static void _spi_transceive_buffer (struct spi_module *const module, uint8_t *tx_data, uint8_t *rx_data, uint16_t length)
 
static void _spi_write (struct spi_module *const module)
 
static void _spi_write_buffer (struct spi_module *const module, uint8_t *tx_data, uint16_t length)
 
static void _spi_write_dummy (struct spi_module *const module)
 
void spi_abort_job (struct spi_module *const module)
 Aborts an ongoing job. More...
 
enum status_code spi_read_buffer_job (struct spi_module *const module, uint8_t *rx_data, uint16_t length, uint16_t dummy)
 Asynchronous buffer read. More...
 
void spi_register_callback (struct spi_module *const module, spi_callback_t callback_func, enum spi_callback callback_type)
 Registers a SPI callback function. More...
 
enum status_code spi_transceive_buffer_job (struct spi_module *const module, uint8_t *tx_data, uint8_t *rx_data, uint16_t length)
 Asynchronous buffer write and read. More...
 
void spi_unregister_callback (struct spi_module *const module, enum spi_callback callback_type)
 Unregisters a SPI callback function. More...
 
enum status_code spi_write_buffer_job (struct spi_module *const module, uint8_t *tx_data, uint16_t length)
 Asynchronous buffer write. More...
 

Variables

uint16_t dummy_write
 

void _spi_interrupt_handler ( uint8_t  instance)

Handles interrupts as they occur, and it will run callback functions which are registered and enabled.

Note
This function will be called by the Sercom_Handler, and should not be called directly from any application code.
Parameters
[in]instanceID of the SERCOM instance calling the interrupt handler.

References _sercom_instances, _spi_read(), _spi_read_dummy(), _spi_write(), _spi_write_dummy(), SPI_CALLBACK_BUFFER_RECEIVED, SPI_CALLBACK_BUFFER_TRANSCEIVED, SPI_CALLBACK_BUFFER_TRANSMITTED, SPI_CALLBACK_COMBINED_ERROR, SPI_CALLBACK_ERROR, SPI_CALLBACK_SLAVE_SELECT_LOW, SPI_CALLBACK_SLAVE_TRANSMISSION_COMPLETE, SPI_INTERRUPT_FLAG_COMBINED_ERROR, SPI_INTERRUPT_FLAG_DATA_REGISTER_EMPTY, SPI_INTERRUPT_FLAG_RX_COMPLETE, SPI_INTERRUPT_FLAG_SLAVE_SELECT_LOW, SPI_INTERRUPT_FLAG_TX_COMPLETE, SPI_MODE_MASTER, SPI_MODE_SLAVE, STATUS_ERR_OVERFLOW, STATUS_OK, and UNUSED.

Referenced by spi_init().

static void _spi_read ( struct spi_module *const  module)
static

Reads a character from the Data register to the RX buffer.

Parameters
[in,out]modulePointer to SPI software instance struct

References SPI_CHARACTER_SIZE_9BIT.

Referenced by _spi_interrupt_handler().

static void _spi_read_buffer ( struct spi_module *const  module,
uint8_t *  rx_data,
uint16_t  length 
)
static

Setup SPI to read a buffer with a given length

Parameters
[in]modulePointer to SPI software instance struct
[in]rx_dataPointer to data to be received
[in]lengthLength of data buffer

References Assert, length, SPI_INTERRUPT_FLAG_DATA_REGISTER_EMPTY, SPI_INTERRUPT_FLAG_RX_COMPLETE, SPI_INTERRUPT_FLAG_SLAVE_SELECT_LOW, SPI_INTERRUPT_FLAG_TX_COMPLETE, SPI_MODE_MASTER, SPI_MODE_SLAVE, and STATUS_BUSY.

Referenced by spi_read_buffer_job().

static void _spi_read_dummy ( struct spi_module *const  module)
static

Writes a dummy character from the to the Data register.

Parameters
[in,out]modulePointer to SPI software instance struct

References UNUSED.

Referenced by _spi_interrupt_handler().

static void _spi_transceive_buffer ( struct spi_module *const  module,
uint8_t *  tx_data,
uint8_t *  rx_data,
uint16_t  length 
)
static

Starts transceive of buffers with a given length

Parameters
[in]modulePointer to SPI software instance struct
[in]rx_dataPointer to data to be received
[in]tx_dataPointer to data to be transmitted
[in]lengthLength of data buffer

References Assert, length, SPI_INTERRUPT_FLAG_DATA_REGISTER_EMPTY, SPI_INTERRUPT_FLAG_RX_COMPLETE, SPI_INTERRUPT_FLAG_TX_COMPLETE, SPI_MODE_SLAVE, STATUS_BUSY, and tx_data.

Referenced by spi_transceive_buffer_job().

static void _spi_write ( struct spi_module *const  module)
static

Writes a character from the TX buffer to the Data register.

Parameters
[in,out]modulePointer to SPI software instance struct

References SPI_CHARACTER_SIZE_9BIT.

Referenced by _spi_interrupt_handler().

static void _spi_write_buffer ( struct spi_module *const  module,
uint8_t *  tx_data,
uint16_t  length 
)
static

Starts write of a buffer with a given length

Parameters
[in]modulePointer to SPI software instance struct
[in]tx_dataPointer to data to be transmitted
[in]lengthLength of data buffer

References Assert, length, SPI_INTERRUPT_FLAG_DATA_REGISTER_EMPTY, SPI_INTERRUPT_FLAG_RX_COMPLETE, SPI_INTERRUPT_FLAG_TX_COMPLETE, SPI_MODE_SLAVE, STATUS_BUSY, and tx_data.

Referenced by spi_write_buffer_job().

static void _spi_write_dummy ( struct spi_module *const  module)
static

Writes a dummy character to the Data register.

Parameters
[in,out]modulePointer to SPI software instance struct

References dummy_write.

Referenced by _spi_interrupt_handler().

uint16_t dummy_write

Dummy byte to send when reading in master mode.

Referenced by _spi_write_dummy(), and spi_read_buffer_job().