Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 4 additions & 14 deletions sw/device/lib/hal/i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ static i2c_timing_params_t compute_minimum_timing_parameters(i2c_speed_mode_t sp
.setup_data_cycles = rnd_up_div(250u, SYSCLK_NS),
.hold_data_cycles = 1u,
.setup_stop_cycles = rnd_up_div(4000u, SYSCLK_NS),
.bus_free_time_cycles = rnd_up_div(4700u, SYSCLK_NS)
.bus_free_cycles = rnd_up_div(4700u, SYSCLK_NS)
};
case i2c_speed_mode_fast:
return (i2c_timing_params_t){
Expand All @@ -81,7 +81,7 @@ static i2c_timing_params_t compute_minimum_timing_parameters(i2c_speed_mode_t sp
.setup_data_cycles = rnd_up_div(100u, SYSCLK_NS),
.hold_data_cycles = 1u,
.setup_stop_cycles = rnd_up_div(600u, SYSCLK_NS),
.bus_free_time_cycles = rnd_up_div(1300u, SYSCLK_NS)
.bus_free_cycles = rnd_up_div(1300u, SYSCLK_NS)
};
case i2c_speed_mode_fast_plus:
return (i2c_timing_params_t){
Expand All @@ -95,7 +95,7 @@ static i2c_timing_params_t compute_minimum_timing_parameters(i2c_speed_mode_t sp
.setup_data_cycles = rnd_up_div(50, SYSCLK_NS),
.hold_data_cycles = 1u,
.setup_stop_cycles = rnd_up_div(260u, SYSCLK_NS),
.bus_free_time_cycles = rnd_up_div(500u, SYSCLK_NS)
.bus_free_cycles = rnd_up_div(500u, SYSCLK_NS)
};
default:
return (i2c_timing_params_t){ 0 };
Expand All @@ -120,7 +120,7 @@ void i2c_init(i2c_t i2c, i2c_speed_mode_t speed_mode)
i2c_timing3 t3_reg = { .tsu_dat = timing_params.setup_data_cycles,
.thd_dat = timing_params.hold_data_cycles };
i2c_timing4 t4_reg = { .tsu_sto = timing_params.setup_stop_cycles,
.t_buf = timing_params.bus_free_time_cycles };
.t_buf = timing_params.bus_free_cycles };

VOLATILE_WRITE(i2c->timing0, t0_reg);
VOLATILE_WRITE(i2c->timing1, t1_reg);
Expand All @@ -131,11 +131,6 @@ void i2c_init(i2c_t i2c, i2c_speed_mode_t speed_mode)

void i2c_write_bytes(i2c_t i2c, uint8_t addr, const uint8_t *data, uint8_t num_bytes)
{
// Reset the FMT FIFO as a precautionary step in case something goes wrong when controller's FSM
// is halted and the SW didn't manage to clear the FIFO during that scenario.
i2c_fifo_ctrl fifo_ctrl_reg = { .fmtrst = 1u };
VOLATILE_WRITE(i2c->fifo_ctrl, fifo_ctrl_reg);

// Queue write request
//
// Send start bit, address and R/W bit first
Expand Down Expand Up @@ -163,11 +158,6 @@ void i2c_write_bytes(i2c_t i2c, uint8_t addr, const uint8_t *data, uint8_t num_b

void i2c_read_bytes(i2c_t i2c, uint8_t addr, uint8_t num_bytes)
{
// Reset the FMT FIFO as a precautionary step in case something goes wrong when controller's FSM
// is halted and the SW didn't manage to clear the FIFO during that scenario.
i2c_fifo_ctrl fifo_ctrl_reg = { .fmtrst = 1u };
VOLATILE_WRITE(i2c->fifo_ctrl, fifo_ctrl_reg);

// Queue read request
//
// Send start bit, address and R/W bit first
Expand Down
2 changes: 1 addition & 1 deletion sw/device/lib/hal/i2c.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ typedef struct {
uint16_t setup_data_cycles;
uint16_t hold_data_cycles;
uint16_t setup_stop_cycles;
uint16_t bus_free_time_cycles;
uint16_t bus_free_cycles;
} i2c_timing_params_t;

void i2c_init(i2c_t i2c, i2c_speed_mode_t speed_mode);
Expand Down