35
35
#include "shared-bindings/board/__init__.h"
36
36
37
37
#include "esp_log.h"
38
+ #include "esp_err.h"
39
+ #include "driver/i2c.h"
38
40
39
41
displayio_fourwire_obj_t board_display_obj ;
40
42
@@ -50,7 +52,69 @@ uint8_t display_init_sequence[] = {
50
52
0x29 , 0 | DELAY , 5 , // _DISPON
51
53
};
52
54
55
+ #define I2C_MASTER_SCL_IO 34
56
+ #define I2C_MASTER_SDA_IO 33
57
+ #define I2C_MASTER_NUM 0
58
+ #define I2C_MASTER_FREQ_HZ 400000
59
+ #define I2C_MASTER_TX_BUF_DISABLE 0
60
+ #define I2C_MASTER_RX_BUF_DISABLE 0
61
+ #define I2C_MASTER_TIMEOUT_MS 1000
62
+ #define I2C_WAIT 40 // Timing (in microseconds) for I2C
63
+
64
+ #define AW9523_ADDR (0x5B)
65
+ #define AW9523_REG_SOFTRESET (0x7f)
66
+ #define AW9523_REG_OUTPUT0 (0x02)
67
+ #define AW9523_REG_CONFIG0 (0x04)
68
+ #define AW9523_DEFAULT_OUTPUT (0)
69
+ #define AW9523_DEFAULT_CONFIG (0x2)
70
+
71
+
72
+ static void io_expander_backlight_init (void ) {
73
+ int i2c_num = I2C_MASTER_NUM ;
74
+ i2c_config_t conf = {
75
+ .mode = I2C_MODE_MASTER ,
76
+ .sda_io_num = I2C_MASTER_SDA_IO ,
77
+ .scl_io_num = I2C_MASTER_SCL_IO ,
78
+ .sda_pullup_en = GPIO_PULLUP_ENABLE ,
79
+ .scl_pullup_en = GPIO_PULLUP_ENABLE ,
80
+ .master .clk_speed = I2C_MASTER_FREQ_HZ ,
81
+ };
82
+ i2c_param_config (i2c_num , & conf );
83
+ i2c_driver_install (i2c_num , conf .mode , I2C_MASTER_RX_BUF_DISABLE , I2C_MASTER_TX_BUF_DISABLE , 0 );
84
+ i2c_cmd_handle_t cmd = i2c_cmd_link_create ();
85
+ i2c_master_start (cmd );
86
+ i2c_master_write_byte (cmd , AW9523_ADDR << 1 | I2C_MASTER_WRITE , true);
87
+ i2c_master_write_byte (cmd , AW9523_REG_SOFTRESET , true);
88
+ i2c_master_write_byte (cmd , 0 , true);
89
+ i2c_master_stop (cmd );
90
+ i2c_master_cmd_begin (i2c_num , cmd , 1000 / portTICK_RATE_MS );
91
+ i2c_cmd_link_delete (cmd );
92
+
93
+ cmd = i2c_cmd_link_create ();
94
+ i2c_master_start (cmd );
95
+ i2c_master_write_byte (cmd , AW9523_ADDR << 1 | I2C_MASTER_WRITE , true);
96
+ i2c_master_write_byte (cmd , AW9523_REG_CONFIG0 , true);
97
+ i2c_master_write_byte (cmd , AW9523_DEFAULT_CONFIG >> 8 , true);
98
+ i2c_master_write_byte (cmd , AW9523_DEFAULT_CONFIG & 0xff , true);
99
+ i2c_master_stop (cmd );
100
+ i2c_master_cmd_begin (i2c_num , cmd , 1000 / portTICK_RATE_MS );
101
+ i2c_cmd_link_delete (cmd );
102
+
103
+ cmd = i2c_cmd_link_create ();
104
+ i2c_master_start (cmd );
105
+ i2c_master_write_byte (cmd , AW9523_ADDR << 1 | I2C_MASTER_WRITE , true);
106
+ i2c_master_write_byte (cmd , AW9523_REG_OUTPUT0 , true);
107
+ i2c_master_write_byte (cmd , AW9523_DEFAULT_OUTPUT >> 8 , true);
108
+ i2c_master_write_byte (cmd , AW9523_DEFAULT_OUTPUT & 0xff , true);
109
+ i2c_master_stop (cmd );
110
+ i2c_master_cmd_begin (i2c_num , cmd , 1000 / portTICK_RATE_MS );
111
+ i2c_cmd_link_delete (cmd );
112
+
113
+ i2c_driver_delete (i2c_num );
114
+ }
115
+
53
116
void board_init (void ) {
117
+ io_expander_backlight_init ();
54
118
busio_spi_obj_t * spi = common_hal_board_create_spi (0 );
55
119
displayio_fourwire_obj_t * bus = & allocate_display_bus ()-> fourwire_bus ;
56
120
bus -> base .type = & displayio_fourwire_type ;
0 commit comments