29#if HAL_USE_SPI || defined(__DOXYGEN__)
41#define SPI_SUPPORTS_CIRCULAR TRUE
56#if !defined(KINETIS_SPI_USE_SPI0) || defined(__DOXYGEN__)
57#define KINETIS_SPI_USE_SPI0 FALSE
63#if !defined(KINETIS_SPI_SPI0_IRQ_PRIORITY) || defined(__DOXYGEN__)
64#define KINETIS_SPI_SPI0_IRQ_PRIORITY 10
72#if !defined(KINETIS_SPI_USE_SPI1) || defined(__DOXYGEN__)
73#define KINETIS_SPI_USE_SPI1 FALSE
79#if !defined(KINETIS_SPI_SPI1_IRQ_PRIORITY) || defined(__DOXYGEN__)
80#define KINETIS_SPI_SPI1_IRQ_PRIORITY 10
87#if KINETIS_SPI_USE_SPI0 && !KINETIS_HAS_SPI0
88#error "SPI0 not present in the selected device"
91#if KINETIS_SPI_USE_SPI1 && !KINETIS_HAS_SPI1
92#error "SPI1 not present in the selected device"
95#if KINETIS_SPI_USE_SPI0 && KINETIS_SPI_USE_SPI1
96#error "Only one SPI peripheral can be enabled"
99#if !(KINETIS_SPI_USE_SPI0 || KINETIS_SPI_USE_SPI1)
100#error "SPI driver activated but no SPI peripheral assigned"
103#if KINETIS_SPI_USE_SPI0 && \
104 !OSAL_IRQ_IS_VALID_PRIORITY(KINETIS_SPI_SPI0_IRQ_PRIORITY)
105#error "Invalid IRQ priority assigned to SPI0"
108#if KINETIS_SPI_USE_SPI1 && \
109 !OSAL_IRQ_IS_VALID_PRIORITY(KINETIS_SPI_SPI1_IRQ_PRIORITY)
110#error "Invalid IRQ priority assigned to SPI1"
128#define spi_lld_config_fields \
132 uint_fast8_t sspad; \
141#define spi_lld_driver_fields \
147 lpspi_transfer_t handleXfer; \
151 lpspi_master_handle_t masterHandle; \
153 lpspi_slave_handle_t slaveHandle
160#define KINETIS_SPI_TAR_SYSCLK_DIV_2(n)\
161 SPIx_CTARn_FMSZ((n) - 1) | \
165 SPIx_CTARn_PBR(0) | \
167 SPIx_CTARn_CSSCK(0) | \
168 SPIx_CTARn_ASC(0) | \
172#define KINETIS_SPI_TAR_SYSCLK_DIV_4096(n) \
173 SPIx_CTARn_FMSZ(((n) - 1)) | \
176 SPIx_CTARn_PBR(0) | \
177 SPIx_CTARn_BR(0xB) | \
178 SPIx_CTARn_CSSCK(0xB) | \
179 SPIx_CTARn_ASC(0x7) | \
182#define KINETIS_SPI_TAR_8BIT_FAST KINETIS_SPI_TAR_SYSCLK_DIV_2(8)
183#define KINETIS_SPI_TAR_8BIT_SLOW KINETIS_SPI_TAR_SYSCLK_DIV_4096(8)
185#define KINETIS_SPI_TAR0_DEFAULT KINETIS_SPI_TAR_SYSCLK_DIV_2(8)
186#define KINETIS_SPI_TAR1_DEFAULT KINETIS_SPI_TAR_SYSCLK_DIV_2(8)
192#if KINETIS_SPI_USE_SPI0 && !defined(__DOXYGEN__)
193extern SPIDriver
SPID1;
196#if KINETIS_SPI_USE_SPI1 && !defined(__DOXYGEN__)
197extern SPIDriver
SPID2;
210 const void *txbuf,
void *rxbuf);
211 void spi_lld_send(SPIDriver *spip,
size_t n,
const void *txbuf);
213#if (SPI_SUPPORTS_CIRCULAR == TRUE) || defined(__DOXYGEN__)
void spi_lld_ignore(SPIDriver *spip, size_t n)
Ignores data on the SPI bus.
SPIDriver SPID1
SPI0 driver identifier.
void spi_lld_abort(SPIDriver *spip)
Aborts the ongoing SPI operation, if any.
void spi_lld_select(SPIDriver *spip)
Asserts the slave select signal and prepares for transfers.
void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf)
Receives data from the SPI bus.
void spi_lld_init(void)
Low level SPI driver initialization.
void spi_lld_exchange(SPIDriver *spip, size_t n, const void *txbuf, void *rxbuf)
Exchanges data on the SPI bus.
void spi_lld_stop(SPIDriver *spip)
Deactivates the SPI peripheral.
void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf)
Sends data over the SPI bus.
uint16_t spi_lld_polled_exchange(SPIDriver *spip, uint16_t frame)
Exchanges one frame using a polled wait.
void(* spicallback_t)(SPIDriver *spip)
SPI notification callback type.
void spi_lld_start(SPIDriver *spip)
Configures and activates the SPI peripheral.
SPIDriver SPID2
SPI1 driver identifier.
void spi_lld_unselect(SPIDriver *spip)
Deasserts the slave select signal.