From 7fda02a821dbb962a2ee33c814cd106dc85f1883 Mon Sep 17 00:00:00 2001 From: Bill Greiman Date: Fri, 22 Sep 2017 10:40:05 -0700 Subject: [PATCH] SPI add const qualifier Add const qualifier to SPI member function arguments for write and transmit buffers. --- STM32F1/libraries/SPI/src/SPI.cpp | 22 +++++++++++----------- STM32F1/libraries/SPI/src/SPI.h | 12 ++++++------ STM32F4/libraries/SPI/src/SPI.cpp | 10 +++++----- STM32F4/libraries/SPI/src/SPI.h | 6 +++--- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index 34df62e..c07e2ea 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -350,10 +350,10 @@ void SPIClass::write(uint16 data, uint32 n) while ( (regs->SR & SPI_SR_BSY) != 0); // wait until BSY=0 before returning } -void SPIClass::write(void *data, uint32 length) +void SPIClass::write(const void *data, uint32 length) { spi_dev * spi_d = _currentSetting->spi_d; - spi_tx(spi_d, (void*)data, length); // data can be array of bytes or words + spi_tx(spi_d, data, length); // data can be array of bytes or words while (spi_is_tx_empty(spi_d) == 0); // "5. Wait until TXE=1 ..." while (spi_is_busy(spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." } @@ -391,7 +391,7 @@ uint16_t SPIClass::transfer16(uint16_t data) const * On exit TX buffer is not modified, and RX buffer cotains the received data. * Still in progress. */ -void SPIClass::dmaTransferSet(void *transmitBuf, void *receiveBuf) { +void SPIClass::dmaTransferSet(const void *transmitBuf, void *receiveBuf) { dma_init(_currentSetting->spiDmaDev); //spi_rx_dma_enable(_currentSetting->spi_d); //spi_tx_dma_enable(_currentSetting->spi_d); @@ -401,11 +401,11 @@ void SPIClass::dmaTransferSet(void *transmitBuf, void *receiveBuf) { if (!transmitBuf) { transmitBuf = &ff; dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size, - transmitBuf, dma_bit_size, (DMA_FROM_MEM));// Transmit FF repeatedly + (volatile void*)transmitBuf, dma_bit_size, (DMA_FROM_MEM));// Transmit FF repeatedly } else { dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size, - transmitBuf, dma_bit_size, (DMA_MINC_MODE | DMA_FROM_MEM ));// Transmit buffer DMA + (volatile void*)transmitBuf, dma_bit_size, (DMA_MINC_MODE | DMA_FROM_MEM ));// Transmit buffer DMA } dma_set_priority(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, DMA_PRIORITY_LOW); dma_set_priority(_currentSetting->spiDmaDev, _currentSetting->spiRxDmaChannel, DMA_PRIORITY_VERY_HIGH); @@ -451,7 +451,7 @@ uint8 SPIClass::dmaTransferRepeat(uint16 length) { * Still in progress. */ -uint8 SPIClass::dmaTransfer(void *transmitBuf, void *receiveBuf, uint16 length) { +uint8 SPIClass::dmaTransfer(const void *transmitBuf, void *receiveBuf, uint16 length) { dmaTransferSet(transmitBuf, receiveBuf); return dmaTransferRepeat(length); } @@ -463,12 +463,12 @@ uint8 SPIClass::dmaTransfer(void *transmitBuf, void *receiveBuf, uint16 length) * 2016 - stevstrong - reworked to automatically detect bit size from SPI setting */ -void SPIClass::dmaSendSet(void * transmitBuf, bool minc) { +void SPIClass::dmaSendSet(const void * transmitBuf, bool minc) { uint32 flags = ( (DMA_MINC_MODE*minc) | DMA_FROM_MEM | DMA_TRNS_CMPLT); dma_init(_currentSetting->spiDmaDev); dma_xfer_size dma_bit_size = (_currentSetting->dataSize==DATA_SIZE_16BIT) ? DMA_SIZE_16BITS : DMA_SIZE_8BITS; dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size, - transmitBuf, dma_bit_size, flags);// Transmit buffer DMA + (volatile void*)transmitBuf, dma_bit_size, flags);// Transmit buffer DMA dma_set_priority(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, DMA_PRIORITY_LOW); } @@ -498,12 +498,12 @@ uint8 SPIClass::dmaSendRepeat(uint16 length) { return b; } -uint8 SPIClass::dmaSend(void * transmitBuf, uint16 length, bool minc) { +uint8 SPIClass::dmaSend(const void * transmitBuf, uint16 length, bool minc) { dmaSendSet(transmitBuf, minc); return dmaSendRepeat(length); } -uint8 SPIClass::dmaSendAsync(void * transmitBuf, uint16 length, bool minc) { +uint8 SPIClass::dmaSendAsync(const void * transmitBuf, uint16 length, bool minc) { uint8 b = 0; if (_currentSetting->state != SPI_STATE_READY) @@ -529,7 +529,7 @@ uint8 SPIClass::dmaSendAsync(void * transmitBuf, uint16 length, bool minc) { // TX dma_xfer_size dma_bit_size = (_currentSetting->dataSize==DATA_SIZE_16BIT) ? DMA_SIZE_16BITS : DMA_SIZE_8BITS; dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size, - transmitBuf, dma_bit_size, flags);// Transmit buffer DMA + (volatile void*)transmitBuf, dma_bit_size, flags);// Transmit buffer DMA dma_set_num_transfers(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, length); dma_clear_isr_bits(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel); dma_enable(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel);// enable transmit diff --git a/STM32F1/libraries/SPI/src/SPI.h b/STM32F1/libraries/SPI/src/SPI.h index 25eea86..686d23d 100644 --- a/STM32F1/libraries/SPI/src/SPI.h +++ b/STM32F1/libraries/SPI/src/SPI.h @@ -278,7 +278,7 @@ public: * @param buffer Bytes/words to transmit. * @param length Number of bytes/words in buffer to transmit. */ - void write(void * buffer, uint32 length); + void write(const void * buffer, uint32 length); /** * @brief Transmit a byte, then return the next unread byte. @@ -301,8 +301,8 @@ public: * @param receiveBuf buffer Bytes to save received data. * @param length Number of bytes in buffer to transmit. */ - uint8 dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length); - void dmaTransferSet(void *transmitBuf, void *receiveBuf); + uint8 dmaTransfer(const void * transmitBuf, void * receiveBuf, uint16 length); + void dmaTransferSet(const void *transmitBuf, void *receiveBuf); uint8 dmaTransferRepeat(uint16 length); /** @@ -315,11 +315,11 @@ public: * @param length Number of bytes in buffer to transmit. * @param minc Set to use Memory Increment mode, clear to use Circular mode. */ - uint8 dmaSend(void * transmitBuf, uint16 length, bool minc = 1); - void dmaSendSet(void * transmitBuf, bool minc); + uint8 dmaSend(const void * transmitBuf, uint16 length, bool minc = 1); + void dmaSendSet(const void * transmitBuf, bool minc); uint8 dmaSendRepeat(uint16 length); - uint8 dmaSendAsync(void * transmitBuf, uint16 length, bool minc = 1); + uint8 dmaSendAsync(const void * transmitBuf, uint16 length, bool minc = 1); /* * Pin accessors */ diff --git a/STM32F4/libraries/SPI/src/SPI.cpp b/STM32F4/libraries/SPI/src/SPI.cpp index 45aa366..72a4c48 100644 --- a/STM32F4/libraries/SPI/src/SPI.cpp +++ b/STM32F4/libraries/SPI/src/SPI.cpp @@ -372,7 +372,7 @@ void SPIClass::write(uint16 data, uint32 n) while ( (regs->SR & SPI_SR_BSY) != 0); // wait until BSY=0 before returning } -void SPIClass::write(void *data, uint32 length) +void SPIClass::write(const void *data, uint32 length) { spi_dev * spi_d = _currentSetting->spi_d; spi_tx(spi_d, (void*)data, length); // data can be array of bytes or words @@ -407,7 +407,7 @@ uint16_t SPIClass::transfer16(uint16_t wr_data) const * On exit TX buffer is not modified, and RX buffer contains the received data. * Still in progress. */ -uint8 SPIClass::dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length) +uint8 SPIClass::dmaTransfer(const void * transmitBuf, void * receiveBuf, uint16 length) { if (length == 0) return 0; @@ -442,7 +442,7 @@ uint8 SPIClass::dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length _currentSetting->spiDmaChannel, dma_bit_size, &_currentSetting->spi_d->regs->DR, // peripheral address - transmitBuf, // memory bank 0 address + (volatile void*)transmitBuf, // memory bank 0 address NULL, // memory bank 1 address flags ); @@ -477,7 +477,7 @@ uint8 SPIClass::dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length * Still in progress. * 2016 - stevstrong - reworked to automatically detect bit size from SPI setting */ -uint8 SPIClass::dmaSend(void * transmitBuf, uint16 length, bool minc) +uint8 SPIClass::dmaSend(const void * transmitBuf, uint16 length, bool minc) { if (length == 0) return 0; uint8 b = 0; @@ -489,7 +489,7 @@ uint8 SPIClass::dmaSend(void * transmitBuf, uint16 length, bool minc) _currentSetting->spiDmaChannel, dma_bit_size, &_currentSetting->spi_d->regs->DR, // peripheral address - transmitBuf, // memory bank 0 address + (volatile void*)transmitBuf, // memory bank 0 address NULL, // memory bank 1 address ( (DMA_MINC_MODE*minc) | DMA_FROM_MEM ) //| DMA_TRNS_CMPLT ) // flags );// Transmit buffer DMA diff --git a/STM32F4/libraries/SPI/src/SPI.h b/STM32F4/libraries/SPI/src/SPI.h index cabc0c2..f46795c 100644 --- a/STM32F4/libraries/SPI/src/SPI.h +++ b/STM32F4/libraries/SPI/src/SPI.h @@ -248,7 +248,7 @@ public: * @param buffer Bytes/words to transmit. * @param length Number of bytes/words in buffer to transmit. */ - void write(void * buffer, uint32 length); + void write(const void * buffer, uint32 length); /** * @brief Transmit a byte, then return the next unread byte. @@ -272,7 +272,7 @@ public: * @param receiveBuf buffer Bytes to save received data. * @param length Number of bytes in buffer to transmit. */ - uint8 dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length); + uint8 dmaTransfer(const void * transmitBuf, void * receiveBuf, uint16 length); /** * @brief Sets up a DMA Transmit for SPI 8 or 16 bit transfer mode. @@ -283,7 +283,7 @@ public: * @param data buffer half words to transmit, * @param length Number of bytes in buffer to transmit. */ - uint8 dmaSend(void * transmitBuf, uint16 length, bool minc = 1); + uint8 dmaSend(const void * transmitBuf, uint16 length, bool minc = 1); #endif /*