@@ -422,6 +422,31 @@ RA6W1_TIM_INSTANCE_DEFINE(7, TIM_W_TIM8, VECTOR_NUMBER_TIMW7_IRQ)
422422#endif /* BSP_USING_TIM_W */
423423
424424#ifdef BSP_USING_HW_I2C0
425+
426+ #if defined(BSP_I2C0_RATE_STANDARD )
427+ /* 100 kHz: tLOW=4.77 us, tHIGH=5.22 us */
428+ #define I2C0_MASTER_RATE I2C_MASTER_RATE_STANDARD
429+ #define I2C0_MASTER_SCL_LCNT 187
430+ #define I2C0_MASTER_SCL_HCNT 205
431+
432+ #elif defined(BSP_I2C0_RATE_FAST )
433+ /* 400 kHz: tLOW=1.38 us, tHIGH=1.14 us */
434+ #define I2C0_MASTER_RATE I2C_MASTER_RATE_FAST
435+ #define I2C0_MASTER_SCL_LCNT 51
436+ #define I2C0_MASTER_SCL_HCNT 41
437+
438+ #elif defined(BSP_I2C0_RATE_FASTPLUS )
439+ /* 1 MHz: tLOW=580 ns, tHIGH=448 ns */
440+ #define I2C0_MASTER_RATE I2C_MASTER_RATE_FASTPLUS
441+ #define I2C0_MASTER_SCL_LCNT 19
442+ #define I2C0_MASTER_SCL_HCNT 13
443+
444+ #elif defined(BSP_I2C0_RATE_HIGHSPEED )
445+ #error "40 MHz I2C source cannot generate 3.4 MHz with the minimum HCNT/LCNT"
446+ #else
447+ #error "Select one BSP_I2C0_RATE_xxx option"
448+ #endif
449+
425450i2c_master_w_instance_ctrl_t g_i2c_master0_ctrl ;
426451
427452const i2c_master_w_extended_cfg_t g_i2c_master0_extend =
@@ -437,15 +462,15 @@ const i2c_master_w_extended_cfg_t g_i2c_master0_extend =
437462 .gen_irq = FSP_INVALID_VECTOR ,
438463#endif
439464 .gen_ipl = 12 ,
440- /* Actual calculated bitrate: 399600. Actual calculated duty cycle: 50%. Frequency of the selected clock source: 80000000. */
441- .clock_settings .scl_lcnt = 100 ,
442- .clock_settings .scl_hcnt = 93 ,
465+
466+ .clock_settings .scl_lcnt = I2C0_MASTER_SCL_LCNT ,
467+ .clock_settings .scl_hcnt = I2C0_MASTER_SCL_HCNT ,
443468};
444469
445470const i2c_master_cfg_t g_i2c_master0_cfg =
446471{
447472 .channel = 1 - I2C_MASTER_W_CHANNEL_OFFSET ,
448- .rate = I2C_MASTER_RATE_FAST ,
473+ .rate = I2C0_MASTER_RATE ,
449474 .slave = 0x1D ,
450475 .addr_mode = I2C_MASTER_ADDR_MODE_7BIT ,
451476 .p_transfer_tx = NULL ,
@@ -485,6 +510,31 @@ const i2c_master_instance_t g_i2c_master0 =
485510#endif
486511
487512#ifdef BSP_USING_HW_I2C1
513+
514+ #if defined(BSP_I2C1_RATE_STANDARD )
515+ /* 100 kHz: tLOW=4.77 us, tHIGH=5.22 us */
516+ #define I2C1_MASTER_RATE I2C_MASTER_RATE_STANDARD
517+ #define I2C1_MASTER_SCL_LCNT 187
518+ #define I2C1_MASTER_SCL_HCNT 205
519+
520+ #elif defined(BSP_I2C1_RATE_FAST )
521+ /* 400 kHz: tLOW=1.38 us, tHIGH=1.14 us */
522+ #define I2C1_MASTER_RATE I2C_MASTER_RATE_FAST
523+ #define I2C1_MASTER_SCL_LCNT 51
524+ #define I2C1_MASTER_SCL_HCNT 41
525+
526+ #elif defined(BSP_I2C1_RATE_FASTPLUS )
527+ /* 1 MHz: tLOW=580 ns, tHIGH=448 ns */
528+ #define I2C1_MASTER_RATE I2C_MASTER_RATE_FASTPLUS
529+ #define I2C1_MASTER_SCL_LCNT 19
530+ #define I2C1_MASTER_SCL_HCNT 13
531+
532+ #elif defined(BSP_I2C1_RATE_HIGHSPEED )
533+ #error "40 MHz I2C source cannot generate 3.4 MHz with the minimum HCNT/LCNT"
534+ #else
535+ #error "Select one BSP_I2C1_RATE_xxx option"
536+ #endif
537+
488538i2c_master_w_instance_ctrl_t g_i2c_master1_ctrl ;
489539
490540const i2c_master_w_extended_cfg_t g_i2c_master1_extend =
@@ -500,15 +550,15 @@ const i2c_master_w_extended_cfg_t g_i2c_master1_extend =
500550 .gen_irq = FSP_INVALID_VECTOR ,
501551#endif
502552 .gen_ipl = 12 ,
503- /* Actual calculated bitrate: 399600. Actual calculated duty cycle: 50%. Frequency of the selected clock source: 80000000. */
504- .clock_settings .scl_lcnt = 100 ,
505- .clock_settings .scl_hcnt = 93 ,
553+
554+ .clock_settings .scl_lcnt = I2C1_MASTER_SCL_LCNT ,
555+ .clock_settings .scl_hcnt = I2C1_MASTER_SCL_HCNT ,
506556};
507557
508558const i2c_master_cfg_t g_i2c_master1_cfg =
509559{
510560 .channel = 2 - I2C_MASTER_W_CHANNEL_OFFSET ,
511- .rate = I2C_MASTER_RATE_FAST ,
561+ .rate = I2C1_MASTER_RATE ,
512562 .slave = 0x1D ,
513563 .addr_mode = I2C_MASTER_ADDR_MODE_7BIT ,
514564 .p_transfer_tx = NULL ,
0 commit comments