eLua platform interface - SPI
Overview
This part of the platform interface groups functions related to the SPI interface(s) of the MCU.
Data structures, constants and types
// SPI mode
#define PLATFORM_SPI_MASTER 1
#define PLATFORM_SPI_SLAVE 0
Constants used to select/deselect the SPI SS pin (if applicable).
// SS values
#define PLATFORM_SPI_SELECT_ON 1
#define PLATFORM_SPI_SELECT_OFF 0
Constants used to select/deselect the SPI SS pin (if applicable).
typedef u32 spi_data_type;
This is the type of a SPI data word, thus limiting the maximum size of a SPI data work to 32 bits (which should be enough for all practical purposes).
Functions
int platform_spi_exists( unsigned id );
Checks if the platform has the hardware SPI specified as argument. Implemented in src/common.c, it uses the NUM_SPI macro that must be defined in the platform's platform_conf.h file (see here for details). For example:
#define NUM_SPI 1 // The platform has 1 SPI interface
Arguments: id - SPI interface ID
Returns: 1 if the SPI interface exists, 0 otherwise
u32 platform_spi_setup( unsigned id, int mode, u32 clock, unsigned cpol, unsigned cpha, unsigned databits );
This function is used to initialize the parameters of the SPI interface. NOTE: currently, only master SPI mode is implemented in eLua.
Arguments:
- id - SPI interface ID
- mode - SPI port mode (PLATFORM_SPI_MASTER or PLATFORM_SPI_SLAVE, see here.
- clock - clock speed for the SPI interface in master mode.
- cpol - SPI clock polarity
- cpha - SPI clock phase
- databits - length of the SPI data word in bits (usually 8, but configurable on some platforms).
Returns: the actual clock set for the SPI interface. Depending on the hardware, this may have a different value than the clock argument.
spi_data_type platform_spi_send_recv( unsigned id, spi_data_type data );
Executes a SPI read/write cycle
Arguments:
- id - SPI interface ID
- data - data to be sent to the SPI interface
Returns: data read from the SPI interface
void platform_spi_select( unsigned id, int is_select );
For platforms that have a dedicates SS (Slave Select) pin in master SPI mode that can be controlled manually, this function should enable/disable this pin. If this functionality does not exist in hardware this function does nothing.
Arguments:
- id - SPI interface ID.
- is_select - PLATFORM_SPI_SELECT_ON to select, PLATFORM_SPI_SELECT_OFF to deselect , see here.
Returns: nothing.