@@ -77,41 +77,33 @@ struct auxdisplay_hd44780_config {
77
77
static void auxdisplay_hd44780_set_entry_mode (const struct device * dev );
78
78
static void auxdisplay_hd44780_set_display_mode (const struct device * dev , bool enabled );
79
79
80
+ static void hd44780_pulse_enable_line (const struct device * dev )
81
+ {
82
+ const struct auxdisplay_hd44780_config * const config = dev -> config ;
83
+
84
+ gpio_pin_set_dt (& config -> e_gpio , 1 );
85
+ k_sleep (K_USEC (config -> enable_line_rise_delay ));
86
+ gpio_pin_set_dt (& config -> e_gpio , 0 );
87
+ k_sleep (K_USEC (config -> enable_line_fall_delay ));
88
+ }
89
+
80
90
static void auxdisplay_hd44780_command (const struct device * dev , bool rs , uint8_t cmd ,
81
91
uint8_t mode )
82
92
{
83
93
const struct auxdisplay_hd44780_config * config = dev -> config ;
84
94
int8_t i = 7 ;
85
-
86
- if (mode == AUXDISPLAY_HD44780_MODE_8_BIT ) {
87
- while (i >= 0 ) {
88
- gpio_pin_set_dt (& config -> db_gpios [i ], ((cmd & BIT (i )) ? 1 : 0 ));
89
- -- i ;
90
- }
91
- } else {
92
- while (i >= 4 ) {
93
- gpio_pin_set_dt (& config -> db_gpios [i ], ((cmd & BIT (i )) ? 1 : 0 ));
94
- -- i ;
95
- }
96
- }
95
+ const int8_t lsb_line = (mode == AUXDISPLAY_HD44780_MODE_8_BIT ) ? 0 : 4 ;
96
+ int8_t ncommands = (mode == AUXDISPLAY_HD44780_MODE_4_BIT ) ? 2 : 1 ;
97
97
98
98
gpio_pin_set_dt (& config -> rs_gpio , rs );
99
99
100
- gpio_pin_set_dt (& config -> e_gpio , 1 );
101
- k_sleep (K_USEC (config -> enable_line_rise_delay ));
102
- gpio_pin_set_dt (& config -> e_gpio , 0 );
103
- k_sleep (K_USEC (config -> enable_line_fall_delay ));
104
-
105
- if (mode == AUXDISPLAY_HD44780_MODE_4_BIT ) {
106
- while (i >= 0 ) {
107
- gpio_pin_set_dt (& config -> db_gpios [(i + 4 )], ((cmd & BIT (i )) ? 1 : 0 ));
100
+ while (ncommands -- ) {
101
+ for (int8_t line = 7 ; line >= lsb_line ; -- line ) {
102
+ gpio_pin_set_dt (& config -> db_gpios [line ], ((cmd & BIT (i )) ? 1 : 0 ));
108
103
-- i ;
109
104
}
110
105
111
- gpio_pin_set_dt (& config -> e_gpio , 1 );
112
- k_sleep (K_USEC (config -> enable_line_rise_delay ));
113
- gpio_pin_set_dt (& config -> e_gpio , 0 );
114
- k_sleep (K_USEC (config -> enable_line_fall_delay ));
106
+ hd44780_pulse_enable_line (dev );
115
107
}
116
108
}
117
109
0 commit comments