aboutsummaryrefslogtreecommitdiffstats
path: root/boards/addons
diff options
context:
space:
mode:
authorJoel Bodenmann <joel@unormal.org>2014-08-21 18:34:59 +0200
committerJoel Bodenmann <joel@unormal.org>2014-08-21 18:34:59 +0200
commit0fa640f1edf98970e7c2e5ca9f574160223143c5 (patch)
tree50afce8dcb9a8e92ee3d6e7487f38d359fa93f49 /boards/addons
parent7c791f2a9204f892e141d03163c9bcb36b335b41 (diff)
parent117e195354853ce2b53afef4ebb5860bf44fdde2 (diff)
downloaduGFX-0fa640f1edf98970e7c2e5ca9f574160223143c5.tar.gz
uGFX-0fa640f1edf98970e7c2e5ca9f574160223143c5.tar.bz2
uGFX-0fa640f1edf98970e7c2e5ca9f574160223143c5.zip
Merge branch 'master' of bitbucket.org:Tectu/ugfx
Diffstat (limited to 'boards/addons')
-rw-r--r--boards/addons/gdisp/board_SPFD54124B_stm32f3.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/boards/addons/gdisp/board_SPFD54124B_stm32f3.h b/boards/addons/gdisp/board_SPFD54124B_stm32f3.h
new file mode 100644
index 00000000..765af495
--- /dev/null
+++ b/boards/addons/gdisp/board_SPFD54124B_stm32f3.h
@@ -0,0 +1,203 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ * http://ugfx.org/license.html
+ *
+ * Mail: fede.677387@hotmail.it
+ *
+ * Board: STM32F3-Discovery
+ */
+
+/**
+ * @file boards/addons/gdisp/board_SPFD54124B_stm32f3.h
+ * @brief GDISP Graphic Driver subsystem board interface for the SPFD54124B display.
+ */
+
+#ifndef _GDISP_LLD_BOARD_H
+#define _GDISP_LLD_BOARD_H
+
+#define SPFD54124B_SPID SPID2
+
+#define SPFD54124B_SPI_PORT GPIOB
+#define SPFD54124B_SPI_NSS 12
+#define SPFD54124B_SPI_SCK 13
+#define SPFD54124B_SPI_MISO 14 // not used
+#define SPFD54124B_SPI_MOSI 15
+
+#define SPFD54124B_PIN_PORT GPIOA
+#define SPFD54124B_PIN_RST 5
+
+#define SET_RST palSetPad(SPFD54124B_PIN_PORT, SPFD54124B_PIN_RST);
+#define CLR_RST palClearPad(SPFD54124B_PIN_PORT, SPFD54124B_PIN_RST);
+
+#define USE_SOFT_SPI TRUE
+#define USE_HARD_SPI !(USE_SOFT_SPI)
+
+#if USE_HARD_SPI
+
+#if GFX_USE_OS_CHIBIOS
+static int32_t thdPriority = 0;
+#endif
+
+/*
+ * Maximum speed SPI configuration in 9 bit mode
+ */
+static const SPIConfig hs_spicfg = {
+ NULL, /* Operation complete callback or @p NULL. */
+ SPFD54124B_SPI_PORT, /* The chip select line port */
+ SPFD54124B_SPI_NSS, /* The chip select line pad number */
+ 0, /* SPI CR1 register initialization data*/
+ SPI_CR2_DS_3 /* SPI CR2 register initialization data 9-bit */
+};
+#endif
+
+#if USE_SOFT_SPI
+static inline void soft_spi_sck(void){
+ palSetPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_SCK);
+ palClearPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_SCK);
+}
+
+static inline void soft_spi_write_9bit(uint16_t data){
+
+ uint8_t i;
+
+ // activate lcd by low on CS pin
+ palClearPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_NSS);
+
+ for (i=0; i<9; i++){
+ // setting data
+ if(data & (SPFD54124B_SEND_DATA >> i)) {
+ palSetPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MOSI);
+ }
+ else palClearPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MOSI);
+ // clock data
+ soft_spi_sck();
+ }
+
+ //deactivate lcd by high on CS pin
+ palSetPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_NSS);
+
+}
+#endif
+
+static inline void setpin_reset(GDisplay *g, bool_t state) {
+ (void) g;
+ if(state) {
+ CLR_RST;
+ } else {
+ SET_RST;
+ }
+}
+
+static inline void init_board(GDisplay *g) {
+ // As we are not using multiple displays we set g->board to NULL as we don't use it.
+ g->board = 0;
+
+ switch(g->controllerdisplay) {
+ case 0: // Set up for Display 0
+ /*
+ * SPI1 I/O pins setup.
+ */
+ palSetPadMode(SPFD54124B_PIN_PORT, SPFD54124B_PIN_RST, PAL_MODE_OUTPUT_PUSHPULL); /* RESET */
+ setpin_reset(g, TRUE);
+
+#if USE_HARD_SPI
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_SCK, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* SCK. */
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MISO, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* MISO.*/
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MOSI, PAL_MODE_ALTERNATE(5) | PAL_STM32_OSPEED_HIGHEST); /* MOSI.*/
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_NSS, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); /* NSS */
+ palSetPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_NSS);
+ palClearPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_SCK);
+ palClearPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MOSI);
+ spiInit();
+#endif
+
+#if USE_SOFT_SPI
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_SCK, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); /* SCK. */
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MISO, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); /* MISO.*/
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MOSI, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); /* MOSI.*/
+ palSetPadMode(SPFD54124B_SPI_PORT, SPFD54124B_SPI_NSS, PAL_MODE_OUTPUT_PUSHPULL | PAL_STM32_OSPEED_HIGHEST); /* NSS */
+ palSetPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_NSS);
+ palClearPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_SCK);
+ palClearPad(SPFD54124B_SPI_PORT, SPFD54124B_SPI_MOSI);
+#endif
+
+ break;
+ }
+}
+
+static inline void acquire_bus(GDisplay *g) {
+ (void) g;
+#if USE_HARD_SPI
+#if GFX_USE_OS_CHIBIOS
+ thdPriority = (int32_t)chThdGetPriority();
+ chThdSetPriority(HIGHPRIO);
+#endif
+ spiAcquireBus(&SPFD54124B_SPID);
+#endif
+}
+
+static inline void release_bus(GDisplay *g) {
+ (void) g;
+#if USE_HARD_SPI
+#if GFX_USE_OS_CHIBIOS
+ chThdSetPriority(thdPriority);
+#endif
+ spiReleaseBus(&SPFD54124B_SPID);
+#endif
+}
+
+static inline void write_data(GDisplay *g, uint16_t data) {
+ (void) g;
+
+ uint16_t b;
+
+#if USE_HARD_SPI
+
+ spiStart(&SPFD54124B_SPID, &hs_spicfg);
+ spiSelect(&SPFD54124B_SPID);
+
+ b = (data >> 0x08) | SPFD54124B_SEND_DATA;
+ spiSend(&SPFD54124B_SPID, 0x01, &b);
+ b = (data & 0xFF) | SPFD54124B_SEND_DATA;
+ spiSend(&SPFD54124B_SPID, 0x01, &b);
+
+ spiUnselect(&SPFD54124B_SPID);
+ spiStop(&SPFD54124B_SPID);
+
+#endif
+#if USE_SOFT_SPI
+ b = (data >> 0x08) | SPFD54124B_SEND_DATA;
+ soft_spi_write_9bit(b);
+ b = (data & 0xFF) | SPFD54124B_SEND_DATA;
+ soft_spi_write_9bit(b);
+#endif
+
+}
+
+static inline void write_index(GDisplay *g, uint16_t index) {
+ (void) g;
+
+#if USE_HARD_SPI
+ spiStart(&SPFD54124B_SPID, &hs_spicfg);
+ spiSelect(&SPFD54124B_SPID);
+ spiSend(&SPFD54124B_SPID, 0x01, &index);
+ spiUnselect(&SPFD54124B_SPID);
+ spiStop(&SPFD54124B_SPID);
+#endif
+#if USE_SOFT_SPI
+ soft_spi_write_9bit(index);
+#endif
+}
+
+static inline void post_init_board(GDisplay *g) {
+ (void) g;
+}
+
+static inline void set_backlight(GDisplay *g, uint8_t percent) {
+ (void) g;
+ (void) percent;
+}
+
+#endif /* _GDISP_LLD_BOARD_H */