Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
GDEW075T8.cpp@3:8129e159831b, 2018-10-15 (annotated)
- Committer:
- HarryChen
- Date:
- Mon Oct 15 04:12:41 2018 +0000
- Revision:
- 3:8129e159831b
- Parent:
- 2:73f957691c31
- Child:
- 4:a038b8b2ee11
Allow user to customize pin name
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
HarryChen | 0:518ad5d26088 | 1 | #include "mbed.h" |
HarryChen | 0:518ad5d26088 | 2 | #include "GDEW075T8.h" |
HarryChen | 1:6ae4383194a1 | 3 | #include "PixelSource.h" |
HarryChen | 0:518ad5d26088 | 4 | |
HarryChen | 3:8129e159831b | 5 | static DigitalOut *nCS, *nDC, *nRST; |
HarryChen | 3:8129e159831b | 6 | static DigitalIn *ready; |
HarryChen | 3:8129e159831b | 7 | static SPI *spi; |
HarryChen | 0:518ad5d26088 | 8 | |
HarryChen | 1:6ae4383194a1 | 9 | static void sendCommand(unsigned char command) { |
HarryChen | 3:8129e159831b | 10 | *nCS = 0; |
HarryChen | 3:8129e159831b | 11 | *nDC = 0; // command write |
HarryChen | 3:8129e159831b | 12 | spi->write(command); |
HarryChen | 3:8129e159831b | 13 | *nCS = 1; |
HarryChen | 0:518ad5d26088 | 14 | } |
HarryChen | 0:518ad5d26088 | 15 | |
HarryChen | 1:6ae4383194a1 | 16 | static void sendData(unsigned char data) { |
HarryChen | 3:8129e159831b | 17 | *nCS = 0; |
HarryChen | 3:8129e159831b | 18 | *nDC = 1; // data write |
HarryChen | 3:8129e159831b | 19 | spi->write(data); |
HarryChen | 3:8129e159831b | 20 | *nCS = 1; |
HarryChen | 0:518ad5d26088 | 21 | } |
HarryChen | 0:518ad5d26088 | 22 | |
HarryChen | 1:6ae4383194a1 | 23 | static void waitForReady(void) { |
HarryChen | 0:518ad5d26088 | 24 | unsigned char busy; |
HarryChen | 0:518ad5d26088 | 25 | do { |
HarryChen | 1:6ae4383194a1 | 26 | sendCommand(0x71); |
HarryChen | 3:8129e159831b | 27 | busy = !(*ready & 0x01); |
HarryChen | 0:518ad5d26088 | 28 | } while (busy); |
HarryChen | 0:518ad5d26088 | 29 | wait(0.2); |
HarryChen | 0:518ad5d26088 | 30 | } |
HarryChen | 0:518ad5d26088 | 31 | |
HarryChen | 1:6ae4383194a1 | 32 | static void init(void) { |
HarryChen | 0:518ad5d26088 | 33 | // BS tied to GND |
HarryChen | 0:518ad5d26088 | 34 | // nBS_L; //4 wire spi mode selected |
HarryChen | 0:518ad5d26088 | 35 | |
HarryChen | 1:6ae4383194a1 | 36 | // module reset |
HarryChen | 3:8129e159831b | 37 | *nRST = 0; |
HarryChen | 0:518ad5d26088 | 38 | wait(0.1); |
HarryChen | 3:8129e159831b | 39 | *nRST = 1;; |
HarryChen | 0:518ad5d26088 | 40 | wait(0.1); |
HarryChen | 0:518ad5d26088 | 41 | |
HarryChen | 0:518ad5d26088 | 42 | } |
HarryChen | 0:518ad5d26088 | 43 | |
HarryChen | 2:73f957691c31 | 44 | static void refresh() { |
HarryChen | 2:73f957691c31 | 45 | sendCommand(0x12); |
HarryChen | 2:73f957691c31 | 46 | wait(0.1); |
HarryChen | 2:73f957691c31 | 47 | waitForReady(); |
HarryChen | 2:73f957691c31 | 48 | } |
HarryChen | 2:73f957691c31 | 49 | |
HarryChen | 1:6ae4383194a1 | 50 | #define PIXEL_WHITE 0x02 |
HarryChen | 1:6ae4383194a1 | 51 | #define PIXEL_BLACK 0x00 |
HarryChen | 1:6ae4383194a1 | 52 | #define PIXEL(p) ((p) ? (PIXEL_BLACK) : (PIXEL_WHITE)) |
HarryChen | 0:518ad5d26088 | 53 | |
HarryChen | 1:6ae4383194a1 | 54 | static void display(GDE::PixelSource &source) { |
HarryChen | 1:6ae4383194a1 | 55 | |
HarryChen | 1:6ae4383194a1 | 56 | // start user data transmission |
HarryChen | 1:6ae4383194a1 | 57 | sendCommand(0x10); |
HarryChen | 1:6ae4383194a1 | 58 | |
HarryChen | 1:6ae4383194a1 | 59 | source.init(); |
HarryChen | 1:6ae4383194a1 | 60 | |
HarryChen | 2:73f957691c31 | 61 | int i = 0; |
HarryChen | 2:73f957691c31 | 62 | |
HarryChen | 2:73f957691c31 | 63 | while (i++ < GDE::BUFFER_SIZE && source.hasNext()) { |
HarryChen | 1:6ae4383194a1 | 64 | unsigned char p = source.nextPixelGroup(); |
HarryChen | 1:6ae4383194a1 | 65 | // transmit 2 pixels each time |
HarryChen | 1:6ae4383194a1 | 66 | for (int j = 0; j < 4; ++j) { |
HarryChen | 1:6ae4383194a1 | 67 | unsigned char data = ((PIXEL(p & 0x01)) << 4) | (PIXEL(p & 0x02)); |
HarryChen | 1:6ae4383194a1 | 68 | sendData(data); |
HarryChen | 1:6ae4383194a1 | 69 | p >>= 2; |
HarryChen | 1:6ae4383194a1 | 70 | } |
HarryChen | 0:518ad5d26088 | 71 | } |
HarryChen | 1:6ae4383194a1 | 72 | |
HarryChen | 1:6ae4383194a1 | 73 | // power on |
HarryChen | 1:6ae4383194a1 | 74 | sendCommand(0x04); |
HarryChen | 1:6ae4383194a1 | 75 | waitForReady(); |
HarryChen | 0:518ad5d26088 | 76 | |
HarryChen | 1:6ae4383194a1 | 77 | // display refresh |
HarryChen | 2:73f957691c31 | 78 | refresh(); |
HarryChen | 0:518ad5d26088 | 79 | |
HarryChen | 1:6ae4383194a1 | 80 | wait(1); |
HarryChen | 0:518ad5d26088 | 81 | } |
HarryChen | 0:518ad5d26088 | 82 | |
HarryChen | 1:6ae4383194a1 | 83 | namespace GDE { |
HarryChen | 3:8129e159831b | 84 | |
HarryChen | 3:8129e159831b | 85 | void setup(DigitalOut *nCS, DigitalOut *nDC, |
HarryChen | 3:8129e159831b | 86 | DigitalOut *nRST, DigitalIn *ready, |
HarryChen | 3:8129e159831b | 87 | SPI *spi) { |
HarryChen | 3:8129e159831b | 88 | ::nCS = nCS; |
HarryChen | 3:8129e159831b | 89 | ::nDC = nDC; |
HarryChen | 3:8129e159831b | 90 | ::nRST = nRST; |
HarryChen | 3:8129e159831b | 91 | ::ready = ready; |
HarryChen | 3:8129e159831b | 92 | ::spi = spi; |
HarryChen | 3:8129e159831b | 93 | } |
HarryChen | 0:518ad5d26088 | 94 | |
HarryChen | 1:6ae4383194a1 | 95 | void start() { |
HarryChen | 1:6ae4383194a1 | 96 | |
HarryChen | 1:6ae4383194a1 | 97 | init(); |
HarryChen | 1:6ae4383194a1 | 98 | |
HarryChen | 1:6ae4383194a1 | 99 | // power setting |
HarryChen | 1:6ae4383194a1 | 100 | sendCommand(0x01); |
HarryChen | 1:6ae4383194a1 | 101 | sendData(0x37); |
HarryChen | 1:6ae4383194a1 | 102 | sendData(0x00); |
HarryChen | 1:6ae4383194a1 | 103 | |
HarryChen | 1:6ae4383194a1 | 104 | // pannel setting |
HarryChen | 1:6ae4383194a1 | 105 | sendCommand(0x00); |
HarryChen | 1:6ae4383194a1 | 106 | sendData(0xCF); |
HarryChen | 1:6ae4383194a1 | 107 | sendData(0x08); |
HarryChen | 1:6ae4383194a1 | 108 | |
HarryChen | 1:6ae4383194a1 | 109 | // boost setting |
HarryChen | 1:6ae4383194a1 | 110 | sendCommand(0x06); |
HarryChen | 1:6ae4383194a1 | 111 | sendData(0xc7); |
HarryChen | 1:6ae4383194a1 | 112 | sendData(0xcc); |
HarryChen | 1:6ae4383194a1 | 113 | sendData(0x28); |
HarryChen | 1:6ae4383194a1 | 114 | |
HarryChen | 1:6ae4383194a1 | 115 | |
HarryChen | 1:6ae4383194a1 | 116 | // PLL setting |
HarryChen | 1:6ae4383194a1 | 117 | sendCommand(0x30); |
HarryChen | 1:6ae4383194a1 | 118 | sendData(0x3c); |
HarryChen | 1:6ae4383194a1 | 119 | |
HarryChen | 1:6ae4383194a1 | 120 | // temperature setting |
HarryChen | 1:6ae4383194a1 | 121 | sendCommand(0x41); |
HarryChen | 1:6ae4383194a1 | 122 | sendData(0x00); |
HarryChen | 1:6ae4383194a1 | 123 | |
HarryChen | 1:6ae4383194a1 | 124 | // VCOM and DATA interval setting |
HarryChen | 1:6ae4383194a1 | 125 | sendCommand(0x50); |
HarryChen | 1:6ae4383194a1 | 126 | sendData(0x77); |
HarryChen | 1:6ae4383194a1 | 127 | |
HarryChen | 1:6ae4383194a1 | 128 | // TCON setting |
HarryChen | 1:6ae4383194a1 | 129 | sendCommand(0x60); |
HarryChen | 1:6ae4383194a1 | 130 | sendData(0x22); |
HarryChen | 1:6ae4383194a1 | 131 | |
HarryChen | 1:6ae4383194a1 | 132 | // resolution setting |
HarryChen | 1:6ae4383194a1 | 133 | sendCommand(0x61); |
HarryChen | 1:6ae4383194a1 | 134 | // source 640 |
HarryChen | 1:6ae4383194a1 | 135 | sendData(0x02); |
HarryChen | 1:6ae4383194a1 | 136 | sendData(0x80); |
HarryChen | 1:6ae4383194a1 | 137 | // gate 384 |
HarryChen | 1:6ae4383194a1 | 138 | sendData(0x01); |
HarryChen | 1:6ae4383194a1 | 139 | sendData(0x80); |
HarryChen | 1:6ae4383194a1 | 140 | |
HarryChen | 1:6ae4383194a1 | 141 | // VDCS setting |
HarryChen | 1:6ae4383194a1 | 142 | sendCommand(0x82); |
HarryChen | 1:6ae4383194a1 | 143 | // decided by LUT file |
HarryChen | 1:6ae4383194a1 | 144 | sendData(0x1E); |
HarryChen | 1:6ae4383194a1 | 145 | |
HarryChen | 1:6ae4383194a1 | 146 | // flash mode |
HarryChen | 1:6ae4383194a1 | 147 | sendCommand(0xe5); |
HarryChen | 1:6ae4383194a1 | 148 | sendData(0x03); |
HarryChen | 1:6ae4383194a1 | 149 | |
HarryChen | 1:6ae4383194a1 | 150 | } |
HarryChen | 1:6ae4383194a1 | 151 | |
HarryChen | 1:6ae4383194a1 | 152 | void showPixels(PixelSource &source, bool needRefresh) { |
HarryChen | 1:6ae4383194a1 | 153 | if (needRefresh) { |
HarryChen | 1:6ae4383194a1 | 154 | PixelSource fullBlackSource = PixelSource(); |
HarryChen | 1:6ae4383194a1 | 155 | display(fullBlackSource); |
HarryChen | 1:6ae4383194a1 | 156 | } |
HarryChen | 1:6ae4383194a1 | 157 | display(source); |
HarryChen | 1:6ae4383194a1 | 158 | } |
HarryChen | 1:6ae4383194a1 | 159 | |
HarryChen | 1:6ae4383194a1 | 160 | void stop() { |
HarryChen | 1:6ae4383194a1 | 161 | |
HarryChen | 1:6ae4383194a1 | 162 | sendCommand(0x02); |
HarryChen | 1:6ae4383194a1 | 163 | waitForReady(); |
HarryChen | 1:6ae4383194a1 | 164 | |
HarryChen | 1:6ae4383194a1 | 165 | sendCommand(0x07); |
HarryChen | 1:6ae4383194a1 | 166 | sendData(0xa5); |
HarryChen | 1:6ae4383194a1 | 167 | |
HarryChen | 0:518ad5d26088 | 168 | } |
HarryChen | 0:518ad5d26088 | 169 | |
HarryChen | 0:518ad5d26088 | 170 | } |