@@ -32,9 +32,6 @@ ArduinoSPI::ArduinoSPI(spi_ctrl_t *g_spi_ctrl
32
32
_g_spi_ctrl(g_spi_ctrl)
33
33
, _g_spi_cfg(g_spi_cfg)
34
34
, _g_spi_ext_cfg(g_spi_ext_cfg)
35
- , _clk_phase(SPI_CLK_PHASE_EDGE_ODD)
36
- , _clk_polarity(SPI_CLK_POLARITY_LOW)
37
- , _bit_order(SPI_BIT_ORDER_MSB_FIRST)
38
35
, _channel(ch)
39
36
, _is_sci(false )
40
37
{
@@ -46,9 +43,6 @@ ArduinoSPI::ArduinoSPI(spi_ctrl_t *g_spi_ctrl
46
43
_g_spi_ctrl(g_spi_ctrl)
47
44
, _g_spi_cfg(g_spi_cfg)
48
45
, _g_sci_spi_ext_cfg(g_spi_ext_cfg)
49
- , _clk_phase(SPI_CLK_PHASE_EDGE_ODD)
50
- , _clk_polarity(SPI_CLK_POLARITY_LOW)
51
- , _bit_order(SPI_BIT_ORDER_MSB_FIRST)
52
46
, _channel(ch)
53
47
, _is_sci(true )
54
48
{
@@ -162,6 +156,40 @@ void ArduinoSPI::setPins(bsp_io_port_pin_t miso, bsp_io_port_pin_t mosi,
162
156
pinPeripheral (sck, (uint32_t ) IOPORT_CFG_PERIPHERAL_PIN | peripheralCfg);
163
157
}
164
158
159
+ std::tuple<spi_clk_phase_t , spi_clk_polarity_t , spi_bit_order_t > ArduinoSPI::toFspSpiConfig (arduino::SPISettings const & settings)
160
+ {
161
+ spi_clk_phase_t clk_phase = SPI_CLK_PHASE_EDGE_ODD;
162
+ spi_clk_polarity_t clk_polarity = SPI_CLK_POLARITY_LOW;
163
+ spi_bit_order_t bit_order = SPI_BIT_ORDER_MSB_FIRST;
164
+
165
+ switch (settings.getDataMode ())
166
+ {
167
+ case arduino::SPI_MODE0:
168
+ clk_polarity = SPI_CLK_POLARITY_LOW;
169
+ clk_phase = SPI_CLK_PHASE_EDGE_ODD;
170
+ break ;
171
+ case arduino::SPI_MODE1:
172
+ clk_polarity = SPI_CLK_POLARITY_LOW;
173
+ clk_phase = SPI_CLK_PHASE_EDGE_EVEN;
174
+ break ;
175
+ case arduino::SPI_MODE2:
176
+ clk_polarity = SPI_CLK_POLARITY_HIGH;
177
+ clk_phase = SPI_CLK_PHASE_EDGE_ODD;
178
+ break ;
179
+ case arduino::SPI_MODE3:
180
+ clk_polarity = SPI_CLK_POLARITY_HIGH;
181
+ clk_phase = SPI_CLK_PHASE_EDGE_EVEN;
182
+ break ;
183
+ }
184
+
185
+ if (settings.getBitOrder () == LSBFIRST)
186
+ bit_order = SPI_BIT_ORDER_LSB_FIRST;
187
+ else
188
+ bit_order = SPI_BIT_ORDER_MSB_FIRST;
189
+
190
+ return std::make_tuple (clk_phase, clk_polarity, bit_order);
191
+ }
192
+
165
193
void ArduinoSPI::usingInterrupt (int interruptNumber)
166
194
{
167
195
}
@@ -233,32 +261,9 @@ void ArduinoSPI::transfer(void *buf, size_t count) {
233
261
}
234
262
}
235
263
236
- void ArduinoSPI::beginTransaction (arduino::SPISettings settings) {
237
- // data mode
238
- switch (settings.getDataMode ()){
239
- case arduino::SPI_MODE0:
240
- _clk_polarity = SPI_CLK_POLARITY_LOW;
241
- _clk_phase = SPI_CLK_PHASE_EDGE_ODD;
242
- break ;
243
- case arduino::SPI_MODE1:
244
- _clk_polarity = SPI_CLK_POLARITY_LOW;
245
- _clk_phase = SPI_CLK_PHASE_EDGE_EVEN;
246
- break ;
247
- case arduino::SPI_MODE2:
248
- _clk_polarity = SPI_CLK_POLARITY_HIGH;
249
- _clk_phase = SPI_CLK_PHASE_EDGE_ODD;
250
- break ;
251
- case arduino::SPI_MODE3:
252
- _clk_polarity = SPI_CLK_POLARITY_HIGH;
253
- _clk_phase = SPI_CLK_PHASE_EDGE_EVEN;
254
- break ;
255
- }
256
- // bit order
257
- if (settings.getBitOrder () == LSBFIRST){
258
- _bit_order = SPI_BIT_ORDER_LSB_FIRST;
259
- } else {
260
- _bit_order = SPI_BIT_ORDER_MSB_FIRST;
261
- }
264
+ void ArduinoSPI::beginTransaction (arduino::SPISettings settings)
265
+ {
266
+ auto [clk_phase, clk_polarity, bit_order] = toFspSpiConfig (settings);
262
267
263
268
// Clock settings
264
269
if (_is_sci) {
@@ -278,13 +283,13 @@ void ArduinoSPI::beginTransaction(arduino::SPISettings settings) {
278
283
uint32_t smr = R_SCI0_SMR_CM_Msk;
279
284
280
285
/* Configure CPHA setting. */
281
- spmr |= (uint32_t ) _clk_phase << 7 ;
286
+ spmr |= (uint32_t ) clk_phase << 7 ;
282
287
283
288
/* Configure CPOL setting. */
284
- spmr |= (uint32_t ) _clk_polarity << 6 ;
289
+ spmr |= (uint32_t ) clk_polarity << 6 ;
285
290
286
291
/* Configure Bit Order (MSB,LSB) */
287
- scmr |= (uint32_t ) _bit_order << 3 ;
292
+ scmr |= (uint32_t ) bit_order << 3 ;
288
293
289
294
/* Select the baud rate generator clock divider. */
290
295
smr |= (uint32_t ) clk_div.cks ;
@@ -311,13 +316,13 @@ void ArduinoSPI::beginTransaction(arduino::SPISettings settings) {
311
316
uint32_t spbr = p_ctrl->p_regs ->SPBR ;
312
317
313
318
/* Configure CPHA setting. */
314
- spcmd0 |= (uint32_t ) _clk_phase ;
319
+ spcmd0 |= (uint32_t ) clk_phase ;
315
320
316
321
/* Configure CPOL setting. */
317
- spcmd0 |= (uint32_t ) _clk_polarity << 1 ;
322
+ spcmd0 |= (uint32_t ) clk_polarity << 1 ;
318
323
319
324
/* Configure Bit Order (MSB,LSB) */
320
- spcmd0 |= (uint32_t ) _bit_order << 12 ;
325
+ spcmd0 |= (uint32_t ) bit_order << 12 ;
321
326
322
327
/* Configure the Bit Rate Division Setting */
323
328
spcmd0 &= !(((uint32_t )0xFF ) << 2 );
0 commit comments