gos_spi_device_t Struct Reference

SPI slave context used by gos_spi_master_transfer() More...

Data Fields

gos_spi_t port
 SPI peripheral used.
gos_gpio_t chip_select
 GPIO of slave's chip select, set as GOS_GPIO_INVALID if unused.
gos_spi_cs_callback_t cs_callback
 gos_spi_cs_callback_t invoked when asserting/de-asserting CS signal, set as NULL if unused
void * cs_callback_arg
 Optional argument supplied to gos_spi_cs_callback_t.
uint32_t speed
 Master clock speed in hertz.
gos_spi_flag_t flags
 Bus flags, see gos_spi_flag_t.
uint8_t bits
 Number of bits per frame.
bool lcd_bit8
 Bit 8 setting in 9 bit LCD mode.

Detailed Description

SPI slave context used by gos_spi_master_transfer()

Either the chip_select and/or cs_callback MUST be specified.

Gecko OS automatically locks the SPI peripheral based on:

  • Current thread
  • chip_select field
  • cs_callback field

This allows for multiple threads to safely access the same SPI peripheral.

If chip_select is GOS_GPIO_INVALID and the cs_callback function pointer is used to assert different SPI slave devices, then the function pointer should be different for each slave device. i.e.

void spi_slave1_cs_callback(void *arg, bool asserted)
io_expander_set(SPI_SLAVE1_GPIO, asserted);
void spi_slave2_cs_callback(void *arg, bool asserted)
io_expander_set(SPI_SLAVE2_GPIO, asserted);
gos_spi_device_t spi_slave1;
gos_spi_device_t spi_slave2;
spi_slave1.cs_callback = spi_slave1_cs_callback;
spi_slave2.cs_callback = spi_slave2_cs_callback;