22
22
#include < hardware/spi.h>
23
23
#include < hardware/gpio.h>
24
24
25
- SPIClassRP2040::SPIClassRP2040 (spi_inst_t *spi, pin_size_t rx, pin_size_t cs, pin_size_t sck, pin_size_t tx) {
25
+ SPIClass::SPIClass (spi_inst_t *spi, pin_size_t rx, pin_size_t cs, pin_size_t sck, pin_size_t tx) {
26
26
_spi = spi;
27
27
_running = false ;
28
28
_initted = false ;
@@ -33,7 +33,7 @@ SPIClassRP2040::SPIClassRP2040(spi_inst_t *spi, pin_size_t rx, pin_size_t cs, pi
33
33
_CS = cs;
34
34
}
35
35
36
- inline spi_cpol_t SPIClassRP2040 ::cpol () {
36
+ inline spi_cpol_t SPIClass ::cpol () {
37
37
switch (_spis.getDataMode ()) {
38
38
case SPI_MODE0: return SPI_CPOL_0;
39
39
case SPI_MODE1: return SPI_CPOL_0;
@@ -44,7 +44,7 @@ inline spi_cpol_t SPIClassRP2040::cpol() {
44
44
return SPI_CPOL_0;
45
45
}
46
46
47
- inline spi_cpha_t SPIClassRP2040 ::cpha () {
47
+ inline spi_cpha_t SPIClass ::cpha () {
48
48
switch (_spis.getDataMode ()) {
49
49
case SPI_MODE0: return SPI_CPHA_0;
50
50
case SPI_MODE1: return SPI_CPHA_1;
@@ -55,19 +55,19 @@ inline spi_cpha_t SPIClassRP2040::cpha() {
55
55
return SPI_CPHA_0;
56
56
}
57
57
58
- inline uint8_t SPIClassRP2040 ::reverseByte (uint8_t b) {
58
+ inline uint8_t SPIClass ::reverseByte (uint8_t b) {
59
59
b = (b & 0xF0 ) >> 4 | (b & 0x0F ) << 4 ;
60
60
b = (b & 0xCC ) >> 2 | (b & 0x33 ) << 2 ;
61
61
b = (b & 0xAA ) >> 1 | (b & 0x55 ) << 1 ;
62
62
return b;
63
63
}
64
64
65
- inline uint16_t SPIClassRP2040 ::reverse16Bit (uint16_t w) {
65
+ inline uint16_t SPIClass ::reverse16Bit (uint16_t w) {
66
66
return ( reverseByte (w & 0xff ) << 8 ) | ( reverseByte (w >> 8 ) );
67
67
}
68
68
69
69
// The HW can't do LSB first, only MSB first, so need to bitreverse
70
- void SPIClassRP2040 ::adjustBuffer (const void *s, void *d, size_t cnt, bool by16) {
70
+ void SPIClass ::adjustBuffer (const void *s, void *d, size_t cnt, bool by16) {
71
71
if (_spis.getBitOrder () == MSBFIRST) {
72
72
memcpy (d, s, cnt * (by16? 2 : 1 ));
73
73
} else if (!by16) {
@@ -85,7 +85,7 @@ void SPIClassRP2040::adjustBuffer(const void *s, void *d, size_t cnt, bool by16)
85
85
}
86
86
}
87
87
88
- byte SPIClassRP2040 ::transfer (uint8_t data) {
88
+ byte SPIClass ::transfer (uint8_t data) {
89
89
uint8_t ret;
90
90
if (!_initted) return 0 ;
91
91
data = (_spis.getBitOrder () == MSBFIRST) ? data : reverseByte (data);
@@ -97,7 +97,7 @@ byte SPIClassRP2040::transfer(uint8_t data) {
97
97
return ret;
98
98
}
99
99
100
- uint16_t SPIClassRP2040 ::transfer16 (uint16_t data) {
100
+ uint16_t SPIClass ::transfer16 (uint16_t data) {
101
101
uint16_t ret;
102
102
if (!_initted) {
103
103
return 0 ;
@@ -111,7 +111,7 @@ uint16_t SPIClassRP2040::transfer16(uint16_t data) {
111
111
return ret;
112
112
}
113
113
114
- void SPIClassRP2040 ::transfer (void *buf, size_t count) {
114
+ void SPIClass ::transfer (void *buf, size_t count) {
115
115
DEBUGSPI (" SPI::transfer(%p, %d)\n " , buf, count);
116
116
uint8_t *buff = reinterpret_cast <uint8_t *>(buf);
117
117
for (auto i = 0 ; i < count; i++) {
@@ -122,7 +122,7 @@ void SPIClassRP2040::transfer(void *buf, size_t count) {
122
122
DEBUGSPI (" SPI::transfer completed\n " );
123
123
}
124
124
125
- void SPIClassRP2040 ::beginTransaction (SPISettings settings) {
125
+ void SPIClass ::beginTransaction (SPISettings settings) {
126
126
DEBUGSPI (" SPI::beginTransaction(clk=%d, bo=%s\n " , _spis.getClockFreq (), (_spis.getBitOrder () == MSBFIRST) ? " MSB" :" LSB" );
127
127
_spis = settings;
128
128
if (_initted) {
@@ -134,7 +134,7 @@ void SPIClassRP2040::beginTransaction(SPISettings settings) {
134
134
_initted = true ;
135
135
}
136
136
137
- void SPIClassRP2040 ::endTransaction (void ) {
137
+ void SPIClass ::endTransaction (void ) {
138
138
DEBUGSPI (" SPI::endTransaction()\n " );
139
139
if (_initted) {
140
140
DEBUGSPI (" SPI: deinitting currently active SPI\n " );
@@ -143,7 +143,7 @@ void SPIClassRP2040::endTransaction(void) {
143
143
_initted = false ;
144
144
}
145
145
146
- bool SPIClassRP2040 ::setRX (pin_size_t pin) {
146
+ bool SPIClass ::setRX (pin_size_t pin) {
147
147
constexpr uint32_t valid[2 ] = { __bitset ({0 , 4 , 16 , 20 }) /* SPI0 */ ,
148
148
__bitset ({8 , 12 , 24 , 28 }) /* SPI1 */ };
149
149
if (_running) {
@@ -156,7 +156,7 @@ bool SPIClassRP2040::setRX(pin_size_t pin) {
156
156
}
157
157
}
158
158
159
- bool SPIClassRP2040 ::setCS (pin_size_t pin) {
159
+ bool SPIClass ::setCS (pin_size_t pin) {
160
160
constexpr uint32_t valid[2 ] = { __bitset ({1 , 5 , 17 , 21 }) /* SPI0 */ ,
161
161
__bitset ({9 , 13 , 25 , 29 }) /* SPI1 */ };
162
162
if (_running) {
@@ -169,7 +169,7 @@ bool SPIClassRP2040::setCS(pin_size_t pin) {
169
169
}
170
170
}
171
171
172
- bool SPIClassRP2040 ::setSCK (pin_size_t pin) {
172
+ bool SPIClass ::setSCK (pin_size_t pin) {
173
173
constexpr uint32_t valid[2 ] = { __bitset ({2 , 6 , 18 , 22 }) /* SPI0 */ ,
174
174
__bitset ({10 , 14 , 26 }) /* SPI1 */ };
175
175
if (_running) {
@@ -182,7 +182,7 @@ bool SPIClassRP2040::setSCK(pin_size_t pin) {
182
182
}
183
183
}
184
184
185
- bool SPIClassRP2040 ::setTX (pin_size_t pin) {
185
+ bool SPIClass ::setTX (pin_size_t pin) {
186
186
constexpr uint32_t valid[2 ] = { __bitset ({3 , 7 , 19 , 23 }) /* SPI0 */ ,
187
187
__bitset ({11 , 15 , 27 }) /* SPI1 */ };
188
188
if (_running) {
@@ -195,7 +195,7 @@ bool SPIClassRP2040::setTX(pin_size_t pin) {
195
195
}
196
196
}
197
197
198
- void SPIClassRP2040 ::begin (bool hwCS) {
198
+ void SPIClass ::begin (bool hwCS) {
199
199
DEBUGSPI (" SPI::begin(%d), rx=%d, cs=%d, sck=%d, tx=%d\n " , hwCS, _RX, _CS, _SCK, _TX);
200
200
gpio_set_function (_RX, GPIO_FUNC_SPI);
201
201
_hwCS = hwCS;
@@ -208,7 +208,7 @@ void SPIClassRP2040::begin(bool hwCS) {
208
208
beginTransaction (_spis);
209
209
}
210
210
211
- void SPIClassRP2040 ::end () {
211
+ void SPIClass ::end () {
212
212
DEBUGSPI (" SPI::end()\n " );
213
213
gpio_set_function (_RX, GPIO_FUNC_SIO);
214
214
if (_hwCS) {
@@ -218,19 +218,19 @@ void SPIClassRP2040::end() {
218
218
gpio_set_function (_TX, GPIO_FUNC_SIO);
219
219
}
220
220
221
- void SPIClassRP2040 ::setBitOrder (BitOrder order) {
221
+ void SPIClass ::setBitOrder (BitOrder order) {
222
222
_spis = SPISettings ( _spis.getClockFreq (), order, _spis.getDataMode () );
223
223
beginTransaction (_spis);
224
224
}
225
225
226
- void SPIClassRP2040 ::setDataMode (uint8_t uc_mode) {
226
+ void SPIClass ::setDataMode (uint8_t uc_mode) {
227
227
_spis = SPISettings ( _spis.getClockFreq (), _spis.getBitOrder (), uc_mode );
228
228
beginTransaction (_spis);
229
229
}
230
230
231
- void SPIClassRP2040 ::setClockDivider (uint8_t uc_div) {
231
+ void SPIClass ::setClockDivider (uint8_t uc_div) {
232
232
(void ) uc_div; // no-op
233
233
}
234
234
235
- SPIClassRP2040 SPI (spi0, 0 , 1 , 2 , 3 );
236
- SPIClassRP2040 SPI1 (spi1, 8 , 9 , 10 , 11 );
235
+ SPIClassSPI (spi0, 0 , 1 , 2 , 3 );
236
+ SPIClassSPI1 (spi1, 8 , 9 , 10 , 11 );
0 commit comments