SSD2119: backlight control

- Backlight uses PWM on TIM4 CH2.
- Updated readme.
- Updated gdisp_lld.c: moved from lld_gdisp_* to gdisp_lld_* functions
  names format.
- One forgotten GDISP_LLD() macro removal.
- General code cleanup (make diff with -w parameter ;))
ugfx_release_2.6
Mateusz Tomaszkiewicz 2013-02-21 22:46:47 +01:00
parent d9a92aa30c
commit cec4628a97
6 changed files with 1123 additions and 1096 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
# List the required driver. # List the required driver.
GFXSRC += $(GFXLIB)/drivers/gdisp/SSD2119/gdisp_lld.c GFXSRC += $(GFXLIB)/drivers/gdisp/SSD2119/gdisp_lld.c
# Required include directories # Required include directories
GFXINC += $(GFXLIB)/drivers/gdisp/SSD2119 GFXINC += $(GFXLIB)/drivers/gdisp/SSD2119

View File

@ -1,226 +1,227 @@
/* /*
ChibiOS/GFX - Copyright (C) 2012 ChibiOS/GFX - Copyright (C) 2012
Joel Bodenmann aka Tectu <joel@unormal.org> Joel Bodenmann aka Tectu <joel@unormal.org>
This file is part of ChibiOS/GFX. This file is part of ChibiOS/GFX.
ChibiOS/GFX is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
ChibiOS/GFX is distributed in the hope that it will be useful, ChibiOS/GFX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
/** /**
* @file drivers/gdisp/SSD2119/gdisp_lld_board_embest_dmstf4bb.h * @file drivers/gdisp/SSD2119/gdisp_lld_board_embest_dmstf4bb.h
* @brief GDISP Graphic Driver subsystem board GPIO interface for the SSD2119 display. * @brief GDISP Graphic Driver subsystem board GPIO interface for the SSD2119 display.
* *
* @addtogroup GDISP * @addtogroup GDISP
* @{ * @{
*/ */
#ifndef _GDISP_LLD_BOARD_H #ifndef _GDISP_LLD_BOARD_H
#define _GDISP_LLD_BOARD_H #define _GDISP_LLD_BOARD_H
#define SET_CS palSetPad(GPIOD, 7); #define SET_CS palSetPad(GPIOD, 7);
#define CLR_CS palClearPad(GPIOD, 7); #define CLR_CS palClearPad(GPIOD, 7);
#define SET_DC palSetPad(GPIOE, 3); #define SET_DC palSetPad(GPIOE, 3);
#define CLR_DC palClearPad(GPIOE, 3); #define CLR_DC palClearPad(GPIOE, 3);
#define SET_WR palSetPad(GPIOD, 5); #define SET_WR palSetPad(GPIOD, 5);
#define CLR_WR palClearPad(GPIOD, 5); #define CLR_WR palClearPad(GPIOD, 5);
#define SET_RD palSetPad(GPIOD, 4); #define SET_RD palSetPad(GPIOD, 4);
#define CLR_RD palClearPad(GPIOD, 4); #define CLR_RD palClearPad(GPIOD, 4);
#define SET_RST palSetPad(GPIOD, 3); #define SET_RST palSetPad(GPIOD, 3);
#define CLR_RST palClearPad(GPIOD, 3); #define CLR_RST palClearPad(GPIOD, 3);
/** /**
* @brief Initialise the board for the display. * @brief Initialise the board for the display.
* @notes This board definition uses GPIO and assumes exclusive access to these GPIO pins * @notes This board definition uses GPIO and assumes exclusive access to these GPIO pins
* *
* @notapi * @notapi
*/ */
static __inline void init_board(void) { static __inline void init_board(void) {
// D0 - D15 // D0 - D15
palSetPadMode(GPIOD, 14, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 14, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOD, 15, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 15, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOD, 1, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 1, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 7, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 7, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 8, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 8, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 9, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 9, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 10, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 10, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 11, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 11, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 12, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 12, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 13, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 13, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 14, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 14, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOE, 15, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 15, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOD, 8, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 8, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOD, 9, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 9, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOD, 10, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 10, PAL_MODE_OUTPUT_PUSHPULL);
// RST // RST
palSetPadMode(GPIOD, 3, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 3, PAL_MODE_OUTPUT_PUSHPULL);
// CS // CS
palSetPadMode(GPIOD, 7, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 7, PAL_MODE_OUTPUT_PUSHPULL);
// DC // DC
palSetPadMode(GPIOE, 3, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOE, 3, PAL_MODE_OUTPUT_PUSHPULL);
// RD // RD
palSetPadMode(GPIOD, 4, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 4, PAL_MODE_OUTPUT_PUSHPULL);
// WR // WR
palSetPadMode(GPIOD, 5, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOD, 5, PAL_MODE_OUTPUT_PUSHPULL);
/* Configure the pins to a well know state */ /* Configure the pins to a well know state */
SET_DC; SET_DC;
SET_RD; SET_RD;
SET_WR; SET_WR;
CLR_CS; CLR_CS;
//SET_RST; //SET_RST;
/* Display backlight always on */ /* Display backlight control */
palSetPadMode(GPIOD, 13, PAL_MODE_OUTPUT_PUSHPULL); /* TIM4 is an alternate function 2 (AF2) */
palSetPad(GPIOD, 13); pwmStart(&PWMD4, &pwmcfg);
} palSetPadMode(GPIOD, 13, PAL_MODE_ALTERNATE(2));
pwmEnableChannel(&PWMD4, 1, 100);
/** }
* @brief Set or clear the lcd reset pin.
* /**
* @param[in] state TRUE = lcd in reset, FALSE = normal operation * @brief Set or clear the lcd reset pin.
* *
* @notapi * @param[in] state TRUE = lcd in reset, FALSE = normal operation
*/ *
static __inline void setpin_reset(bool_t state) { * @notapi
if (state) { */
CLR_RST; static __inline void setpin_reset(bool_t state) {
} else { if (state) {
SET_RST; CLR_RST;
} } else {
} SET_RST;
}
/** }
* @brief Set the lcd back-light level.
* /**
* @param[in] percent 0 to 100% * @brief Set the lcd back-light level.
* *
* @notapi * @param[in] percent 0 to 100%
*/ *
static __inline void set_backlight(uint8_t percent) { * @notapi
(void) percent; */
/* Nothing to do here - Backlight always on */ static __inline void set_backlight(uint8_t percent) {
} pwmEnableChannel(&PWMD4, 1, percent);
}
/**
* @brief Take exclusive control of the bus /**
* * @brief Take exclusive control of the bus
* @notapi *
*/ * @notapi
static __inline void acquire_bus(void) { */
/* Nothing to do here since LCD is the only device on that bus */ static __inline void acquire_bus(void) {
} /* Nothing to do here since LCD is the only device on that bus */
}
/**
* @brief Release exclusive control of the bus /**
* * @brief Release exclusive control of the bus
* @notapi *
*/ * @notapi
static __inline void release_bus(void) { */
/* Nothing to do here since LCD is the only device on that bus */ static __inline void release_bus(void) {
} /* Nothing to do here since LCD is the only device on that bus */
}
/**
* @brief Send data to the index register. /**
* * @brief Send data to the index register.
* @param[in] index The index register to set *
* * @param[in] index The index register to set
* @notapi *
*/ * @notapi
static __inline void write_index(uint16_t index) { */
// D0 - D15 static __inline void write_index(uint16_t index) {
palWritePad(GPIOD, 14, index & 1); // D0 - D15
palWritePad(GPIOD, 15, (index >> 1) & 1); palWritePad(GPIOD, 14, index & 1);
palWritePad(GPIOD, 0, (index >> 2) & 1); palWritePad(GPIOD, 15, (index >> 1) & 1);
palWritePad(GPIOD, 1, (index >> 3) & 1); palWritePad(GPIOD, 0, (index >> 2) & 1);
palWritePad(GPIOE, 7, (index >> 4) & 1); palWritePad(GPIOD, 1, (index >> 3) & 1);
palWritePad(GPIOE, 8, (index >> 5) & 1); palWritePad(GPIOE, 7, (index >> 4) & 1);
palWritePad(GPIOE, 9, (index >> 6) & 1); palWritePad(GPIOE, 8, (index >> 5) & 1);
palWritePad(GPIOE, 10, (index >> 7) & 1); palWritePad(GPIOE, 9, (index >> 6) & 1);
palWritePad(GPIOE, 11, (index >> 8) & 1); palWritePad(GPIOE, 10, (index >> 7) & 1);
palWritePad(GPIOE, 12, (index >> 9) & 1); palWritePad(GPIOE, 11, (index >> 8) & 1);
palWritePad(GPIOE, 13, (index >> 10) & 1); palWritePad(GPIOE, 12, (index >> 9) & 1);
palWritePad(GPIOE, 14, (index >> 11) & 1); palWritePad(GPIOE, 13, (index >> 10) & 1);
palWritePad(GPIOE, 15, (index >> 12) & 1); palWritePad(GPIOE, 14, (index >> 11) & 1);
palWritePad(GPIOD, 8, (index >> 13) & 1); palWritePad(GPIOE, 15, (index >> 12) & 1);
palWritePad(GPIOD, 9, (index >> 14) & 1); palWritePad(GPIOD, 8, (index >> 13) & 1);
palWritePad(GPIOD, 10, (index >> 15) & 1); palWritePad(GPIOD, 9, (index >> 14) & 1);
palWritePad(GPIOD, 10, (index >> 15) & 1);
/* Control lines */
CLR_DC; CLR_WR; SET_WR; SET_DC; /* Control lines */
} CLR_DC; CLR_WR; SET_WR; SET_DC;
}
/**
* @brief Send data to the lcd. /**
* * @brief Send data to the lcd.
* @param[in] data The data to send *
* * @param[in] data The data to send
* @notapi *
*/ * @notapi
static __inline void write_data(uint16_t data) { */
// D0 - D15 static __inline void write_data(uint16_t data) {
palWritePad(GPIOD, 14, data & 1); // D0 - D15
palWritePad(GPIOD, 15, (data >> 1) & 1); palWritePad(GPIOD, 14, data & 1);
palWritePad(GPIOD, 0, (data >> 2) & 1); palWritePad(GPIOD, 15, (data >> 1) & 1);
palWritePad(GPIOD, 1, (data >> 3) & 1); palWritePad(GPIOD, 0, (data >> 2) & 1);
palWritePad(GPIOE, 7, (data >> 4) & 1); palWritePad(GPIOD, 1, (data >> 3) & 1);
palWritePad(GPIOE, 8, (data >> 5) & 1); palWritePad(GPIOE, 7, (data >> 4) & 1);
palWritePad(GPIOE, 9, (data >> 6) & 1); palWritePad(GPIOE, 8, (data >> 5) & 1);
palWritePad(GPIOE, 10, (data >> 7) & 1); palWritePad(GPIOE, 9, (data >> 6) & 1);
palWritePad(GPIOE, 11, (data >> 8) & 1); palWritePad(GPIOE, 10, (data >> 7) & 1);
palWritePad(GPIOE, 12, (data >> 9) & 1); palWritePad(GPIOE, 11, (data >> 8) & 1);
palWritePad(GPIOE, 13, (data >> 10) & 1); palWritePad(GPIOE, 12, (data >> 9) & 1);
palWritePad(GPIOE, 14, (data >> 11) & 1); palWritePad(GPIOE, 13, (data >> 10) & 1);
palWritePad(GPIOE, 15, (data >> 12) & 1); palWritePad(GPIOE, 14, (data >> 11) & 1);
palWritePad(GPIOD, 8, (data >> 13) & 1); palWritePad(GPIOE, 15, (data >> 12) & 1);
palWritePad(GPIOD, 9, (data >> 14) & 1); palWritePad(GPIOD, 8, (data >> 13) & 1);
palWritePad(GPIOD, 10, (data >> 15) & 1); palWritePad(GPIOD, 9, (data >> 14) & 1);
palWritePad(GPIOD, 10, (data >> 15) & 1);
/* Control lines */
CLR_WR; SET_WR; /* Control lines */
} CLR_WR; SET_WR;
}
#if GDISP_HARDWARE_READPIXEL || GDISP_HARDWARE_SCROLL || defined(__DOXYGEN__)
/** #if GDISP_HARDWARE_READPIXEL || GDISP_HARDWARE_SCROLL || defined(__DOXYGEN__)
* @brief Read data from the lcd. /**
* * @brief Read data from the lcd.
* @return The data from the lcd *
* @note The chip select may need to be asserted/de-asserted * @return The data from the lcd
* around the actual spi read * @note The chip select may need to be asserted/de-asserted
* * around the actual spi read
* @notapi *
*/ * @notapi
static __inline uint16_t read_data(void) { */
uint16_t value; static __inline uint16_t read_data(void) {
/* uint16_t value;
// change pin mode to digital input /*
palSetGroupMode(GPIOE, PAL_WHOLE_PORT, 0, PAL_MODE_INPUT); // change pin mode to digital input
palSetGroupMode(GPIOE, PAL_WHOLE_PORT, 0, PAL_MODE_INPUT);
CLR_RD;
value = palReadPort(GPIOE); CLR_RD;
value = palReadPort(GPIOE); value = palReadPort(GPIOE);
SET_RD; value = palReadPort(GPIOE);
SET_RD;
// change pin mode back to digital output
palSetGroupMode(GPIOE, PAL_WHOLE_PORT, 0, PAL_MODE_OUTPUT_PUSHPULL); // change pin mode back to digital output
*/ palSetGroupMode(GPIOE, PAL_WHOLE_PORT, 0, PAL_MODE_OUTPUT_PUSHPULL);
return value; */
} return value;
#endif }
#endif
#endif /* _GDISP_LLD_BOARD_H */
/** @} */ #endif /* _GDISP_LLD_BOARD_H */
/** @} */

View File

@ -1,166 +1,179 @@
/* /*
ChibiOS/GFX - Copyright (C) 2012 ChibiOS/GFX - Copyright (C) 2012
Joel Bodenmann aka Tectu <joel@unormal.org> Joel Bodenmann aka Tectu <joel@unormal.org>
This file is part of ChibiOS/GFX. This file is part of ChibiOS/GFX.
ChibiOS/GFX is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
ChibiOS/GFX is distributed in the hope that it will be useful, ChibiOS/GFX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
/** /**
* @file drivers/gdisp/SSD2119/gdisp_lld_board_embest_dmstf4bb.h * @file drivers/gdisp/SSD2119/gdisp_lld_board_embest_dmstf4bb.h
* @brief GDISP Graphic Driver subsystem board FSMC interface for the SSD2119 display. * @brief GDISP Graphic Driver subsystem board FSMC interface for the SSD2119 display.
* *
* @addtogroup GDISP * @addtogroup GDISP
* @{ * @{
*/ */
#ifndef _GDISP_LLD_BOARD_H #ifndef _GDISP_LLD_BOARD_H
#define _GDISP_LLD_BOARD_H #define _GDISP_LLD_BOARD_H
/* Using FSMC A19 (PE3) as DC */ /* Using FSMC A19 (PE3) as DC */
#define GDISP_REG (*((volatile uint16_t *) 0x60000000)) /* DC = 0 */ #define GDISP_REG (*((volatile uint16_t *) 0x60000000)) /* DC = 0 */
#define GDISP_RAM (*((volatile uint16_t *) 0x60100000)) /* DC = 1 */ #define GDISP_RAM (*((volatile uint16_t *) 0x60100000)) /* DC = 1 */
#define SET_RST palSetPad(GPIOD, 3); #define SET_RST palSetPad(GPIOD, 3);
#define CLR_RST palClearPad(GPIOD, 3); #define CLR_RST palClearPad(GPIOD, 3);
/** /* PWM configuration structure. We use timer 4 channel 2 (orange LED on board). */
* @brief Initialise the board for the display. static const PWMConfig pwmcfg = {
* @notes This board definition uses GPIO and assumes exclusive access to these GPIO pins 100000, /* 100kHz PWM clock frequency. */
* 100, /* PWM period is 128 cycles. */
* @notapi NULL,
*/ {
static __inline void init_board(void) { {PWM_OUTPUT_ACTIVE_HIGH, NULL},
unsigned char FSMC_Bank; {PWM_OUTPUT_ACTIVE_HIGH, NULL},
{PWM_OUTPUT_ACTIVE_HIGH, NULL},
/* STM32F4 FSMC init */ {PWM_OUTPUT_ACTIVE_HIGH, NULL}
rccEnableAHB3(RCC_AHB3ENR_FSMCEN, 0); },
/* HW dependent part.*/
/* Group pins */ 0
IOBus busD = {GPIOD, (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5) | (1 << 7) | (1 << 8) | };
(1 << 9) | (1 << 10) | (1 << 14) | (1 << 15), 0};
/**
IOBus busE = {GPIOE, (1 << 3) | (1 << 7) | (1 << 8) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | * @brief Initialise the board for the display.
(1 << 13) | (1 << 14) | (1 << 15), 0}; * @notes This board definition uses GPIO and assumes exclusive access to these GPIO pins
*
/* FSMC is an alternate function 12 (AF12) */ * @notapi
palSetBusMode(&busD, PAL_MODE_ALTERNATE(12)); */
palSetBusMode(&busE, PAL_MODE_ALTERNATE(12)); static __inline void init_board(void) {
unsigned char FSMC_Bank;
FSMC_Bank = 0;
/* STM32F4 FSMC init */
/* FSMC timing */ rccEnableAHB3(RCC_AHB3ENR_FSMCEN, 0);
FSMC_Bank1->BTCR[FSMC_Bank+1] = (FSMC_BTR1_ADDSET_1 | FSMC_BTR1_ADDSET_3) \
| (FSMC_BTR1_DATAST_1 | FSMC_BTR1_DATAST_3) \ /* Group pins */
| (FSMC_BTR1_BUSTURN_1 | FSMC_BTR1_BUSTURN_3) ; IOBus busD = {GPIOD, (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5) | (1 << 7) | (1 << 8) |
(1 << 9) | (1 << 10) | (1 << 14) | (1 << 15), 0};
/* Bank1 NOR/SRAM control register configuration
* This is actually not needed as already set by default after reset */ IOBus busE = {GPIOE, (1 << 3) | (1 << 7) | (1 << 8) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) |
FSMC_Bank1->BTCR[FSMC_Bank] = FSMC_BCR1_MWID_0 | FSMC_BCR1_WREN | FSMC_BCR1_MBKEN; (1 << 13) | (1 << 14) | (1 << 15), 0};
/* Display backlight always on */ /* FSMC is an alternate function 12 (AF12) */
palSetPadMode(GPIOD, 13, PAL_MODE_OUTPUT_PUSHPULL); palSetBusMode(&busD, PAL_MODE_ALTERNATE(12));
palSetPad(GPIOD, 13); palSetBusMode(&busE, PAL_MODE_ALTERNATE(12));
/* TIM4 is an alternate function 2 (AF2) */ FSMC_Bank = 0;
//palSetPadMode(GPIOD, 13, PAL_MODE_ALTERNATE(2));
} /* FSMC timing */
FSMC_Bank1->BTCR[FSMC_Bank+1] = (FSMC_BTR1_ADDSET_1 | FSMC_BTR1_ADDSET_3) \
/** | (FSMC_BTR1_DATAST_1 | FSMC_BTR1_DATAST_3) \
* @brief Set or clear the lcd reset pin. | (FSMC_BTR1_BUSTURN_1 | FSMC_BTR1_BUSTURN_3) ;
*
* @param[in] state TRUE = lcd in reset, FALSE = normal operation /* Bank1 NOR/SRAM control register configuration
* * This is actually not needed as already set by default after reset */
* @notapi FSMC_Bank1->BTCR[FSMC_Bank] = FSMC_BCR1_MWID_0 | FSMC_BCR1_WREN | FSMC_BCR1_MBKEN;
*/
static __inline void setpin_reset(bool_t state) { /* Display backlight control */
if (state) { /* TIM4 is an alternate function 2 (AF2) */
CLR_RST; pwmStart(&PWMD4, &pwmcfg);
} else { palSetPadMode(GPIOD, 13, PAL_MODE_ALTERNATE(2));
SET_RST; pwmEnableChannel(&PWMD4, 1, 100);
} }
}
/**
/** * @brief Set or clear the lcd reset pin.
* @brief Set the lcd back-light level. *
* * @param[in] state TRUE = lcd in reset, FALSE = normal operation
* @param[in] percent 0 to 100% *
* * @notapi
* @notapi */
*/ static __inline void setpin_reset(bool_t state) {
static __inline void set_backlight(uint8_t percent) { if (state) {
(void) percent; CLR_RST;
/* Nothing to do here - Backlight always on */ } else {
} SET_RST;
}
/** }
* @brief Take exclusive control of the bus
* @note Not needed, not implemented /**
* * @brief Set the lcd back-light level.
* @notapi *
*/ * @param[in] percent 0 to 100%
static __inline void acquire_bus(void) { *
/* Nothing to do here since LCD is the only device on that bus */ * @notapi
} */
static __inline void set_backlight(uint8_t percent) {
/** pwmEnableChannel(&PWMD4, 1, percent);
* @brief Release exclusive control of the bus }
* @note Not needed, not implemented
* /**
* @notapi * @brief Take exclusive control of the bus
*/ * @note Not needed, not implemented
static __inline void release_bus(void) { *
/* Nothing to do here since LCD is the only device on that bus */ * @notapi
} */
static __inline void acquire_bus(void) {
/** /* Nothing to do here since LCD is the only device on that bus */
* @brief Send data to the index register. }
*
* @param[in] index The index register to set /**
* * @brief Release exclusive control of the bus
* @notapi * @note Not needed, not implemented
*/ *
static __inline void write_index(uint16_t index) { * @notapi
GDISP_REG = index; */
} static __inline void release_bus(void) {
/* Nothing to do here since LCD is the only device on that bus */
/** }
* @brief Send data to the lcd.
* /**
* @param[in] data The data to send * @brief Send data to the index register.
* *
* @notapi * @param[in] index The index register to set
*/ *
static __inline void write_data(uint16_t data) { * @notapi
GDISP_RAM = data; */
} static __inline void write_index(uint16_t index) {
GDISP_REG = index;
#if GDISP_HARDWARE_READPIXEL || GDISP_HARDWARE_SCROLL || defined(__DOXYGEN__) }
/**
* @brief Read data from the lcd. /**
* * @brief Send data to the lcd.
* @return The data from the lcd *
* @note The chip select may need to be asserted/de-asserted * @param[in] data The data to send
* around the actual spi read *
* * @notapi
* @notapi */
*/ static __inline void write_data(uint16_t data) {
static __inline uint16_t read_data(void) { GDISP_RAM = data;
return GDISP_RAM; }
}
#endif #if GDISP_HARDWARE_READPIXEL || GDISP_HARDWARE_SCROLL || defined(__DOXYGEN__)
/**
#endif /* _GDISP_LLD_BOARD_H */ * @brief Read data from the lcd.
/** @} */ *
* @return The data from the lcd
* @note The chip select may need to be asserted/de-asserted
* around the actual spi read
*
* @notapi
*/
static __inline uint16_t read_data(void) {
return GDISP_RAM;
}
#endif
#endif /* _GDISP_LLD_BOARD_H */
/** @} */

View File

@ -1,52 +1,52 @@
/* /*
ChibiOS/GFX - Copyright (C) 2012 ChibiOS/GFX - Copyright (C) 2012
Joel Bodenmann aka Tectu <joel@unormal.org> Joel Bodenmann aka Tectu <joel@unormal.org>
This file is part of ChibiOS/GFX. This file is part of ChibiOS/GFX.
ChibiOS/GFX is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
ChibiOS/GFX is distributed in the hope that it will be useful, ChibiOS/GFX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
/** /**
* @file drivers/gdisp/SSD2119/gdisp_lld_config.h * @file drivers/gdisp/SSD2119/gdisp_lld_config.h
* @brief GDISP Graphic Driver subsystem low level driver header for the SSD2119 display. * @brief GDISP Graphic Driver subsystem low level driver header for the SSD2119 display.
* *
* @addtogroup GDISP * @addtogroup GDISP
* @{ * @{
*/ */
#ifndef _GDISP_LLD_CONFIG_H #ifndef _GDISP_LLD_CONFIG_H
#define _GDISP_LLD_CONFIG_H #define _GDISP_LLD_CONFIG_H
#if GFX_USE_GDISP #if GFX_USE_GDISP
/*===========================================================================*/ /*===========================================================================*/
/* Driver hardware support. */ /* Driver hardware support. */
/*===========================================================================*/ /*===========================================================================*/
#define GDISP_DRIVER_NAME "SSD2119" #define GDISP_DRIVER_NAME "SSD2119"
#define GDISP_HARDWARE_CLEARS TRUE #define GDISP_HARDWARE_CLEARS TRUE
#define GDISP_HARDWARE_FILLS TRUE #define GDISP_HARDWARE_FILLS TRUE
#define GDISP_HARDWARE_BITFILLS TRUE #define GDISP_HARDWARE_BITFILLS TRUE
#define GDISP_HARDWARE_SCROLL TRUE #define GDISP_HARDWARE_SCROLL TRUE
#define GDISP_HARDWARE_PIXELREAD TRUE #define GDISP_HARDWARE_PIXELREAD TRUE
#define GDISP_HARDWARE_CONTROL TRUE #define GDISP_HARDWARE_CONTROL TRUE
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB565 #define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB565
#endif /* GFX_USE_GDISP */ #endif /* GFX_USE_GDISP */
#endif /* _GDISP_LLD_CONFIG_H */ #endif /* _GDISP_LLD_CONFIG_H */
/** @} */ /** @} */

View File

@ -1,20 +1,25 @@
To use this driver: Description:
1. Add in your halconf.h: Driver for LCD with 16-bit interface in 8080 mode (65k colors).
a) #define GFX_USE_GDISP TRUE
To use this driver:
b) Any optional high level driver defines (see gdisp.h) eg: GDISP_NEED_MULTITHREAD
1. Add in your halconf.h:
c) If you are not using a known board then create a gdisp_lld_board.h file a) #define GFX_USE_GDISP TRUE
and ensure it is on your include path.
Use the gdisp_lld_board_embest_dmstf4bb_fsmc.h or gdisp_lld_board_embest_dmstf4bb_fsmc.h file as a basis. b) Any optional high level driver defines (see gdisp.h) eg: GDISP_NEED_MULTITHREAD
Currently known boards are:
BOARD_EMBEST_DMSTF4BB - GPIO interface c) If you are not using a known board then create a gdisp_lld_board.h file
BOARD_EMBEST_DMSTF4BB_FSMC - FSMC interface and ensure it is on your include path.
Use the gdisp_lld_board_embest_dmstf4bb_fsmc.h or gdisp_lld_board_embest_dmstf4bb_fsmc.h file as a basis.
d) The following are optional - define them if you are not using the defaults below: Currently known boards are:
#define GDISP_SCREEN_WIDTH 320 BOARD_EMBEST_DMSTF4BB - GPIO interface
#define GDISP_SCREEN_HEIGHT 240 BOARD_EMBEST_DMSTF4BB_FSMC - FSMC interface
Both board configurations assume you have STM32_PWM_USE_TIM4 set to TRUE in your mcuconf.h.
2. To your makefile add the following lines:
include $(GFXLIB)/drivers/gdisp/SSD2119/gdisp_lld.mk d) The following are optional - define them if you are not using the defaults below:
#define GDISP_SCREEN_WIDTH 320
#define GDISP_SCREEN_HEIGHT 240
2. To your makefile add the following lines:
include $(GFXLIB)/drivers/gdisp/SSD2119/gdisp_lld.mk