10 changed files with 389 additions and 0 deletions
@ -0,0 +1,87 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file drivers/tdisp/HD44780/tdisp_lld.c |
|||
* @brief TDISP driver subsystem low level driver source for the HD44780 display |
|||
* |
|||
* @addtogroup TDISP |
|||
* @{ |
|||
*/ |
|||
|
|||
#include "ch.h" |
|||
#include "hal.h" |
|||
#include "gfx.h" |
|||
|
|||
#if GFX_USE_TDISP /*|| defined(__DOXYGEN__)*/ |
|||
|
|||
#ifndef TDISP_ROWS |
|||
#define TDISP_ROWS 16 |
|||
#endif |
|||
#ifndef TDISP_COLUMNS |
|||
#define TDISP_COLUMNS 2 |
|||
#endif |
|||
|
|||
#include "tdisp_lld_board_example.h" |
|||
|
|||
void TDISP_LLD(write_cmd)(uint8_t data) { |
|||
setpin_rs(FALSE); |
|||
setpin_rw(FALSE); |
|||
|
|||
write_bus(data); |
|||
|
|||
setpin_e(TRUE); |
|||
chThdSleepMicroseconds(1); |
|||
setpin_e(FALSE); |
|||
chThdSleepMicroseconds(5); |
|||
} |
|||
|
|||
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); |
|||
} |
|||
|
|||
bool_t TDISP_LLD(init)(void) { |
|||
/* initialise hardware */ |
|||
init_board(); |
|||
|
|||
/* initialise controller */ |
|||
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); |
|||
|
|||
return TRUE; |
|||
} |
|||
|
|||
#endif /* GFX_USE_TDISP */ |
|||
|
@ -0,0 +1,6 @@ |
|||
# List the required driver.
|
|||
GFXSRC += $(GFXLIB)/drivers/tdisp/HD44780/tdisp_lld.c |
|||
|
|||
# Required include directories
|
|||
GFXINC += $(GFXLIB)/drivers/tdisp/HD44780 |
|||
|
@ -0,0 +1,63 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file drivers/tdisp/HD44780/tdisp_lld_board_example.h |
|||
* @brief TDISP driver subsystem board interface for the HD44780 display |
|||
* |
|||
* @addtogroup TDISP |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _TDISP_LLD_BOARD_H |
|||
#define _TDISP_LLD_BOARD_H |
|||
|
|||
void init_board(void) { |
|||
palSetGroupMode(GPIOE, PAL_WHOLE_PORT, 0, PAL_MODE_OUTPUT_PUSHPULL); |
|||
palSetGroupMode(GPIOD, PAL_WHOLE_PORT, 0, PAL_MODE_OUTPUT_PUSHPULL); |
|||
} |
|||
|
|||
void setpin_e(bool_t state) { |
|||
if(state) |
|||
palSetPad(GPIOE, 2); |
|||
else |
|||
palClearPad(GPIOE, 2); |
|||
} |
|||
|
|||
void setpin_rs(bool_t state) { |
|||
if(state) |
|||
palSetPad(GPIOE, 0); |
|||
else |
|||
palClearPad(GPIOE, 0); |
|||
} |
|||
|
|||
void setpin_rw(bool_t state) { |
|||
if(state) |
|||
palSetPad(GPIOE, 1); |
|||
else |
|||
palClearPad(GPIOE, 1); |
|||
} |
|||
|
|||
void write_bus(uint8_t data) { |
|||
palWritePort(GPIOD, data); |
|||
} |
|||
|
|||
#endif /* _TDISP_LLD_BOARD_H */ |
|||
|
@ -0,0 +1,44 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file drivers/tdisp/HD44780/tdisp_lld_config.h |
|||
* @brief TDISP Driver subsystem low level driver header for the HD44780 display. |
|||
* |
|||
* @addtogroup TDISP |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _TDISP_LLD_CONFIG_H |
|||
#define _TDISP_LLD_CONFIG_H |
|||
|
|||
#if GFX_USE_TDISP |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver hardware support. */ |
|||
/*===========================================================================*/ |
|||
|
|||
#define TDISP_DRIVER_NAME "HD44780" |
|||
#define TDISP_LLD(x) tdisp_lld_##x##_HD44780 |
|||
|
|||
#endif /* GFX_USE_TDISP */ |
|||
|
|||
#endif /* _TDISP_LLD_CONFIG_H */ |
|||
/** @} */ |
@ -0,0 +1,51 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file include/tdisp/lld/tdisp_lld.h |
|||
* @brief TDISP driver subsystem low level driver header. |
|||
* |
|||
* @addtogroup TDISP |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _TDISP_LLD_H |
|||
#define _TDISP_LLD_H |
|||
|
|||
#if GFX_USE_TDISP || defined(__DOXYGEN__) |
|||
|
|||
#include "tdisp_lld_config.h" |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
extern bool_t foo(void); |
|||
extern void write_cmd(uint8_t data); |
|||
extern void write_data(uint8_t data); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* GFX_USE_TDISP */ |
|||
|
|||
#endif /* _TDISP_LLD_H */ |
|||
|
@ -0,0 +1,56 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file include/tdisp/tdisp.h |
|||
* @brief TDISP Graphic Driver subsystem header file. |
|||
* |
|||
* @addtogroup TDISP |
|||
* |
|||
* @details The TDISP module provides high level abstraction to interface pixel oriented graphic displays. |
|||
* |
|||
* @pre GFX_USE_TDISP must be set to TRUE in gfxconf.h |
|||
* |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _TDISP_H |
|||
#define _TDISP_H |
|||
|
|||
#include "gfx.h" |
|||
|
|||
#if GFX_USE_TDISP || defined(__DOXYGEN__) |
|||
|
|||
/* Include the low level driver information */ |
|||
#include "tdisp/lld/tdisp_lld.h" |
|||
|
|||
bool_t tdispInit(void); |
|||
void tdispClear(void); |
|||
void tdispHome(void); |
|||
void tdispGotoXY(coord_t col, coord_t row); |
|||
void tdispDrawChar(char c); |
|||
void tdispDrawString(char *s); |
|||
void tdispDrawCharLocation(coord_t x, coord_t y, char c); |
|||
void tdispDrawStringLocation(coord_t x, coord_t y, char *s); |
|||
|
|||
#endif /* GFX_USE_TDISP */ |
|||
|
|||
#endif /* _TDISP_H */ |
|||
|
@ -0,0 +1,78 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file src/tdisp/tdisp.c |
|||
* @brief TDISP Driver code. |
|||
* |
|||
* @addtogroup TDISP |
|||
* @{ |
|||
*/ |
|||
#include "ch.h" |
|||
#include "hal.h" |
|||
#include "gfx.h" |
|||
|
|||
#if GFX_USE_TDISP || defined(__DOXYGEN__) |
|||
|
|||
bool_t tdispInit(void) { |
|||
bool_t ret; |
|||
|
|||
ret = TDISP_LLD(init)(); |
|||
|
|||
return ret; |
|||
} |
|||
|
|||
void tdispClear(void) { |
|||
TDISP_LLD(write_cmd)(0x01); |
|||
} |
|||
|
|||
void tdispHome(void) { |
|||
TDISP_LLD(write_cmd)(0x02); |
|||
} |
|||
|
|||
void tdispGotoXY(coord_t col, coord_t row) { |
|||
uint8_t row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; |
|||
|
|||
TDISP_LLD(write_cmd)(0x80 | (col + row_offsets[row])); |
|||
} |
|||
|
|||
void tdispDrawChar(char c) { |
|||
TDISP_LLD(write_data)(c); |
|||
} |
|||
|
|||
void tdispDrawString(char *s) { |
|||
char c; |
|||
|
|||
while(c = s++) |
|||
tdispDrawChar(c); |
|||
} |
|||
|
|||
void tdispDrawCharLocation(coord_t x, coord_t y, char c) { |
|||
tdispGotoXY(x, y); |
|||
tdispDrawChar(c); |
|||
} |
|||
|
|||
void tdispDrawStringLocation(coord_t x, coord_t y, char *s) { |
|||
tdispGotoXY(x, y); |
|||
tdispDrawString(s); |
|||
} |
|||
|
|||
#endif /* GFX_USE_TDISP */ |
|||
|
@ -0,0 +1,2 @@ |
|||
GFXSRC += $(GFXLIB)/src/tdisp/tdisp.c |
|||
|
Loading…
Reference in new issue