@@ -156,6 +156,76 @@ void ArduinoSPI::setPins(bsp_io_port_pin_t miso, bsp_io_port_pin_t mosi,
156
156
pinPeripheral (sck, (uint32_t ) IOPORT_CFG_PERIPHERAL_PIN | peripheralCfg);
157
157
}
158
158
159
+ void ArduinoSPI::configSpi (arduino::SPISettings const & settings)
160
+ {
161
+ auto [clk_phase, clk_polarity, bit_order] = toFspSpiConfig (settings);
162
+
163
+ if (initialized)
164
+ R_SPI_Close (_g_spi_ctrl);
165
+
166
+ rspck_div_setting_t spck_div = _g_spi_ext_cfg->spck_div ;
167
+ R_SPI_CalculateBitrate (settings.getClockFreq (), &spck_div);
168
+
169
+ R_SPI_Open (_g_spi_ctrl, _g_spi_cfg);
170
+
171
+ spi_instance_ctrl_t * p_ctrl = (spi_instance_ctrl_t *)_g_spi_ctrl;
172
+ uint32_t spcmd0 = p_ctrl->p_regs ->SPCMD [0 ];
173
+ uint32_t spbr = p_ctrl->p_regs ->SPBR ;
174
+
175
+ /* Configure CPHA setting. */
176
+ spcmd0 |= (uint32_t ) clk_phase;
177
+
178
+ /* Configure CPOL setting. */
179
+ spcmd0 |= (uint32_t ) clk_polarity << 1 ;
180
+
181
+ /* Configure Bit Order (MSB,LSB) */
182
+ spcmd0 |= (uint32_t ) bit_order << 12 ;
183
+
184
+ /* Configure the Bit Rate Division Setting */
185
+ spcmd0 &= !(((uint32_t )0xFF ) << 2 );
186
+ spcmd0 |= (uint32_t ) spck_div.brdv << 2 ;
187
+
188
+ /* Update settings. */
189
+ p_ctrl->p_regs ->SPCMD [0 ] = (uint16_t ) spcmd0;
190
+ p_ctrl->p_regs ->SPBR = (uint8_t ) spck_div.spbr ;
191
+ }
192
+
193
+ void ArduinoSPI::configSpiSci (arduino::SPISettings const & settings)
194
+ {
195
+ auto [clk_phase, clk_polarity, bit_order] = toFspSpiConfig (settings);
196
+
197
+ if (initialized)
198
+ R_SCI_SPI_Close (_g_spi_ctrl);
199
+
200
+ sci_spi_div_setting_t clk_div = _g_sci_spi_ext_cfg->clk_div ;
201
+ R_SCI_SPI_CalculateBitrate (settings.getClockFreq (), &clk_div, false );
202
+
203
+ R_SCI_SPI_Open (_g_spi_ctrl, _g_spi_cfg);
204
+
205
+ sci_spi_instance_ctrl_t * p_ctrl = (sci_spi_instance_ctrl_t *)_g_spi_ctrl;
206
+ uint32_t spmr = p_ctrl->p_reg ->SPMR ;
207
+ uint32_t scmr = p_ctrl->p_reg ->SCMR ;
208
+ uint32_t smr = R_SCI0_SMR_CM_Msk;
209
+
210
+ /* Configure CPHA setting. */
211
+ spmr |= (uint32_t ) clk_phase << 7 ;
212
+
213
+ /* Configure CPOL setting. */
214
+ spmr |= (uint32_t ) clk_polarity << 6 ;
215
+
216
+ /* Configure Bit Order (MSB,LSB) */
217
+ scmr |= (uint32_t ) bit_order << 3 ;
218
+
219
+ /* Select the baud rate generator clock divider. */
220
+ smr |= (uint32_t ) clk_div.cks ;
221
+
222
+ /* Update settings. */
223
+ p_ctrl->p_reg ->SMR = (uint8_t ) smr;
224
+ p_ctrl->p_reg ->BRR = (uint8_t ) clk_div.brr ;
225
+ p_ctrl->p_reg ->SPMR = spmr;
226
+ p_ctrl->p_reg ->SCMR = scmr;
227
+ }
228
+
159
229
std::tuple<spi_clk_phase_t , spi_clk_polarity_t , spi_bit_order_t > ArduinoSPI::toFspSpiConfig (arduino::SPISettings const & settings)
160
230
{
161
231
spi_clk_phase_t clk_phase = SPI_CLK_PHASE_EDGE_ODD;
@@ -263,76 +333,10 @@ void ArduinoSPI::transfer(void *buf, size_t count) {
263
333
264
334
void ArduinoSPI::beginTransaction (arduino::SPISettings settings)
265
335
{
266
- auto [clk_phase, clk_polarity, bit_order] = toFspSpiConfig (settings);
267
-
268
- // Clock settings
269
- if (_is_sci) {
270
-
271
- if (initialized) {
272
- R_SCI_SPI_Close (_g_spi_ctrl);
273
- }
274
-
275
- sci_spi_div_setting_t clk_div = _g_sci_spi_ext_cfg->clk_div ;
276
- R_SCI_SPI_CalculateBitrate (settings.getClockFreq (), &clk_div, false );
277
-
278
- R_SCI_SPI_Open (_g_spi_ctrl, _g_spi_cfg);
279
-
280
- sci_spi_instance_ctrl_t * p_ctrl = (sci_spi_instance_ctrl_t *)_g_spi_ctrl;
281
- uint32_t spmr = p_ctrl->p_reg ->SPMR ;
282
- uint32_t scmr = p_ctrl->p_reg ->SCMR ;
283
- uint32_t smr = R_SCI0_SMR_CM_Msk;
284
-
285
- /* Configure CPHA setting. */
286
- spmr |= (uint32_t ) clk_phase << 7 ;
287
-
288
- /* Configure CPOL setting. */
289
- spmr |= (uint32_t ) clk_polarity << 6 ;
290
-
291
- /* Configure Bit Order (MSB,LSB) */
292
- scmr |= (uint32_t ) bit_order << 3 ;
293
-
294
- /* Select the baud rate generator clock divider. */
295
- smr |= (uint32_t ) clk_div.cks ;
296
-
297
- // Update settings
298
- p_ctrl->p_reg ->SMR = (uint8_t ) smr;
299
- p_ctrl->p_reg ->BRR = (uint8_t ) clk_div.brr ;
300
- p_ctrl->p_reg ->SPMR = spmr;
301
- p_ctrl->p_reg ->SCMR = scmr;
302
-
303
- } else {
304
-
305
- if (initialized) {
306
- R_SPI_Close (_g_spi_ctrl);
307
- }
308
-
309
- rspck_div_setting_t spck_div = _g_spi_ext_cfg->spck_div ;
310
- R_SPI_CalculateBitrate (settings.getClockFreq (), &spck_div);
311
-
312
- R_SPI_Open (_g_spi_ctrl, _g_spi_cfg);
313
-
314
- spi_instance_ctrl_t * p_ctrl = (spi_instance_ctrl_t *)_g_spi_ctrl;
315
- uint32_t spcmd0 = p_ctrl->p_regs ->SPCMD [0 ];
316
- uint32_t spbr = p_ctrl->p_regs ->SPBR ;
317
-
318
- /* Configure CPHA setting. */
319
- spcmd0 |= (uint32_t ) clk_phase;
320
-
321
- /* Configure CPOL setting. */
322
- spcmd0 |= (uint32_t ) clk_polarity << 1 ;
323
-
324
- /* Configure Bit Order (MSB,LSB) */
325
- spcmd0 |= (uint32_t ) bit_order << 12 ;
326
-
327
- /* Configure the Bit Rate Division Setting */
328
- spcmd0 &= !(((uint32_t )0xFF ) << 2 );
329
- spcmd0 |= (uint32_t ) spck_div.brdv << 2 ;
330
-
331
- // Update settings
332
- p_ctrl->p_regs ->SPCMD [0 ] = (uint16_t ) spcmd0;
333
- p_ctrl->p_regs ->SPBR = (uint8_t ) spck_div.spbr ;
334
-
335
- }
336
+ if (_is_sci)
337
+ configSpiSci (settings);
338
+ else
339
+ configSpi (settings);
336
340
}
337
341
338
342
void ArduinoSPI::endTransaction (void ) {
0 commit comments