Skip to content

Commit 3c46426

Browse files
committed
Wire: adapt clocks to C33 and fix useless extra delay
1 parent 25ea7bc commit 3c46426

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

libraries/Wire/Wire.cpp

+24-13
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,9 @@ void TwoWire::begin(void) {
317317

318318
m_i2c_cfg.p_extend = &m_i2c_extend;
319319
m_i2c_cfg.p_callback = WireMasterCallback;
320+
321+
m_i2c_extend.timeout_mode = IIC_MASTER_TIMEOUT_MODE_SHORT;
322+
m_i2c_extend.timeout_scl_low = IIC_MASTER_TIMEOUT_SCL_LOW_DISABLED;
320323
}
321324

322325
m_i2c_cfg.channel = channel;
@@ -325,7 +328,7 @@ void TwoWire::begin(void) {
325328
m_i2c_cfg.addr_mode = (address_mode == ADDRESS_MODE_7_BITS) ? I2C_MASTER_ADDR_MODE_7BIT : I2C_MASTER_ADDR_MODE_10BIT;
326329
m_i2c_cfg.p_transfer_tx = NULL;
327330
m_i2c_cfg.p_transfer_rx = NULL;
328-
331+
329332
m_i2c_cfg.p_context = &m_i2c_cfg;
330333
m_i2c_cfg.ipl = (12);
331334

@@ -457,13 +460,13 @@ uint8_t TwoWire::read_from(uint8_t address, uint8_t* data, uint8_t length, unsig
457460
}
458461
if(err == FSP_SUCCESS) {
459462
if(m_read != nullptr) {
463+
bus_status = WIRE_STATUS_UNSET;
460464
err = m_read(&m_i2c_ctrl,data,length,!sendStop);
461465
}
462466
}
463-
bus_status = WIRE_STATUS_UNSET;
464-
while(timeout_ms > 0 && bus_status == WIRE_STATUS_UNSET) {
465-
timeout_ms--;
466-
delay(1);
467+
timeout_ms = millis() + timeout_ms;
468+
while(millis() < timeout_ms && bus_status == WIRE_STATUS_UNSET && err == FSP_SUCCESS) {
469+
467470
}
468471
}
469472

@@ -485,13 +488,13 @@ uint8_t TwoWire::write_to(uint8_t address, uint8_t* data, uint8_t length, unsign
485488
}
486489
if(err == FSP_SUCCESS) {
487490
if(m_write != nullptr) {
491+
bus_status = WIRE_STATUS_UNSET;
488492
err = m_write(&m_i2c_ctrl,data,length,!sendStop);
489493
}
490494
}
491-
bus_status = WIRE_STATUS_UNSET;
492-
while(err == FSP_SUCCESS && timeout_ms > 0 && bus_status == WIRE_STATUS_UNSET) {
493-
timeout_ms--;
494-
delay(1);
495+
timeout_ms = millis() + timeout_ms;
496+
while(millis() < timeout_ms && bus_status == WIRE_STATUS_UNSET && err == FSP_SUCCESS) {
497+
495498
}
496499

497500
if(err != FSP_SUCCESS) {
@@ -529,14 +532,20 @@ void TwoWire::setClock(uint32_t freq) {
529532
if(is_master) {
530533
m_i2c_cfg.rate = (i2c_master_rate_t)freq;
531534

535+
int clock_divisor = (R_FSP_SystemClockHzGet(BSP_FEATURE_SCI_CLOCK) / 48000000u) - 1;
536+
532537
if (is_sci) {
538+
m_sci_i2c_extend.clock_settings.clk_divisor_value = 0;
539+
m_sci_i2c_extend.clock_settings.cycles_value = 15;
540+
m_sci_i2c_extend.clock_settings.snfr_value = (1);
533541
switch (m_i2c_cfg.rate) {
534542
case I2C_MASTER_RATE_STANDARD:
535543
m_sci_i2c_extend.clock_settings.brr_value = 14;
536544
m_sci_i2c_extend.clock_settings.mddr_value = 255;
537545
m_sci_i2c_extend.clock_settings.bitrate_modulation = false;
538546
break;
539547
case I2C_MASTER_RATE_FAST:
548+
default:
540549
m_sci_i2c_extend.clock_settings.brr_value = 2;
541550
m_sci_i2c_extend.clock_settings.mddr_value = 204;
542551
m_sci_i2c_extend.clock_settings.bitrate_modulation = true;
@@ -547,18 +556,20 @@ void TwoWire::setClock(uint32_t freq) {
547556
case I2C_MASTER_RATE_STANDARD:
548557
m_i2c_extend.clock_settings.brl_value = 27;
549558
m_i2c_extend.clock_settings.brh_value = 26;
550-
m_i2c_extend.clock_settings.cks_value = 2;
559+
m_i2c_extend.clock_settings.cks_value = 2 + clock_divisor;
551560
break;
552561
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;
562+
m_i2c_extend.clock_settings.brl_value = 16;
563+
m_i2c_extend.clock_settings.brh_value = 15;
564+
m_i2c_extend.clock_settings.cks_value = 0 + clock_divisor;
556565
break;
566+
#if BSP_FEATURE_IIC_FAST_MODE_PLUS
557567
case I2C_MASTER_RATE_FASTPLUS:
558568
m_i2c_extend.clock_settings.brl_value = 6;
559569
m_i2c_extend.clock_settings.brh_value = 5;
560570
m_i2c_extend.clock_settings.cks_value = 0;
561571
break;
572+
#endif
562573
}
563574
}
564575
}

0 commit comments

Comments
 (0)