|
36 | 36 |
|
37 | 37 | #define DEFAULT_I2C_FREQ (400000)
|
38 | 38 | #define DEFAULT_I2C_DRIVE (6)
|
| 39 | +#define DEFAULT_I2C_TIMEOUT (50000) |
39 | 40 |
|
40 | 41 | typedef struct _machine_i2c_obj_t {
|
41 | 42 | mp_obj_base_t base;
|
@@ -82,16 +83,18 @@ bool lpi2c_set_iomux(int8_t hw_i2c, uint8_t drive) {
|
82 | 83 |
|
83 | 84 | static void machine_i2c_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
84 | 85 | machine_i2c_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
85 |
| - mp_printf(print, "I2C(%u, freq=%u)", |
86 |
| - self->i2c_id, self->master_config->baudRate_Hz); |
| 86 | + mp_printf(print, "I2C(%u, freq=%u, timeout=%u)", |
| 87 | + self->i2c_id, self->master_config->baudRate_Hz, |
| 88 | + self->master_config->pinLowTimeout_ns / 1000); |
87 | 89 | }
|
88 | 90 |
|
89 | 91 | mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
|
90 |
| - enum { ARG_id, ARG_freq, ARG_drive}; |
| 92 | + enum { ARG_id, ARG_freq, ARG_drive, ARG_timeout}; |
91 | 93 | static const mp_arg_t allowed_args[] = {
|
92 | 94 | { MP_QSTR_id, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
93 | 95 | { MP_QSTR_freq, MP_ARG_INT, {.u_int = DEFAULT_I2C_FREQ} },
|
94 | 96 | { MP_QSTR_drive, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_I2C_DRIVE} },
|
| 97 | + { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_I2C_TIMEOUT} }, |
95 | 98 | };
|
96 | 99 |
|
97 | 100 | // Parse args.
|
@@ -121,6 +124,9 @@ mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
121 | 124 | LPI2C_MasterGetDefaultConfig(self->master_config);
|
122 | 125 | // Initialise the I2C peripheral.
|
123 | 126 | self->master_config->baudRate_Hz = args[ARG_freq].u_int;
|
| 127 | + if (args[ARG_timeout].u_int >= 0) { |
| 128 | + self->master_config->pinLowTimeout_ns = args[ARG_timeout].u_int * 1000; // to be set as ns |
| 129 | + } |
124 | 130 | LPI2C_MasterInit(self->i2c_inst, self->master_config, BOARD_BOOTCLOCKRUN_LPI2C_CLK_ROOT);
|
125 | 131 |
|
126 | 132 | return MP_OBJ_FROM_PTR(self);
|
|
0 commit comments