@@ -184,13 +184,12 @@ void TwoWire::WireSlaveCallback(i2c_slave_callback_args_t *arg) {
184
184
185
185
186
186
/* -------------------------------------------------------------------------- */
187
- TwoWire::TwoWire (int scl, int sda, WireSpeed_t wp /* = SPEED_STANDARD */ , WireAddressMode_t am /* = ADDRESS_MODE_7_BITS*/ , bool prefer_sci /* = false*/ ) :
187
+ TwoWire::TwoWire (int scl, int sda, WireAddressMode_t am /* = ADDRESS_MODE_7_BITS*/ , bool prefer_sci /* = false*/ ) :
188
188
scl_pin(scl),
189
189
sda_pin(sda),
190
190
init_ok(false ),
191
191
is_master(true ),
192
192
is_sci(false ),
193
- speed_mode(wp),
194
193
address_mode(am),
195
194
timeout(1000 ),
196
195
transmission_begun(false ),
@@ -281,11 +280,14 @@ void TwoWire::begin(void) {
281
280
init_ok &= cfg_pins (max_index);
282
281
283
282
if (init_ok) {
284
-
283
+
285
284
/* -----------------------------------
286
285
->>>>> MASTER initialization
287
286
* ----------------------------------- */
288
287
if (is_master) {
288
+
289
+ setClock (I2C_MASTER_RATE_STANDARD);
290
+
289
291
if (is_sci) {
290
292
TwoWire::g_SCIWires[channel] = this ;
291
293
@@ -317,38 +319,16 @@ void TwoWire::begin(void) {
317
319
m_i2c_cfg.p_callback = WireMasterCallback;
318
320
}
319
321
320
- m_sci_i2c_extend.clock_settings .clk_divisor_value = 0 ;
321
- m_sci_i2c_extend.clock_settings .brr_value = 14 ;
322
- m_sci_i2c_extend.clock_settings .mddr_value = 255 ;
323
- m_sci_i2c_extend.clock_settings .bitrate_modulation = false ;
324
- m_sci_i2c_extend.clock_settings .cycles_value = 15 ;
325
- m_sci_i2c_extend.clock_settings .snfr_value = (1 );
326
-
327
-
328
- /* Actual calculated bitrate: 99272. Actual calculated duty cycle: 49%. */
329
- m_i2c_extend.timeout_mode = IIC_MASTER_TIMEOUT_MODE_SHORT;
330
- m_i2c_extend.timeout_scl_low = IIC_MASTER_TIMEOUT_SCL_LOW_DISABLED;
331
- m_i2c_extend.clock_settings .brl_value = 27 ;
332
- m_i2c_extend.clock_settings .brh_value = 26 ;
333
- m_i2c_extend.clock_settings .cks_value = 2 ;
334
-
335
322
m_i2c_cfg.channel = channel;
336
323
m_i2c_cfg.rate = I2C_MASTER_RATE_STANDARD;
337
- if (speed_mode == SPEED_FAST) {
338
- m_i2c_cfg.rate = I2C_MASTER_RATE_FAST;
339
- }
340
- else if (speed_mode == SPEED_VERY_FAST) {
341
- m_i2c_cfg.rate = I2C_MASTER_RATE_FASTPLUS;
342
- }
343
324
m_i2c_cfg.slave = 0x00 ;
344
325
m_i2c_cfg.addr_mode = (address_mode == ADDRESS_MODE_7_BITS) ? I2C_MASTER_ADDR_MODE_7BIT : I2C_MASTER_ADDR_MODE_10BIT;
345
326
m_i2c_cfg.p_transfer_tx = NULL ;
346
327
m_i2c_cfg.p_transfer_rx = NULL ;
347
328
348
329
m_i2c_cfg.p_context = &m_i2c_cfg;
349
330
m_i2c_cfg.ipl = (12 );
350
-
351
-
331
+
352
332
} // if(is_master) {
353
333
/* -----------------------------------
354
334
->>>>> SLAVE initialization
@@ -369,12 +349,6 @@ void TwoWire::begin(void) {
369
349
370
350
s_i2c_cfg.channel = channel;
371
351
s_i2c_cfg.rate = I2C_SLAVE_RATE_STANDARD;
372
- if (speed_mode == SPEED_FAST) {
373
- s_i2c_cfg.rate = I2C_SLAVE_RATE_FAST;
374
- }
375
- else if (speed_mode == SPEED_VERY_FAST) {
376
- s_i2c_cfg.rate = I2C_SLAVE_RATE_FASTPLUS;
377
- }
378
352
s_i2c_cfg.slave = slave_address;
379
353
s_i2c_cfg.addr_mode = (address_mode == ADDRESS_MODE_7_BITS) ? I2C_SLAVE_ADDR_MODE_7BIT : I2C_SLAVE_ADDR_MODE_10BIT;
380
354
s_i2c_cfg.general_call_enable = false ;
@@ -544,7 +518,7 @@ uint8_t TwoWire::write_to(uint8_t address, uint8_t* data, uint8_t length, unsign
544
518
}
545
519
546
520
/* -------------------------------------------------------------------------- */
547
- void TwoWire::setClock (uint32_t ws ) {
521
+ void TwoWire::setClock (uint32_t freq ) {
548
522
/* -------------------------------------------------------------------------- */
549
523
if (init_ok && is_master) {
550
524
if (m_close != nullptr ) {
@@ -553,16 +527,40 @@ void TwoWire::setClock(uint32_t ws) {
553
527
}
554
528
555
529
if (is_master) {
556
- if ((WireSpeed_t)ws == SPEED_STANDARD) {
557
- m_i2c_cfg.rate = I2C_MASTER_RATE_STANDARD;
558
- }
559
- else if ((WireSpeed_t)ws == SPEED_FAST) {
560
- m_i2c_cfg.rate = I2C_MASTER_RATE_FAST;
561
- }
562
- else if ((WireSpeed_t)ws == SPEED_VERY_FAST) {
563
- m_i2c_cfg.rate = I2C_MASTER_RATE_FASTPLUS;
530
+ m_i2c_cfg.rate = (i2c_master_rate_t )freq;
531
+
532
+ if (is_sci) {
533
+ switch (m_i2c_cfg.rate ) {
534
+ case I2C_MASTER_RATE_STANDARD:
535
+ m_sci_i2c_extend.clock_settings .brr_value = 14 ;
536
+ m_sci_i2c_extend.clock_settings .mddr_value = 255 ;
537
+ m_sci_i2c_extend.clock_settings .bitrate_modulation = false ;
538
+ break ;
539
+ case I2C_MASTER_RATE_FAST:
540
+ m_sci_i2c_extend.clock_settings .brr_value = 2 ;
541
+ m_sci_i2c_extend.clock_settings .mddr_value = 204 ;
542
+ m_sci_i2c_extend.clock_settings .bitrate_modulation = true ;
543
+ break ;
544
+ }
545
+ } else {
546
+ switch (m_i2c_cfg.rate ) {
547
+ case I2C_MASTER_RATE_STANDARD:
548
+ m_i2c_extend.clock_settings .brl_value = 27 ;
549
+ m_i2c_extend.clock_settings .brh_value = 26 ;
550
+ m_i2c_extend.clock_settings .cks_value = 2 ;
551
+ break ;
552
+ case I2C_MASTER_RATE_FAST:
553
+ m_i2c_extend.clock_settings .brl_value = 24 ;
554
+ m_i2c_extend.clock_settings .brh_value = 23 ;
555
+ m_i2c_extend.clock_settings .cks_value = 0 ;
556
+ break ;
557
+ case I2C_MASTER_RATE_FASTPLUS:
558
+ m_i2c_extend.clock_settings .brl_value = 6 ;
559
+ m_i2c_extend.clock_settings .brh_value = 5 ;
560
+ m_i2c_extend.clock_settings .cks_value = 0 ;
561
+ break ;
562
+ }
564
563
}
565
-
566
564
}
567
565
568
566
if (init_ok) {
0 commit comments