16static void SPI_send8(
SPI_t *, uint16_t);
17static void SPI_send16(
SPI_t *, uint16_t);
19static void SPI_receive8(
SPI_t *,
volatile uint16_t *);
20static void SPI_receive16(
SPI_t *,
volatile uint16_t *);
22static void _SPI_init(SPI_TypeDef *,
SPI_Config *);
38 if (interface == NULL)
39 return (
SPI_t){.interface = NULL};
42 SPI_t spi = {.interface = interface};
48 spi.
send = (spi.
config.
DFF == SPI_DFF8) ? SPI_send8 : SPI_send16;
71static void _SPI_init(SPI_TypeDef *interface,
SPI_Config *config) {
73 while (interface->SR & SPI_SR_BSY);
77 interface->CR1 = *(uint16_t *)config;
81 interface->CR1 = *(uint16_t *)config;
97 volatile uint16_t response;
114static void SPI_send8(
SPI_t *spi, uint16_t data) {
115 while (!(spi->
interface->SR & SPI_SR_TXE));
119static void SPI_send16(
SPI_t *spi, uint16_t data) {
120 while (!(spi->
interface->SR & SPI_SR_TXE));
134static void SPI_receive8(
SPI_t *spi,
volatile uint16_t *data) {
135 while (!(spi->
interface->SR & SPI_SR_RXNE));
149static void SPI_receive16(
SPI_t *spi,
volatile uint16_t *data) {
150 while (!(spi->
interface->SR & SPI_SR_RXNE));
168 if (config == NULL) {
169 config = &SPI_CONFIG_DEFAULT;
SPI_DataFormat DFF
SPI data format | (default SPI_DFF8)
void(* send)(struct SPI *, uint16_t)
SPI send method.
uint16_t(* transmit)(struct SPI *, uint16_t)
SPI transmit method.
bool SPE
SPI enable | (default false)
void(* updateConfig)(struct SPI *, SPI_Config *)
SPI configuration update method.
SPI_Config config
Configuration parameters for the SPI peripheral.
void(* receive)(struct SPI *, volatile uint16_t *)
SPI receive method.
SPI_TypeDef * interface
Pointer to SPI interface struct.
SPI_t SPI_init(SPI_TypeDef *interface, SPI_Config *config)
Initialiser for an SPI device interface.
uint16_t SPI_transmit(SPI_t *, uint16_t)
Instance method to communicate a SPI transaction with slave device.
void SPI_updateConfig(SPI_t *spi, SPI_Config *config)
Update SPI peripheral configuration.
SPI CR1 configuration struct.
Struct definition for SPI interface. Provides the interface for API consumers to interact with the SP...