SPI abstraction layer RIOT adaption. More...
SPI abstraction layer RIOT adaption.
Definition in file hal_spi.h.
#include "periph/spi.h"
Go to the source code of this file.
Data Structures | |
struct | hal_spi_settings |
since one spi device can control multiple devices, some configuration can be changed on the fly from the hal More... | |
Macros | |
#define | HAL_SPI_MODE0 (SPI_MODE_0) |
SPI mode 0. | |
#define | HAL_SPI_MODE1 (SPI_MODE_1) |
SPI mode 1. | |
#define | HAL_SPI_MODE2 (SPI_MODE_2) |
SPI mode 2. | |
#define | HAL_SPI_MODE3 (SPI_MODE_3) |
SPI mode 3. | |
Typedefs | |
typedef void(* | hal_spi_txrx_cb) (void *arg, int len) |
Prototype for tx/rx callback. | |
Functions | |
int | hal_spi_config (int spi_num, struct hal_spi_settings *psettings) |
Configure the spi. More... | |
int | hal_spi_set_txrx_cb (int spi_num, hal_spi_txrx_cb txrx_cb, void *arg) |
Sets the txrx callback (executed at interrupt context) when the buffer is transferred by the master or the slave using the non-blocking API. More... | |
int | hal_spi_enable (int spi_num) |
Enables the SPI. More... | |
int | hal_spi_disable (int spi_num) |
Disables the SPI. More... | |
int | hal_spi_txrx (int spi_num, void *txbuf, void *rxbuf, int cnt) |
Blocking interface to send a buffer and store the received values from the slave. More... | |
int | hal_spi_txrx_noblock (int spi_num, void *txbuf, void *rxbuf, int cnt) |
Non-blocking interface to send a buffer and store received values. More... | |
int hal_spi_config | ( | int | spi_num, |
struct hal_spi_settings * | psettings | ||
) |
Configure the spi.
Must be called after the spi is initialized (after hal_spi_init is called) and when the spi is disabled (user must call hal_spi_disable if the spi has been enabled through hal_spi_enable prior to calling this function). Can also be used to reconfigure an initialized SPI (assuming it is disabled as described previously).
spi_num | The number of the SPI to configure. |
psettings | The settings to configure this SPI with |
int hal_spi_disable | ( | int | spi_num | ) |
Disables the SPI.
Used for power mgmt. It will halt any current SPI transfers in progress.
spi_num |
int hal_spi_enable | ( | int | spi_num | ) |
Enables the SPI.
This does not start a transmit or receive operation; it is used for power mgmt. Cannot be called when a SPI transfer is in progress.
spi_num |
int hal_spi_set_txrx_cb | ( | int | spi_num, |
hal_spi_txrx_cb | txrx_cb, | ||
void * | arg | ||
) |
Sets the txrx callback (executed at interrupt context) when the buffer is transferred by the master or the slave using the non-blocking API.
Cannot be called when the spi is enabled. This callback will also be called when chip select is de-asserted on the slave.
NOTE: This callback is only used for the non-blocking interface and must be called prior to using the non-blocking API.
spi_num | SPI interface on which to set callback |
txrx_cb | Callback function |
arg | Argument to be passed to callback function |
int hal_spi_txrx | ( | int | spi_num, |
void * | txbuf, | ||
void * | rxbuf, | ||
int | cnt | ||
) |
Blocking interface to send a buffer and store the received values from the slave.
The transmit and receive buffers are either arrays of 8-bit (uint8_t) values or 16-bit values depending on whether the spi is configured for 8 bit data or more than 8 bits per value. The 'cnt' parameter is the number of 8-bit or 16-bit values. Thus, if 'cnt' is 10, txbuf/rxbuf would point to an array of size 10 (in bytes) if the SPI is using 8-bit data; otherwise txbuf/rxbuf would point to an array of size 20 bytes (ten, uint16_t values).
NOTE: these buffers are in the native endian-ness of the platform.
MASTER: master sends all the values in the buffer and stores the stores the values in the receive buffer if rxbuf is not NULL. The txbuf parameter cannot be NULL. SLAVE: cannot be called for a slave; returns -1
spi_num | SPI interface to use |
txbuf | Pointer to buffer where values to transmit are stored. |
rxbuf | Pointer to buffer to store values received from peer. |
cnt | Number of 8-bit or 16-bit values to be transferred. |
int hal_spi_txrx_noblock | ( | int | spi_num, |
void * | txbuf, | ||
void * | rxbuf, | ||
int | cnt | ||
) |
Non-blocking interface to send a buffer and store received values.
Can be used for both master and slave SPI types. The user must configure the callback (using hal_spi_set_txrx_cb); the txrx callback is executed at interrupt context when the buffer is sent.
The transmit and receive buffers are either arrays of 8-bit (uint8_t) values or 16-bit values depending on whether the spi is configured for 8 bit data or more than 8 bits per value. The 'cnt' parameter is the number of 8-bit or 16-bit values. Thus, if 'cnt' is 10, txbuf/rxbuf would point to an array of size 10 (in bytes) if the SPI is using 8-bit data; otherwise txbuf/rxbuf would point to an array of size 20 bytes (ten, uint16_t values).
NOTE: these buffers are in the native endian-ness of the platform.
MASTER: master sends all the values in the buffer and stores the stores the values in the receive buffer if rxbuf is not NULL. The txbuf parameter cannot be NULL SLAVE: Slave "preloads" the data to be sent to the master (values stored in txbuf) and places received data from master in rxbuf (if not NULL). The txrx callback occurs when len values are transferred or master de-asserts chip select. If txbuf is NULL, the slave transfers its default byte. Both rxbuf and txbuf cannot be NULL.
spi_num | SPI interface to use |
txbuf | Pointer to buffer where values to transmit are stored. |
rxbuf | Pointer to buffer to store values received from peer. |
cnt | Number of 8-bit or 16-bit values to be transferred. |