aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tdisp/HD44780/tdisp_lld.c
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@unormal.org>2013-01-10 14:51:31 +0100
committerJoel Bodenmann <joel@unormal.org>2013-01-10 14:51:31 +0100
commitd5e7afe756fe4c19dd9360baed23599b268709af (patch)
tree5f9532e6da0274c65b799b85e9f2ba2378f09fde /drivers/tdisp/HD44780/tdisp_lld.c
parent6cc67bad84176614936f2c6439d640637186764d (diff)
downloaduGFX-d5e7afe756fe4c19dd9360baed23599b268709af.tar.gz
uGFX-d5e7afe756fe4c19dd9360baed23599b268709af.tar.bz2
uGFX-d5e7afe756fe4c19dd9360baed23599b268709af.zip
4-bit mode implemented
Diffstat (limited to 'drivers/tdisp/HD44780/tdisp_lld.c')
-rw-r--r--drivers/tdisp/HD44780/tdisp_lld.c35
1 files changed, 22 insertions, 13 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);