@@ -57,9 +57,10 @@ SPIClass::SPIClass(uint32_t mosi, uint32_t miso, uint32_t sclk, uint32_t ssel)
5757void SPIClass::begin (void )
5858{
5959 _spi.handle .State = HAL_SPI_STATE_RESET;
60- spi_init (&_spi, _spiSettings.clk ,
61- _spiSettings.dMode ,
62- _spiSettings.bOrder );
60+ _spiSettings = DEFAULT_SPI_SETTINGS;
61+ spi_init (&_spi, _spiSettings.getClockFreq (),
62+ _spiSettings.getDataMode (),
63+ _spiSettings.getBitOrder ());
6364}
6465
6566/* *
@@ -69,14 +70,12 @@ void SPIClass::begin(void)
6970 */
7071void SPIClass::beginTransaction (SPISettings settings)
7172{
72- _spiSettings.clk = settings.clk ;
73- _spiSettings.dMode = settings.dMode ;
74- _spiSettings.bOrder = settings.bOrder ;
75- _spiSettings.noReceive = settings.noReceive ;
76-
77- spi_init (&_spi, _spiSettings.clk ,
78- _spiSettings.dMode ,
79- _spiSettings.bOrder );
73+ if (_spiSettings != settings) {
74+ _spiSettings = settings;
75+ spi_init (&_spi, _spiSettings.getClockFreq (),
76+ _spiSettings.getDataMode (),
77+ _spiSettings.getBitOrder ());
78+ }
8079}
8180
8281/* *
@@ -102,39 +101,37 @@ void SPIClass::end()
102101 */
103102void SPIClass::setBitOrder (BitOrder bitOrder)
104103{
105- _spiSettings.bOrder = bitOrder;
104+ _spiSettings.setBitOrder ( bitOrder) ;
106105
107- spi_init (&_spi, _spiSettings.clk ,
108- _spiSettings.dMode ,
109- _spiSettings.bOrder );
106+ spi_init (&_spi, _spiSettings.getClockFreq () ,
107+ _spiSettings.getDataMode () ,
108+ _spiSettings.getBitOrder () );
110109}
111110
112111/* *
113112 * @brief Deprecated function.
114113 * Configure the data mode (clock polarity and clock phase)
115- * @param _mode : SPI_MODE0, SPI_MODE1, SPI_MODE2 or SPI_MODE3
114+ * @param mode : SPI_MODE0, SPI_MODE1, SPI_MODE2 or SPI_MODE3
116115 * @note
117116 * Mode Clock Polarity (CPOL) Clock Phase (CPHA)
118117 * SPI_MODE0 0 0
119118 * SPI_MODE1 0 1
120119 * SPI_MODE2 1 0
121120 * SPI_MODE3 1 1
122121 */
123- void SPIClass::setDataMode (uint8_t _mode)
122+
123+ void SPIClass::setDataMode (uint8_t mode)
124124{
125- if (SPI_MODE0 == _mode) {
126- _spiSettings.dMode = SPI_MODE_0;
127- } else if (SPI_MODE1 == _mode) {
128- _spiSettings.dMode = SPI_MODE_1;
129- } else if (SPI_MODE2 == _mode) {
130- _spiSettings.dMode = SPI_MODE_2;
131- } else if (SPI_MODE3 == _mode) {
132- _spiSettings.dMode = SPI_MODE_3;
133- }
125+ setDataMode ((SPIMode)mode);
126+ }
134127
135- spi_init (&_spi, _spiSettings.clk ,
136- _spiSettings.dMode ,
137- _spiSettings.bOrder );
128+ void SPIClass::setDataMode (SPIMode mode)
129+ {
130+ _spiSettings.setDataMode (mode);
131+
132+ spi_init (&_spi, _spiSettings.getClockFreq (),
133+ _spiSettings.getDataMode (),
134+ _spiSettings.getBitOrder ());
138135}
139136
140137/* *
@@ -146,15 +143,15 @@ void SPIClass::setDataMode(uint8_t _mode)
146143void SPIClass::setClockDivider (uint8_t _divider)
147144{
148145 if (_divider == 0 ) {
149- _spiSettings.clk = SPI_SPEED_CLOCK_DEFAULT;
146+ _spiSettings.setClockFreq ( SPI_SPEED_CLOCK_DEFAULT) ;
150147 } else {
151- /* Get clk freq of the SPI instance and compute it */
152- _spiSettings.clk = spi_getClkFreq (&_spi) / _divider;
148+ /* Get clock freq of the SPI instance and compute it */
149+ _spiSettings.setClockFreq ( spi_getClkFreq (&_spi) / _divider) ;
153150 }
154151
155- spi_init (&_spi, _spiSettings.clk ,
156- _spiSettings.dMode ,
157- _spiSettings.bOrder );
152+ spi_init (&_spi, _spiSettings.getClockFreq () ,
153+ _spiSettings.getDataMode () ,
154+ _spiSettings.getBitOrder () );
158155}
159156
160157/* *
@@ -163,9 +160,9 @@ void SPIClass::setClockDivider(uint8_t _divider)
163160 * @param data: byte to send.
164161 * @return byte received from the slave.
165162 */
166- byte SPIClass::transfer (uint8_t data)
163+ uint8_t SPIClass::transfer (uint8_t data)
167164{
168- spi_transfer (&_spi, &data, sizeof (uint8_t ), SPI_TRANSFER_TIMEOUT, _spiSettings.noReceive );
165+ spi_transfer (&_spi, &data, sizeof (uint8_t ), SPI_TRANSFER_TIMEOUT, _spiSettings.getSkipRecv () );
169166 return data;
170167}
171168
@@ -179,14 +176,14 @@ uint16_t SPIClass::transfer16(uint16_t data)
179176{
180177 uint16_t tmp;
181178
182- if (_spiSettings.bOrder ) {
179+ if (_spiSettings.getBitOrder () ) {
183180 tmp = ((data & 0xff00 ) >> 8 ) | ((data & 0xff ) << 8 );
184181 data = tmp;
185182 }
186183 spi_transfer (&_spi, (uint8_t *)&data, sizeof (uint16_t ),
187- SPI_TRANSFER_TIMEOUT, _spiSettings.noReceive );
184+ SPI_TRANSFER_TIMEOUT, _spiSettings.getSkipRecv () );
188185
189- if (_spiSettings.bOrder ) {
186+ if (_spiSettings.getBitOrder () ) {
190187 tmp = ((data & 0xff00 ) >> 8 ) | ((data & 0xff ) << 8 );
191188 data = tmp;
192189 }
@@ -197,22 +194,30 @@ uint16_t SPIClass::transfer16(uint16_t data)
197194/* *
198195 * @brief Transfer several bytes. Only one buffer used to send and receive data.
199196 * begin() or beginTransaction() must be called at least once before.
200- * @param _buf : pointer to the bytes to send. The bytes received are copy in
197+ * @param buf : pointer to the bytes to send. The bytes received are copy in
201198 * this buffer.
202- * @param _count : number of bytes to send/receive.
199+ * @param count : number of bytes to send/receive.
203200 */
204- void SPIClass::transfer (void *_buf , size_t _count )
201+ void SPIClass::transfer (void *buf , size_t count )
205202{
206203 if ((count != 0 ) && (buf != NULL )) {
207204 spi_transfer (&_spi, ((uint8_t *)buf), count,
208- SPI_TRANSFER_TIMEOUT, _spiSettings.noReceive );
205+ SPI_TRANSFER_TIMEOUT, _spiSettings.getSkipRecv () );
209206 }
210207}
211208
212209/* *
213210 * @brief Not implemented.
214211 */
215- void SPIClass::usingInterrupt (uint8_t interruptNumber)
212+ void SPIClass::usingInterrupt (int interruptNumber)
213+ {
214+ UNUSED (interruptNumber);
215+ }
216+
217+ /* *
218+ * @brief Not implemented.
219+ */
220+ void SPIClass::notUsingInterrupt (int interruptNumber)
216221{
217222 UNUSED (interruptNumber);
218223}
0 commit comments