#include "bsp/spi.h" /* Private variables ---------------------------------------------------------*/ #define SX1281_SPI_DMA 0 static volatile bool spi_done = false; /* -------------- 局部回调 -------------- */ static void txrx_cplt_cb(void) { spi_done = false; } static void tx_cplt_cb (void) { spi_done = false; } void SpiInit( void ) { BSP_SPI_RegisterCallback(BSP_SPI_SX1281, BSP_SPI_TX_RX_CPLT_CB, txrx_cplt_cb); BSP_SPI_RegisterCallback(BSP_SPI_SX1281, BSP_SPI_TX_CPLT_CB, tx_cplt_cb); } void SpiInOut( uint8_t *txBuffer, uint8_t *rxBuffer, uint16_t size ) { spi_done = true; BSP_SPI_TransmitReceive(BSP_SPI_SX1281, txBuffer, rxBuffer, size, SX1281_SPI_DMA); // true = DMA // wait_done(); } void SpiIn( uint8_t *txBuffer, uint16_t size ) { spi_done = true; BSP_SPI_Transmit(BSP_SPI_SX1281, txBuffer, size, SX1281_SPI_DMA); // wait_done(); } static void wait_done(void) { while (spi_done) { /* 空转,或者换成 OS 延时/信号量 */ } } void SpiDeInit( void ) { /* 注销回调或直接留空 */ }