@@ -61,6 +61,8 @@ static void configure_gpios(spi_dev *dev, bool as_master);
61
61
62
62
static spi_baud_rate determine_baud_rate (spi_dev *dev, uint32_t freq);
63
63
64
+ static uint16_t ff = 0XFFFF ;
65
+
64
66
#if (BOARD_NR_SPI >= 3) && !defined(STM32_HIGH_DENSITY)
65
67
#error "The SPI library is misconfigured: 3 SPI ports only available on high density STM32 devices"
66
68
#endif
@@ -270,6 +272,7 @@ If someone finds this is not the case or sees a logic error with this let me kno
270
272
271
273
void SPIClass::beginTransaction (uint8_t pin, SPISettings settings)
272
274
{
275
+ (void )pin; // unused
273
276
setBitOrder (settings.bitOrder );
274
277
setDataMode (settings.dataMode );
275
278
setDataSize (settings.dataSize );
@@ -412,13 +415,13 @@ void SPIClass::dmaTransferSet(const void *transmitBuf, void *receiveBuf) {
412
415
dma_setup_transfer (_currentSetting->spiDmaDev , _currentSetting->spiRxDmaChannel , &_currentSetting->spi_d ->regs ->DR , dma_bit_size,
413
416
receiveBuf, dma_bit_size, (DMA_MINC_MODE | DMA_TRNS_CMPLT ));// receive buffer DMA
414
417
if (!transmitBuf) {
415
- transmitBuf = &ff;
416
- dma_setup_transfer (_currentSetting->spiDmaDev , _currentSetting->spiTxDmaChannel , &_currentSetting->spi_d ->regs ->DR , dma_bit_size,
417
- (volatile void *)transmitBuf, dma_bit_size, (DMA_FROM_MEM));// Transmit FF repeatedly
418
+ transmitBuf = &ff;
419
+ dma_setup_transfer (_currentSetting->spiDmaDev , _currentSetting->spiTxDmaChannel , &_currentSetting->spi_d ->regs ->DR , dma_bit_size,
420
+ (volatile void *)transmitBuf, dma_bit_size, (DMA_FROM_MEM));// Transmit FF repeatedly
418
421
}
419
422
else {
420
- dma_setup_transfer (_currentSetting->spiDmaDev , _currentSetting->spiTxDmaChannel , &_currentSetting->spi_d ->regs ->DR , dma_bit_size,
421
- (volatile void *)transmitBuf, dma_bit_size, (DMA_MINC_MODE | DMA_FROM_MEM ));// Transmit buffer DMA
423
+ dma_setup_transfer (_currentSetting->spiDmaDev , _currentSetting->spiTxDmaChannel , &_currentSetting->spi_d ->regs ->DR , dma_bit_size,
424
+ (volatile void *)transmitBuf, dma_bit_size, (DMA_MINC_MODE | DMA_FROM_MEM ));// Transmit buffer DMA
422
425
}
423
426
dma_set_priority (_currentSetting->spiDmaDev , _currentSetting->spiTxDmaChannel , DMA_PRIORITY_LOW);
424
427
dma_set_priority (_currentSetting->spiDmaDev , _currentSetting->spiRxDmaChannel , DMA_PRIORITY_VERY_HIGH);
@@ -468,6 +471,12 @@ uint8 SPIClass::dmaTransfer(const void *transmitBuf, void *receiveBuf, uint16 le
468
471
return dmaTransferRepeat (length);
469
472
}
470
473
474
+ uint8 SPIClass::dmaTransfer (const uint16 value, void *receiveBuf, uint16 length) {
475
+ ff = value;
476
+ dmaTransferSet (NULL , receiveBuf);
477
+ return dmaTransferRepeat (length);
478
+ }
479
+
471
480
/* Roger Clark and Victor Perez, 2015
472
481
* Performs a DMA SPI send using a TX buffer.
473
482
* On exit TX buffer is not modified.
@@ -782,11 +791,11 @@ static const spi_baud_rate baud_rates[8] __FLASH__ = {
782
791
* (CYCLES_PER_MICROSECOND == 72, APB2 at 72MHz, APB1 at 36MHz).
783
792
*/
784
793
static spi_baud_rate determine_baud_rate (spi_dev *dev, uint32_t freq) {
785
- uint32_t clock ;
794
+ uint32_t clock = 0 ;
786
795
switch (rcc_dev_clk (dev->clk_id )) {
787
796
case RCC_APB2: clock = STM32_PCLK2; break ; // 72 Mhz
788
797
case RCC_APB1: clock = STM32_PCLK1; break ; // 36 Mhz
789
- case RCC_AHB: clock = 0 ; break ; // There is no SPI on this bus, but it removes warning
798
+ case RCC_AHB: break ; // There is no SPI on this bus, but it removes warning
790
799
}
791
800
clock /= 2 ;
792
801
uint32_t i = 0 ;
0 commit comments