void SPI1_IRQHandler(void) { static rt_uint8_t is_cmd; static rt_uint8_t cmd; rt_interrupt_enter(); if(spi_is_rx_nonempty(spi1.c_dev())) { nvic_irq_disable(NVIC_SPI1); if(!is_cmd) { cmd = spi1.read(); } is_cmd = !is_cmd; wrtnode2r_spi_bridge_rx_isr(cmd, is_cmd); nvic_irq_enable(NVIC_SPI1); } rt_interrupt_leave(); }
//------------------------------------------------------------------------------ void SdSpi::send(const uint8_t* buf , size_t n) { #if USE_STM32F1_DMAC // spiDmaTX(buf, n); // while (SPI_DMA_TX_Active) {} SPI.dmaSend(const_cast<uint8*>(buf), n); // uint32_t m = millis(); // while (SPI_DMA_TX_Active) { // if ((millis() - m) > STM32F1_DMA_TIMEOUT) { // dmac_channel_disable(SPI_DMAC_TX_CH); // break; // } // } #else // #if USE_STM32F1_DMAC SPI.write (buf, n); if (spi_is_rx_nonempty(SPI1)) { uint8_t b = spi_rx_reg(SPI1); } #endif // #if USE_STM32F1_DMAC // leave RDR empty // while (spi_is_rx_nonempty(SPI1)) // uint8_t b = SPI.read(); // uint8_t b = spi_rx_reg(SPI1); }