Skip to content

Commit 162ecbf

Browse files
committed
F1: SPI: remove compiler warnings + fix SdFat compatibility
1 parent 83fbb07 commit 162ecbf

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

STM32F1/libraries/SPI/src/SPI.cpp

+16-7
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ static void configure_gpios(spi_dev *dev, bool as_master);
6161

6262
static spi_baud_rate determine_baud_rate(spi_dev *dev, uint32_t freq);
6363

64+
static uint16_t ff = 0XFFFF;
65+
6466
#if (BOARD_NR_SPI >= 3) && !defined(STM32_HIGH_DENSITY)
6567
#error "The SPI library is misconfigured: 3 SPI ports only available on high density STM32 devices"
6668
#endif
@@ -270,6 +272,7 @@ If someone finds this is not the case or sees a logic error with this let me kno
270272

271273
void SPIClass::beginTransaction(uint8_t pin, SPISettings settings)
272274
{
275+
(void)pin; // unused
273276
setBitOrder(settings.bitOrder);
274277
setDataMode(settings.dataMode);
275278
setDataSize(settings.dataSize);
@@ -412,13 +415,13 @@ void SPIClass::dmaTransferSet(const void *transmitBuf, void *receiveBuf) {
412415
dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiRxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size,
413416
receiveBuf, dma_bit_size, (DMA_MINC_MODE | DMA_TRNS_CMPLT ));// receive buffer DMA
414417
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
418421
}
419422
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
422425
}
423426
dma_set_priority(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, DMA_PRIORITY_LOW);
424427
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
468471
return dmaTransferRepeat(length);
469472
}
470473

474+
uint8 SPIClass::dmaTransfer(const uint16 value, void *receiveBuf, uint16 length) {
475+
ff = value;
476+
dmaTransferSet(NULL, receiveBuf);
477+
return dmaTransferRepeat(length);
478+
}
479+
471480
/* Roger Clark and Victor Perez, 2015
472481
* Performs a DMA SPI send using a TX buffer.
473482
* On exit TX buffer is not modified.
@@ -782,11 +791,11 @@ static const spi_baud_rate baud_rates[8] __FLASH__ = {
782791
* (CYCLES_PER_MICROSECOND == 72, APB2 at 72MHz, APB1 at 36MHz).
783792
*/
784793
static spi_baud_rate determine_baud_rate(spi_dev *dev, uint32_t freq) {
785-
uint32_t clock;
794+
uint32_t clock = 0;
786795
switch (rcc_dev_clk(dev->clk_id)) {
787796
case RCC_APB2: clock = STM32_PCLK2; break; // 72 Mhz
788797
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
790799
}
791800
clock /= 2;
792801
uint32_t i = 0;

STM32F1/libraries/SPI/src/SPI.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ class SPISettings {
160160
/*
161161
* Kept for compat.
162162
*/
163-
static const uint8_t ff = 0XFF;
164163

165164
/**
166165
* @brief Wirish SPI interface.
@@ -297,6 +296,7 @@ class SPIClass {
297296
* @param length Number of bytes in buffer to transmit.
298297
*/
299298
uint8 dmaTransfer(const void * transmitBuf, void * receiveBuf, uint16 length);
299+
uint8 dmaTransfer(const uint16 value, void * receiveBuf, uint16 length);
300300
void dmaTransferSet(const void *transmitBuf, void *receiveBuf);
301301
uint8 dmaTransferRepeat(uint16 length);
302302

0 commit comments

Comments
 (0)