Mbed OS Reference
|
Functions | |
bool | spi_master_transfer (spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint) |
Begin the asynchronous SPI transfer. More... | |
uint32_t | spi_irq_handler_asynch (spi_t *obj) |
The asynchronous IRQ handler. More... | |
uint8_t | spi_active (spi_t *obj) |
Attempts to determine if the SPI peripheral is already in use. More... | |
void | spi_abort_asynch (spi_t *obj) |
Abort an SPI transfer. More... | |
bool spi_master_transfer | ( | spi_t * | obj, |
const void * | tx, | ||
size_t | tx_length, | ||
void * | rx, | ||
size_t | rx_length, | ||
uint8_t | bit_width, | ||
uint32_t | handler, | ||
uint32_t | event, | ||
DMAUsage | hint | ||
) |
Begin the asynchronous SPI transfer.
Buffer pointers and lengths are specified in tx_buff and rx_buff.
If the device has a data cache, the Tx data is guaranteed to have been flushed from the cache to main memory already. Additionally, the Rx buffer is guaranteed to be cache aligned, and will be invalidated by the SPI layer after the transfer is complete.
[in] | obj | The SPI object that holds the transfer information |
[in] | tx | The transmit buffer |
[in] | tx_length | The number of bytes to transmit |
[in] | rx | The receive buffer |
[in] | rx_length | The number of bytes to receive |
[in] | bit_width | The bit width of buffer words |
[in] | event | The logical OR of events to be registered |
[in] | handler | SPI interrupt handler |
[in] | hint | A suggestion for how to use DMA with this transfer |
uint32_t spi_irq_handler_asynch | ( | spi_t * | obj | ) |
The asynchronous IRQ handler.
Reads the received values out of the RX FIFO, writes values into the TX FIFO and checks for transfer termination conditions, such as buffer overflows or transfer complete.
[in] | obj | The SPI object that holds the transfer information |
uint8_t spi_active | ( | spi_t * | obj | ) |
Attempts to determine if the SPI peripheral is already in use.
If a temporary DMA channel has been allocated, peripheral is in use. If a permanent DMA channel has been allocated, check if the DMA channel is in use. If not, proceed as though no DMA channel were allocated. If no DMA channel is allocated, check whether tx and rx buffers have been assigned. For each assigned buffer, check if the corresponding buffer position is less than the buffer length. If buffers do not indicate activity, check if there are any bytes in the FIFOs.
[in] | obj | The SPI object to check for activity |
void spi_abort_asynch | ( | spi_t * | obj | ) |
Abort an SPI transfer.
obj | The SPI peripheral to stop |