Merge branch 'greiman-SPI_const_qualifier'

This commit is contained in:
Roger Clark 2017-10-08 11:00:48 +11:00
commit fec8ecc2f4
4 changed files with 25 additions and 25 deletions

View File

@ -350,10 +350,10 @@ void SPIClass::write(uint16 data, uint32 n)
while ( (regs->SR & SPI_SR_BSY) != 0); // wait until BSY=0 before returning 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_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_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." 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. * On exit TX buffer is not modified, and RX buffer cotains the received data.
* Still in progress. * Still in progress.
*/ */
void SPIClass::dmaTransferSet(void *transmitBuf, void *receiveBuf) { void SPIClass::dmaTransferSet(const void *transmitBuf, void *receiveBuf) {
dma_init(_currentSetting->spiDmaDev); dma_init(_currentSetting->spiDmaDev);
//spi_rx_dma_enable(_currentSetting->spi_d); //spi_rx_dma_enable(_currentSetting->spi_d);
//spi_tx_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) { if (!transmitBuf) {
transmitBuf = &ff; transmitBuf = &ff;
dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size, 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 { else {
dma_setup_transfer(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, &_currentSetting->spi_d->regs->DR, dma_bit_size, 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->spiTxDmaChannel, DMA_PRIORITY_LOW);
dma_set_priority(_currentSetting->spiDmaDev, _currentSetting->spiRxDmaChannel, DMA_PRIORITY_VERY_HIGH); dma_set_priority(_currentSetting->spiDmaDev, _currentSetting->spiRxDmaChannel, DMA_PRIORITY_VERY_HIGH);
@ -451,7 +451,7 @@ uint8 SPIClass::dmaTransferRepeat(uint16 length) {
* Still in progress. * 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); dmaTransferSet(transmitBuf, receiveBuf);
return dmaTransferRepeat(length); 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 * 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); uint32 flags = ( (DMA_MINC_MODE*minc) | DMA_FROM_MEM | DMA_TRNS_CMPLT);
dma_init(_currentSetting->spiDmaDev); dma_init(_currentSetting->spiDmaDev);
dma_xfer_size dma_bit_size = (_currentSetting->dataSize==DATA_SIZE_16BIT) ? DMA_SIZE_16BITS : DMA_SIZE_8BITS; 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, 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); dma_set_priority(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, DMA_PRIORITY_LOW);
} }
@ -498,12 +498,12 @@ uint8 SPIClass::dmaSendRepeat(uint16 length) {
return b; return b;
} }
uint8 SPIClass::dmaSend(void * transmitBuf, uint16 length, bool minc) { uint8 SPIClass::dmaSend(const void * transmitBuf, uint16 length, bool minc) {
dmaSendSet(transmitBuf, minc); dmaSendSet(transmitBuf, minc);
return dmaSendRepeat(length); 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; uint8 b = 0;
if (_currentSetting->state != SPI_STATE_READY) if (_currentSetting->state != SPI_STATE_READY)
@ -529,7 +529,7 @@ uint8 SPIClass::dmaSendAsync(void * transmitBuf, uint16 length, bool minc) {
// TX // TX
dma_xfer_size dma_bit_size = (_currentSetting->dataSize==DATA_SIZE_16BIT) ? DMA_SIZE_16BITS : DMA_SIZE_8BITS; 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, 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_set_num_transfers(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel, length);
dma_clear_isr_bits(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel); dma_clear_isr_bits(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel);
dma_enable(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel);// enable transmit dma_enable(_currentSetting->spiDmaDev, _currentSetting->spiTxDmaChannel);// enable transmit

View File

@ -278,7 +278,7 @@ public:
* @param buffer Bytes/words to transmit. * @param buffer Bytes/words to transmit.
* @param length Number of bytes/words in buffer 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. * @brief Transmit a byte, then return the next unread byte.
@ -301,8 +301,8 @@ public:
* @param receiveBuf buffer Bytes to save received data. * @param receiveBuf buffer Bytes to save received data.
* @param length Number of bytes in buffer to transmit. * @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);
void dmaTransferSet(void *transmitBuf, void *receiveBuf); void dmaTransferSet(const void *transmitBuf, void *receiveBuf);
uint8 dmaTransferRepeat(uint16 length); uint8 dmaTransferRepeat(uint16 length);
/** /**
@ -315,11 +315,11 @@ public:
* @param length Number of bytes in buffer to transmit. * @param length Number of bytes in buffer to transmit.
* @param minc Set to use Memory Increment mode, clear to use Circular mode. * @param minc Set to use Memory Increment mode, clear to use Circular mode.
*/ */
uint8 dmaSend(void * transmitBuf, uint16 length, bool minc = 1); uint8 dmaSend(const void * transmitBuf, uint16 length, bool minc = 1);
void dmaSendSet(void * transmitBuf, bool minc); void dmaSendSet(const void * transmitBuf, bool minc);
uint8 dmaSendRepeat(uint16 length); 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 * Pin accessors
*/ */

View File

@ -372,7 +372,7 @@ void SPIClass::write(uint16 data, uint32 n)
while ( (regs->SR & SPI_SR_BSY) != 0); // wait until BSY=0 before returning 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_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, (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. * On exit TX buffer is not modified, and RX buffer contains the received data.
* Still in progress. * 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; if (length == 0) return 0;
@ -442,7 +442,7 @@ uint8 SPIClass::dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length
_currentSetting->spiDmaChannel, _currentSetting->spiDmaChannel,
dma_bit_size, dma_bit_size,
&_currentSetting->spi_d->regs->DR, // peripheral address &_currentSetting->spi_d->regs->DR, // peripheral address
transmitBuf, // memory bank 0 address (volatile void*)transmitBuf, // memory bank 0 address
NULL, // memory bank 1 address NULL, // memory bank 1 address
flags flags
); );
@ -477,7 +477,7 @@ uint8 SPIClass::dmaTransfer(void * transmitBuf, void * receiveBuf, uint16 length
* Still in progress. * Still in progress.
* 2016 - stevstrong - reworked to automatically detect bit size from SPI setting * 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; if (length == 0) return 0;
uint8 b = 0; uint8 b = 0;
@ -489,7 +489,7 @@ uint8 SPIClass::dmaSend(void * transmitBuf, uint16 length, bool minc)
_currentSetting->spiDmaChannel, _currentSetting->spiDmaChannel,
dma_bit_size, dma_bit_size,
&_currentSetting->spi_d->regs->DR, // peripheral address &_currentSetting->spi_d->regs->DR, // peripheral address
transmitBuf, // memory bank 0 address (volatile void*)transmitBuf, // memory bank 0 address
NULL, // memory bank 1 address NULL, // memory bank 1 address
( (DMA_MINC_MODE*minc) | DMA_FROM_MEM ) //| DMA_TRNS_CMPLT ) // flags ( (DMA_MINC_MODE*minc) | DMA_FROM_MEM ) //| DMA_TRNS_CMPLT ) // flags
);// Transmit buffer DMA );// Transmit buffer DMA

View File

@ -248,7 +248,7 @@ public:
* @param buffer Bytes/words to transmit. * @param buffer Bytes/words to transmit.
* @param length Number of bytes/words in buffer 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. * @brief Transmit a byte, then return the next unread byte.
@ -272,7 +272,7 @@ public:
* @param receiveBuf buffer Bytes to save received data. * @param receiveBuf buffer Bytes to save received data.
* @param length Number of bytes in buffer to transmit. * @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. * @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 data buffer half words to transmit,
* @param length Number of bytes in buffer 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 #endif
/* /*