|
1 | 1 | #include "py/objtuple.h" |
2 | 2 | #include "shared-bindings/board/__init__.h" |
3 | 3 |
|
| 4 | +#define MP_DEFINE_BYTES_OBJ(obj_name, bin) mp_obj_str_t obj_name = {{&mp_type_bytes}, 0, sizeof(bin) - 1, (const byte *)bin} |
| 5 | + |
| 6 | +STATIC MP_DEFINE_BYTES_OBJ(i2c_init_byte_obj, |
| 7 | + "\2\2\0" // set data inversion register (no inversions) |
| 8 | + "\2\1\xfe" // set output data (CLK idle low, all others high) |
| 9 | + "\2\3\x78" // set direction register (cs, mosi, clk, reset as outputs) |
| 10 | + ); |
| 11 | + |
| 12 | +STATIC const mp_rom_map_elem_t tft_io_expander_table[] = { |
| 13 | + { MP_ROM_QSTR(MP_QSTR_i2c_address), MP_ROM_INT(0x3F)}, |
| 14 | + { MP_ROM_QSTR(MP_QSTR_gpio_address), MP_ROM_INT(1)}, |
| 15 | + { MP_ROM_QSTR(MP_QSTR_gpio_data_len), MP_ROM_INT(1)}, |
| 16 | + { MP_ROM_QSTR(MP_QSTR_gpio_data), MP_ROM_INT(0xFD)}, |
| 17 | + { MP_ROM_QSTR(MP_QSTR_cs_bit), MP_ROM_INT(1)}, |
| 18 | + { MP_ROM_QSTR(MP_QSTR_mosi_bit), MP_ROM_INT(7)}, |
| 19 | + { MP_ROM_QSTR(MP_QSTR_clk_bit), MP_ROM_INT(0)}, |
| 20 | + { MP_ROM_QSTR(MP_QSTR_reset_bit), MP_ROM_INT(2)}, |
| 21 | + { MP_ROM_QSTR(MP_QSTR_i2c_init_sequence), &i2c_init_byte_obj}, |
| 22 | +}; |
| 23 | +MP_DEFINE_CONST_DICT(tft_io_expander_dict, tft_io_expander_table); |
| 24 | + |
4 | 25 | STATIC const mp_rom_obj_tuple_t tft_r_pins = { |
5 | 26 | {&mp_type_tuple}, |
6 | 27 | 5, |
@@ -53,6 +74,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { |
53 | 74 | CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS |
54 | 75 |
|
55 | 76 | { MP_ROM_QSTR(MP_QSTR_TFT), MP_ROM_PTR(&tft_dict) }, |
| 77 | + { MP_ROM_QSTR(MP_QSTR_TFT_IO_EXPANDER), MP_ROM_PTR(&tft_io_expander_dict) }, |
56 | 78 |
|
57 | 79 | { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(MICROPY_HW_NEOPIXEL) }, |
58 | 80 |
|
|
0 commit comments