@@ -67,9 +67,10 @@ uint8_t pio_i2c_get(PIO pio, uint sm) {
67
67
}
68
68
69
69
void pio_i2c_start (PIO pio , uint sm ) {
70
- pio_i2c_put_or_err (pio , sm , 1u << PIO_I2C_ICOUNT_LSB ); // Escape code for 2 instruction sequence
70
+ pio_i2c_put_or_err (pio , sm , 3u << PIO_I2C_ICOUNT_LSB ); // Escape code for 3 instruction sequence
71
71
pio_i2c_put_or_err (pio , sm , set_scl_sda_program_instructions [I2C_SC1_SD0 ]); // We are already in idle state, just pull SDA low
72
72
pio_i2c_put_or_err (pio , sm , set_scl_sda_program_instructions [I2C_SC0_SD0 ]); // Also pull clock low so we can present data
73
+ pio_i2c_put_or_err (pio , sm , pio_encode_mov (pio_isr , pio_null )); // Ensure ISR counter is clear following a write
73
74
}
74
75
75
76
void pio_i2c_stop (PIO pio , uint sm ) {
@@ -80,11 +81,12 @@ void pio_i2c_stop(PIO pio, uint sm) {
80
81
};
81
82
82
83
void pio_i2c_repstart (PIO pio , uint sm ) {
83
- pio_i2c_put_or_err (pio , sm , 3u << PIO_I2C_ICOUNT_LSB );
84
+ pio_i2c_put_or_err (pio , sm , 4u << PIO_I2C_ICOUNT_LSB );
84
85
pio_i2c_put_or_err (pio , sm , set_scl_sda_program_instructions [I2C_SC0_SD1 ]);
85
86
pio_i2c_put_or_err (pio , sm , set_scl_sda_program_instructions [I2C_SC1_SD1 ]);
86
87
pio_i2c_put_or_err (pio , sm , set_scl_sda_program_instructions [I2C_SC1_SD0 ]);
87
88
pio_i2c_put_or_err (pio , sm , set_scl_sda_program_instructions [I2C_SC0_SD0 ]);
89
+ pio_i2c_put_or_err (pio , sm , pio_encode_mov (pio_isr , pio_null ));
88
90
}
89
91
90
92
static void pio_i2c_wait_idle (PIO pio , uint sm ) {
0 commit comments