aboutsummaryrefslogtreecommitdiffstats
path: root/boards
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2015-02-07 01:14:16 +1000
committerinmarket <andrewh@inmarket.com.au>2015-02-07 01:14:16 +1000
commit5b2fff679de51ccb9097ebbf8cb8f2fe2ff778b7 (patch)
tree704a2ee8b02b67642c6b8ce7950a7f0a9a44058d /boards
parentb8eab8f0357d030a771cc830781e5afe807feb1a (diff)
downloaduGFX-5b2fff679de51ccb9097ebbf8cb8f2fe2ff778b7.tar.gz
uGFX-5b2fff679de51ccb9097ebbf8cb8f2fe2ff778b7.tar.bz2
uGFX-5b2fff679de51ccb9097ebbf8cb8f2fe2ff778b7.zip
Add TLS8204 on UEXT (Olimex MOD3310) to the SAM7EX256 board
Diffstat (limited to 'boards')
-rw-r--r--boards/base/Olimex-SAM7EX256-GE8/board_TLS8204.h158
-rw-r--r--boards/base/Olimex-SAM7EX256-GE8/readme.txt3
2 files changed, 161 insertions, 0 deletions
diff --git a/boards/base/Olimex-SAM7EX256-GE8/board_TLS8204.h b/boards/base/Olimex-SAM7EX256-GE8/board_TLS8204.h
new file mode 100644
index 00000000..a548b832
--- /dev/null
+++ b/boards/base/Olimex-SAM7EX256-GE8/board_TLS8204.h
@@ -0,0 +1,158 @@
+/*
+ * 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
+
+#include "board_uext.h"
+
+#define PORT_RESET UEXT_PORT_PIN5
+#define PIN_RESET UEXT_PORTPIN_PIN5
+#define PORT_DC UEXT_PORT_PIN6
+#define PIN_DC UEXT_PORTPIN_PIN6
+
+#define BIT_BASH TRUE // Native SPI is not working yet
+#define DIRECT_IO TRUE // ChibiOS for the AT91SAM7 requires patch 7669 or higher if DIRECT_IO is FALSE
+
+#if DIRECT_IO
+ #define PinIsOutput(port,pin) ((port)->PIO_OER = 1 << (pin), (port)->PIO_PER = 1 << (pin), (port)->PIO_MDDR = 1 << (pin), (port)->PIO_PPUDR = 1 << (pin))
+ #define PinSet(port,pin) (port)->PIO_SODR = 1 << (pin)
+ #define PinClear(port,pin) (port)->PIO_CODR = 1 << (pin)
+#else
+ #define PinIsOutput(port,pin) palSetPadMode((port), (pin), PAL_MODE_OUTPUT_PUSHPULL)
+ #define PinSet(port,pin) palSetPad((port), (pin))
+ #define PinClear(port,pin) palClearPad((port), (pin))
+#endif
+
+#if BIT_BASH
+ // simple delays
+ void Delay(volatile unsigned long a) { while (a!=0) a--; }
+ void Delayc(volatile unsigned char a) { while (a!=0) a--; }
+#else
+ static const SPIConfig spiconfig = {
+ 0,
+ /* HW dependent part.*/
+ UEXT_SPI_CS_PORT,
+ UEXT_SPI_CS_PORTPIN,
+ 0x01010801 // For AT91SAM7: 8bit, CPOL=1, NCPHA = 0, ClockPhase=0, SCLK = 48Mhz/8 = 6MHz
+ };
+#endif
+
+static inline void init_board(GDisplay *g) {
+ (void) g;
+
+ PinIsOutput (PORT_DC, PIN_DC);
+ PinIsOutput (PORT_RESET, PIN_RESET);
+ PinSet (PORT_RESET, PIN_RESET);
+
+ PinIsOutput (UEXT_SPI_CS_PORT, UEXT_SPI_CS_PORTPIN);
+ PinSet (UEXT_SPI_CS_PORT, UEXT_SPI_CS_PORTPIN);
+
+ #if BIT_BASH
+ PinIsOutput (UEXT_SPI_MOSI_PORT, UEXT_SPI_MOSI_PORTPIN);
+ PinSet (UEXT_SPI_MOSI_PORT, UEXT_SPI_MOSI_PORTPIN);
+ PinIsOutput (UEXT_SPI_SCK_PORT, UEXT_SPI_SCK_PORTPIN);
+ PinSet (UEXT_SPI_SCK_PORT, UEXT_SPI_SCK_PORTPIN);
+ #endif
+}
+
+static inline void post_init_board(GDisplay *g) {
+ (void) g;
+}
+
+static inline void setpin_reset(GDisplay *g, bool_t state) {
+ (void) g;
+ (void) state;
+
+ if (state)
+ PinClear(PORT_RESET, PIN_RESET);
+ else
+ PinSet(PORT_RESET, PIN_RESET);
+}
+
+static inline void set_backlight(GDisplay *g, uint8_t percent) {
+ (void) g;
+ (void) percent;
+}
+
+static inline void acquire_bus(GDisplay *g) {
+ (void) g;
+
+ #if BIT_BASH
+ PinClear(UEXT_SPI_CS_PORT, UEXT_SPI_CS_PORTPIN);
+ #else
+ spiStart(UEXT_SPI, &spiconfig);
+ spiSelect(UEXT_SPI);
+ #endif
+}
+
+static inline void release_bus(GDisplay *g) {
+ (void) g;
+
+ #if BIT_BASH
+ PinSet(UEXT_SPI_CS_PORT, UEXT_SPI_CS_PORTPIN);
+ #else
+ spiUnselect(UEXT_SPI);
+ spiStop(UEXT_SPI);
+ #endif
+}
+
+static inline void write_cmd(GDisplay *g, uint8_t cmd) {
+ (void) g;
+
+ // Command mode please
+ PinClear(PORT_DC, PIN_DC);
+
+ #if BIT_BASH
+ {
+ uint8_t bit;
+
+
+ for(bit = 0x80; bit; bit >>= 1) {
+ if(cmd & bit)
+ PinSet(UEXT_SPI_MOSI_PORT, UEXT_SPI_MOSI_PORTPIN);
+ else
+ PinClear(UEXT_SPI_MOSI_PORT, UEXT_SPI_MOSI_PORTPIN);
+ Delay(1);
+ PinClear(UEXT_SPI_SCK_PORT, UEXT_SPI_SCK_PORTPIN);
+ Delay(1);
+ PinSet(UEXT_SPI_SCK_PORT, UEXT_SPI_SCK_PORTPIN);
+ }
+ }
+ #else
+ spiStartSend(UEXT_SPI, 1, &cmd);
+ #endif
+}
+
+static inline void write_data(GDisplay *g, uint8_t* data, uint16_t length) {
+ (void) g;
+
+ // Data mode please
+ PinSet(PORT_DC, PIN_DC);
+
+ #if BIT_BASH
+ while(length--) {
+ uint8_t bit;
+
+ for(bit = 0x80; bit; bit >>= 1) {
+ if(*data & bit)
+ PinSet(UEXT_SPI_MOSI_PORT, UEXT_SPI_MOSI_PORTPIN);
+ else
+ PinClear(UEXT_SPI_MOSI_PORT, UEXT_SPI_MOSI_PORTPIN);
+ Delay(1);
+ PinClear(UEXT_SPI_SCK_PORT, UEXT_SPI_SCK_PORTPIN);
+ Delay(1);
+ PinSet(UEXT_SPI_SCK_PORT, UEXT_SPI_SCK_PORTPIN);
+ }
+ data++;
+ }
+ #else
+ spiStartSend(UEXT_SPI, length, data);
+ #endif
+}
+
+#endif /* _GDISP_LLD_BOARD_H */
diff --git a/boards/base/Olimex-SAM7EX256-GE8/readme.txt b/boards/base/Olimex-SAM7EX256-GE8/readme.txt
index f613dee3..2910f815 100644
--- a/boards/base/Olimex-SAM7EX256-GE8/readme.txt
+++ b/boards/base/Olimex-SAM7EX256-GE8/readme.txt
@@ -12,3 +12,6 @@ Note there are two variants of this board - one with the GE8 display
and one with the GE12 display. This one is for the GE8 display.
There is an example Makefile and project in the examples directory.
+
+There are also board files predefined for (just add driver to the makefile):
+ - TLS8204 on the UEXT connector (Olimex MOD3310) \ No newline at end of file