aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/tdisp/HD44780/tdisp_lld.c35
-rw-r--r--drivers/tdisp/HD44780/tdisp_lld_board_example.h4
-rw-r--r--include/tdisp/tdisp.h16
-rw-r--r--src/tdisp/tdisp.c4
4 files changed, 42 insertions, 17 deletions
diff --git a/drivers/tdisp/HD44780/tdisp_lld.c b/drivers/tdisp/HD44780/tdisp_lld.c
index 0cbd414b..9644eaa8 100644
--- a/drivers/tdisp/HD44780/tdisp_lld.c
+++ b/drivers/tdisp/HD44780/tdisp_lld.c
@@ -41,42 +41,51 @@
#include "tdisp_lld_board_example.h"
-void TDISP_LLD(write_cmd)(uint8_t data) {
- setpin_rs(FALSE);
- setpin_rw(FALSE);
-
+static void _writeData(uint8_t data) {
write_bus(data);
-
+
setpin_e(TRUE);
chThdSleepMicroseconds(1);
setpin_e(FALSE);
chThdSleepMicroseconds(5);
}
+void TDISP_LLD(write_cmd)(uint8_t data) {
+ setpin_rs(FALSE);
+ setpin_rw(FALSE);
+
+ #if TDISP_NEED_4BIT_MODE
+ _writeData(data>>4);
+ #endif
+ _writeData(data);
+}
+
void TDISP_LLD(write_data)(uint8_t data) {
setpin_rs(TRUE);
setpin_rw(FALSE);
- write_bus(data);
-
- setpin_e(TRUE);
- chThdSleepMicroseconds(1);
- setpin_e(FALSE);
- chThdSleepMicroseconds(5);
+ #if TDISP_NEED_4BIT_MODE
+ _writeData(data>>4);
+ #endif
+ _writeData(data);
}
bool_t TDISP_LLD(init)(void) {
- /* initialise hardware */
+ /* initialise MCU hardware */
init_board();
- /* initialise controller */
+ /* wait some time */
chThdSleepMilliseconds(50);
+
TDISP_LLD(write_cmd)(0x38);
chThdSleepMilliseconds(64);
+
TDISP_LLD(write_cmd)(0x0f);
chThdSleepMicroseconds(50);
+
TDISP_LLD(write_cmd)(0x01);
chThdSleepMilliseconds(5);
+
TDISP_LLD(write_cmd)(0x06);
chThdSleepMicroseconds(50);
diff --git a/drivers/tdisp/HD44780/tdisp_lld_board_example.h b/drivers/tdisp/HD44780/tdisp_lld_board_example.h
index de9e0b0b..3f5c47d7 100644
--- a/drivers/tdisp/HD44780/tdisp_lld_board_example.h
+++ b/drivers/tdisp/HD44780/tdisp_lld_board_example.h
@@ -31,7 +31,7 @@
void init_board(void) {
palSetGroupMode(GPIOE, PAL_WHOLE_PORT, 0, PAL_MODE_OUTPUT_PUSHPULL);
- palSetGroupMode(GPIOD, PAL_WHOLE_PORT, 0, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetGroupMode(GPIOG, PAL_WHOLE_PORT, 0, PAL_MODE_OUTPUT_PUSHPULL);
}
void setpin_e(bool_t state) {
@@ -56,7 +56,7 @@ void setpin_rw(bool_t state) {
}
void write_bus(uint8_t data) {
- palWritePort(GPIOD, data);
+ palWritePort(GPIOG, data);
}
#endif /* _TDISP_LLD_BOARD_H */
diff --git a/include/tdisp/tdisp.h b/include/tdisp/tdisp.h
index 9d19e0cb..aa577f88 100644
--- a/include/tdisp/tdisp.h
+++ b/include/tdisp/tdisp.h
@@ -41,6 +41,22 @@
/* Include the low level driver information */
#include "tdisp/lld/tdisp_lld.h"
+#ifndef TDISP_NEED_4BIT_MODE
+ #define TDISP_NEED_4BIT_MODE FALSE
+#endif
+
+#ifndef TDISP_NEED_8BIT_MODE
+ #define TDISP_NEED_8BIT_MODE FALSE
+#endif
+
+#if (!TDISP_NEED_4BIT_MODE && !TDISP_NEED_8BIT_MODE)
+ #error "Either TDISP_NEED_4BIT_MODE or TDISP_NEED_8BIT_MODE needs to be set to TRUE in your gfxconf.h!"
+#endif
+
+#if (TDISP_NEED_4BIT_MODE && TDISP_NEED_8BIT_MODE)
+ #error "Only TDISP_NEED_4BIT_MODE or TDISP_NEED_8BIT_MODE can be set to TRUE, not both at one!"
+#endif
+
/**
* @brief TDISP driver initialisation
* @note This function is not implicitly invoked by @p halInit().
diff --git a/src/tdisp/tdisp.c b/src/tdisp/tdisp.c
index fe794140..a6e5e2f5 100644
--- a/src/tdisp/tdisp.c
+++ b/src/tdisp/tdisp.c
@@ -65,12 +65,12 @@ void tdispDrawString(char *s) {
}
void tdispDrawCharLocation(coord_t col, coord_t row, char c) {
- tdispGotoXY(x, y);
+ tdispGotoXY(col, row);
tdispDrawChar(c);
}
void tdispDrawStringLocation(coord_t col, coord_t row, char *s) {
- tdispGotoXY(x, y);
+ tdispGotoXY(col, row);
tdispDrawString(s);
}