11
11
12
12
#include " SPI.h"
13
13
14
-
14
+ /* The following contructors are available:
15
+ - SPIClass SPI
16
+ - SPIClass SPI(mosi,miso,sclk)
17
+ - SPIClass SPI(mosi,miso,sclk,ss)
18
+ */
15
19
SPIClass SPI;
16
20
17
21
SPIClass::SPIClass () : g_active_id(-1 )
@@ -22,13 +26,20 @@ SPIClass::SPIClass() : g_active_id(-1)
22
26
_spi.pin_ssel = NC;
23
27
}
24
28
29
+ /* By default hardware SS pin is not used. To use hardware SS pin you should set
30
+ ssel pin. Enable this pin disable software CS. See microcontroller documentation
31
+ for the list of available SS pins. */
25
32
SPIClass::SPIClass (uint8_t mosi, uint8_t miso, uint8_t sclk, uint8_t ssel) : g_active_id(-1 )
26
33
{
27
34
_spi.pin_miso = digitalToPinName (miso);
28
35
_spi.pin_mosi = digitalToPinName (mosi);
29
36
_spi.pin_sclk = digitalToPinName (sclk);
30
- // If no ssel pin used, set it to value NUM_DIGITAL_PINS
31
- _spi.pin_ssel = digitalToPinName (ssel);
37
+
38
+ if (ssel != 0xFF ) {
39
+ _spi.pin_ssel = digitalToPinName (ssel);
40
+ } else {
41
+ _spi.pin_ssel = NC;
42
+ }
32
43
}
33
44
34
45
// begin using the default chip select
@@ -43,7 +54,7 @@ void SPIClass::begin(uint8_t _pin)
43
54
if (_pin > SPI_CHANNELS_NUM)
44
55
return ;
45
56
46
- if (_pin != BOARD_SPI_OWN_SS) {
57
+ if (( _pin != BOARD_SPI_OWN_SS) && (_spi. pin_ssel == NC) ) {
47
58
pinMode (_pin, OUTPUT);
48
59
digitalWrite (_pin, HIGH);
49
60
}
@@ -185,12 +196,12 @@ byte SPIClass::transfer(uint8_t _pin, uint8_t data, SPITransferMode _mode)
185
196
g_active_id = _pin;
186
197
}
187
198
188
- if (_pin != BOARD_SPI_OWN_SS)
199
+ if (( _pin != BOARD_SPI_OWN_SS) && (_spi. pin_ssel == NC) )
189
200
digitalWrite (_pin, LOW);
190
201
191
- spi_transfer (&_spi, &data, &rx_buffer, sizeof (uint8_t ), 10000000 );
202
+ spi_transfer (&_spi, &data, &rx_buffer, sizeof (uint8_t ), 10000 );
192
203
193
- if ((_pin != BOARD_SPI_OWN_SS) && (_mode == SPI_LAST))
204
+ if ((_pin != BOARD_SPI_OWN_SS) && (_mode == SPI_LAST) && (_spi. pin_ssel == NC) )
194
205
digitalWrite (_pin, HIGH);
195
206
196
207
return rx_buffer;
@@ -208,12 +219,12 @@ uint16_t SPIClass::transfer16(uint8_t _pin, uint16_t data, SPITransferMode _mode
208
219
g_active_id = _pin;
209
220
}
210
221
211
- if (_pin != BOARD_SPI_OWN_SS)
222
+ if (( _pin != BOARD_SPI_OWN_SS) && (_spi. pin_ssel == NC) )
212
223
digitalWrite (_pin, LOW);
213
224
214
225
spi_transfer (&_spi, (uint8_t *)&data, (uint8_t *)&rx_buffer, sizeof (uint16_t ), 10000000 );
215
226
216
- if ((_pin != BOARD_SPI_OWN_SS) && (_mode == SPI_LAST))
227
+ if ((_pin != BOARD_SPI_OWN_SS) && (_mode == SPI_LAST) && (_spi. pin_ssel == NC) )
217
228
digitalWrite (_pin, HIGH);
218
229
219
230
return rx_buffer;
@@ -229,12 +240,12 @@ void SPIClass::transfer(uint8_t _pin, void *_buf, size_t _count, SPITransferMode
229
240
g_active_id = _pin;
230
241
}
231
242
232
- if (_pin != BOARD_SPI_OWN_SS)
243
+ if (( _pin != BOARD_SPI_OWN_SS) && (_spi. pin_ssel == NC) )
233
244
digitalWrite (_pin, LOW);
234
245
235
246
spi_send (&_spi,(uint8_t *)_buf, _count,10000 );
236
247
237
- if ((_pin != BOARD_SPI_OWN_SS) && (_mode == SPI_LAST))
248
+ if ((_pin != BOARD_SPI_OWN_SS) && (_mode == SPI_LAST) && (_spi. pin_ssel == NC) )
238
249
digitalWrite (_pin, HIGH);
239
250
}
240
251
0 commit comments