@@ -195,7 +195,8 @@ void SPIClass::setClockDivider(uint32_t clockDivider)
195195 Serial.print (" Clock divider set to " ); Serial.println (clockDivider);
196196 #endif
197197 _currentSetting->clockDivider = clockDivider;
198- updateSettings ();
198+ uint32 cr1 = _currentSetting->spi_d ->regs ->CR1 & ~(SPI_CR1_BR);
199+ _currentSetting->spi_d ->regs ->CR1 = cr1 | (clockDivider & SPI_CR1_BR);
199200}
200201
201202void SPIClass::setBitOrder (BitOrder bitOrder)
@@ -204,7 +205,9 @@ void SPIClass::setBitOrder(BitOrder bitOrder)
204205 Serial.print (" Bit order set to " ); Serial.println (bitOrder);
205206 #endif
206207 _currentSetting->bitOrder = bitOrder;
207- updateSettings ();
208+ uint32 cr1 = _currentSetting->spi_d ->regs ->CR1 & ~(SPI_CR1_LSBFIRST);
209+ if ( bitOrder==LSBFIRST ) cr1 |= SPI_CR1_LSBFIRST;
210+ _currentSetting->spi_d ->regs ->CR1 = cr1;
208211}
209212
210213/* Victor Perez. Added to test changing datasize from 8 to 16 bit modes on the fly.
@@ -213,11 +216,8 @@ void SPIClass::setBitOrder(BitOrder bitOrder)
213216*/
214217void SPIClass::setDataSize (uint32 datasize)
215218{
216- uint32 cr1 = _currentSetting->spi_d ->regs ->CR1 ;
217- datasize &= SPI_CR1_DFF;
218- cr1 &= ~(SPI_CR1_DFF);
219- cr1 |= datasize;
220- _currentSetting->spi_d ->regs ->CR1 = cr1;
219+ uint32 cr1 = _currentSetting->spi_d ->regs ->CR1 & ~(SPI_CR1_DFF);
220+ _currentSetting->spi_d ->regs ->CR1 = cr1 | (datasize & SPI_CR1_DFF);
221221}
222222
223223void SPIClass::setDataMode (uint8_t dataMode)
@@ -253,7 +253,8 @@ If someone finds this is not the case or sees a logic error with this let me kno
253253 Serial.print (" Data mode set to " ); Serial.println (dataMode);
254254 #endif
255255 _currentSetting->dataMode = dataMode;
256- updateSettings ();
256+ uint32 cr1 = _currentSetting->spi_d ->regs ->CR1 & ~(SPI_CR1_CPOL|SPI_CR1_CPHA);
257+ _currentSetting->spi_d ->regs ->CR1 = cr1 | (dataMode & (SPI_CR1_CPOL|SPI_CR1_CPHA));
257258}
258259
259260
0 commit comments