Merge branch 'greiman-SPI_const_qualifier'
This commit is contained in:
commit
fec8ecc2f4
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue