aboutsummaryrefslogtreecommitdiffstats
path: root/boards/base/Mikromedia-Plus-STM32-M4/board_SSD1963.h
diff options
context:
space:
mode:
Diffstat (limited to 'boards/base/Mikromedia-Plus-STM32-M4/board_SSD1963.h')
-rw-r--r--boards/base/Mikromedia-Plus-STM32-M4/board_SSD1963.h134
1 files changed, 134 insertions, 0 deletions
diff --git a/boards/base/Mikromedia-Plus-STM32-M4/board_SSD1963.h b/boards/base/Mikromedia-Plus-STM32-M4/board_SSD1963.h
new file mode 100644
index 00000000..b0114ca9
--- /dev/null
+++ b/boards/base/Mikromedia-Plus-STM32-M4/board_SSD1963.h
@@ -0,0 +1,134 @@
+/*
+ * 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
+ */
+
+#ifndef _GDISP_LLD_BOARD_H
+#define _GDISP_LLD_BOARD_H
+
+//#define SSD1963_INIT_METHOD_2 TRUE
+
+static const LCD_Parameters DisplayTimings[] = {
+ // You need one of these array elements per display
+ {
+ 480, 272, // Panel width and height
+ 2, 2, 41, // Horizontal Timings (back porch, front porch, pulse)
+ CALC_PERIOD(480,2,2,41), // Total Horizontal Period (calculated from above line)
+ 2, 2, 10, // Vertical Timings (back porch, front porch, pulse)
+ CALC_PERIOD(272,2,2,10), // Total Vertical Period (calculated from above line)
+ CALC_FPR(480,272,2,2,41,2,2,10,73ULL), // FPR - the 60ULL is the frames per second. Note the ULL!
+ LCD_PANEL_DATA_WIDTH_24BIT | LCD_PANEL_ENABLE_DITHERING
+ },
+};
+
+/* GPIO Pin Config */
+#define GDISP_CMD_PORT GPIOF
+#define GDISP_DATA_LO_PORT GPIOG
+#define GDISP_DATA_HI_PORT GPIOE
+
+#define GDISP_WR 11
+#define GDISP_RD 12
+#define GDISP_CS 13
+#define GDISP_RST 14
+#define GDISP_DC 15
+
+#define SET_CS palSetPad(GDISP_CMD_PORT, GDISP_CS);
+#define CLR_CS palClearPad(GDISP_CMD_PORT, GDISP_CS);
+#define SET_RST palSetPad(GDISP_CMD_PORT, GDISP_RST);
+#define CLR_RST palClearPad(GDISP_CMD_PORT, GDISP_RST);
+#define SET_WR palSetPad(GDISP_CMD_PORT, GDISP_WR);
+#define CLR_WR palClearPad(GDISP_CMD_PORT, GDISP_WR);
+#define SET_RD palSetPad(GDISP_CMD_PORT, GDISP_RD);
+#define CLR_RD palClearPad(GDISP_CMD_PORT, GDISP_RD);
+#define SET_DC palSetPad(GDISP_CMD_PORT, GDISP_DC);
+#define CLR_DC palClearPad(GDISP_CMD_PORT, GDISP_DC);
+
+#define writeStrobe { CLR_WR; asm volatile ("nop;"); SET_WR; }
+
+IOBus busCMD = { GDISP_CMD_PORT, (1 << GDISP_CS) | (1 << GDISP_RST) | (1 << GDISP_WR) | (1 << GDISP_RD) | (1 << GDISP_DC), 11 };
+IOBus busDataLo = { GDISP_DATA_LO_PORT, 0xFF, 0 };
+IOBus busDataHi = { GDISP_DATA_HI_PORT, 0xFF, 8 };
+
+
+static inline void init_board(GDisplay *g) {
+ g->board = 0;
+ switch(g->controllerdisplay) {
+ case 0:
+ {
+ palSetBusMode(&busCMD, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetBusMode(&busDataLo, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetBusMode(&busDataHi, PAL_MODE_OUTPUT_PUSHPULL);
+ SET_CS; SET_WR; SET_RD; SET_DC; SET_RST;
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+static inline void post_init_board(GDisplay *g) {
+ (void) g;
+}
+
+static inline void setpin_reset(GDisplay *g, bool_t state) {
+ (void) g;
+ if (state) {
+ CLR_RST;
+ } else {
+ SET_RST;
+ }
+}
+
+static inline void acquire_bus(GDisplay *g) {
+ (void) g;
+ CLR_CS;
+}
+
+static inline void release_bus(GDisplay *g) {
+ (void) g;
+ SET_CS;
+}
+
+static inline void write_index(GDisplay *g, uint16_t index) {
+ (void) g;
+
+ CLR_DC;
+ palWriteBus(&busDataLo, (index & 0xFF));
+ palWriteBus(&busDataHi, (index >> 8));
+ writeStrobe;
+ SET_DC;
+}
+
+static inline void write_data(GDisplay *g, uint16_t data) {
+ (void) g;
+
+ palWriteBus(&busDataLo, (data & 0xFF));
+ palWriteBus(&busDataHi, (data >> 8));
+ writeStrobe;
+}
+
+static inline void setreadmode(GDisplay *g) {
+ (void) g;
+ palSetBusMode(&busDataLo, PAL_MODE_INPUT_PULLUP);
+ palSetBusMode(&busDataHi, PAL_MODE_INPUT_PULLUP);
+}
+
+static inline void setwritemode(GDisplay *g) {
+ (void) g;
+ palSetBusMode(&busDataLo, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetBusMode(&busDataHi, PAL_MODE_OUTPUT_PUSHPULL);
+}
+
+static inline uint16_t read_data(GDisplay *g) {
+ (void) g;
+
+ uint16_t data;
+ CLR_RD;
+ data = (palReadBus(&busDataHi) << 8) | palReadBus(&busDataLo);
+ SET_RD;
+ return data;
+}
+
+#endif /* _GDISP_LLD_BOARD_H */