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@1:6ae4383194a1, 2018-10-15 (annotated)
- Committer:
- HarryChen
- Date:
- Mon Oct 15 03:53:22 2018 +0000
- Revision:
- 1:6ae4383194a1
- Parent:
- 0:518ad5d26088
- Child:
- 2:73f957691c31
Update library to use OO
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 | 0:518ad5d26088 | 5 | #define nCS_L HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET) |
HarryChen | 0:518ad5d26088 | 6 | #define nCS_H HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET) |
HarryChen | 0:518ad5d26088 | 7 | |
HarryChen | 0:518ad5d26088 | 8 | #define nDC_L HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET) |
HarryChen | 0:518ad5d26088 | 9 | #define nDC_H HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET) |
HarryChen | 0:518ad5d26088 | 10 | |
HarryChen | 0:518ad5d26088 | 11 | #define nRST_L HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_RESET) |
HarryChen | 0:518ad5d26088 | 12 | #define nRST_H HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET) |
HarryChen | 0:518ad5d26088 | 13 | |
HarryChen | 0:518ad5d26088 | 14 | // TODO: use real value |
HarryChen | 1:6ae4383194a1 | 15 | static DigitalOut nCS(D1); |
HarryChen | 1:6ae4383194a1 | 16 | static DigitalOut nDC(D2); |
HarryChen | 1:6ae4383194a1 | 17 | static DigitalOut nRST(D3); |
HarryChen | 1:6ae4383194a1 | 18 | static DigitalIn busyPin(D8); |
HarryChen | 0:518ad5d26088 | 19 | |
HarryChen | 1:6ae4383194a1 | 20 | static SPI spi(D4, D5, D6, D7); |
HarryChen | 0:518ad5d26088 | 21 | |
HarryChen | 1:6ae4383194a1 | 22 | static void sendCommand(unsigned char command) { |
HarryChen | 0:518ad5d26088 | 23 | nCS = 0; |
HarryChen | 0:518ad5d26088 | 24 | nDC = 0; // command write |
HarryChen | 1:6ae4383194a1 | 25 | spi.write(command); |
HarryChen | 0:518ad5d26088 | 26 | nCS = 1; |
HarryChen | 0:518ad5d26088 | 27 | } |
HarryChen | 0:518ad5d26088 | 28 | |
HarryChen | 1:6ae4383194a1 | 29 | static void sendData(unsigned char data) { |
HarryChen | 0:518ad5d26088 | 30 | nCS = 0; |
HarryChen | 0:518ad5d26088 | 31 | nDC = 1; // data write |
HarryChen | 1:6ae4383194a1 | 32 | spi.write(data); |
HarryChen | 0:518ad5d26088 | 33 | nCS = 1; |
HarryChen | 0:518ad5d26088 | 34 | } |
HarryChen | 0:518ad5d26088 | 35 | |
HarryChen | 1:6ae4383194a1 | 36 | static void waitForReady(void) { |
HarryChen | 0:518ad5d26088 | 37 | unsigned char busy; |
HarryChen | 0:518ad5d26088 | 38 | do { |
HarryChen | 1:6ae4383194a1 | 39 | sendCommand(0x71); |
HarryChen | 0:518ad5d26088 | 40 | busy = busyPin; |
HarryChen | 0:518ad5d26088 | 41 | busy = !(busy & 0x01); |
HarryChen | 0:518ad5d26088 | 42 | } while (busy); |
HarryChen | 0:518ad5d26088 | 43 | wait(0.2); |
HarryChen | 0:518ad5d26088 | 44 | } |
HarryChen | 0:518ad5d26088 | 45 | |
HarryChen | 1:6ae4383194a1 | 46 | static void init(void) { |
HarryChen | 0:518ad5d26088 | 47 | // BS tied to GND |
HarryChen | 0:518ad5d26088 | 48 | // nBS_L; //4 wire spi mode selected |
HarryChen | 0:518ad5d26088 | 49 | |
HarryChen | 1:6ae4383194a1 | 50 | // module reset |
HarryChen | 1:6ae4383194a1 | 51 | nRST = 0; |
HarryChen | 0:518ad5d26088 | 52 | wait(0.1); |
HarryChen | 0:518ad5d26088 | 53 | nRST = 1;; |
HarryChen | 0:518ad5d26088 | 54 | wait(0.1); |
HarryChen | 0:518ad5d26088 | 55 | |
HarryChen | 0:518ad5d26088 | 56 | } |
HarryChen | 0:518ad5d26088 | 57 | |
HarryChen | 1:6ae4383194a1 | 58 | #define PIXEL_WHITE 0x02 |
HarryChen | 1:6ae4383194a1 | 59 | #define PIXEL_BLACK 0x00 |
HarryChen | 1:6ae4383194a1 | 60 | #define PIXEL(p) ((p) ? (PIXEL_BLACK) : (PIXEL_WHITE)) |
HarryChen | 0:518ad5d26088 | 61 | |
HarryChen | 1:6ae4383194a1 | 62 | static void display(GDE::PixelSource &source) { |
HarryChen | 1:6ae4383194a1 | 63 | |
HarryChen | 1:6ae4383194a1 | 64 | // start user data transmission |
HarryChen | 1:6ae4383194a1 | 65 | sendCommand(0x10); |
HarryChen | 1:6ae4383194a1 | 66 | |
HarryChen | 1:6ae4383194a1 | 67 | source.init(); |
HarryChen | 1:6ae4383194a1 | 68 | |
HarryChen | 1:6ae4383194a1 | 69 | while (source.hasNext()) { |
HarryChen | 1:6ae4383194a1 | 70 | unsigned char p = source.nextPixelGroup(); |
HarryChen | 1:6ae4383194a1 | 71 | // transmit 2 pixels each time |
HarryChen | 1:6ae4383194a1 | 72 | for (int j = 0; j < 4; ++j) { |
HarryChen | 1:6ae4383194a1 | 73 | unsigned char data = ((PIXEL(p & 0x01)) << 4) | (PIXEL(p & 0x02)); |
HarryChen | 1:6ae4383194a1 | 74 | sendData(data); |
HarryChen | 1:6ae4383194a1 | 75 | p >>= 2; |
HarryChen | 1:6ae4383194a1 | 76 | } |
HarryChen | 0:518ad5d26088 | 77 | } |
HarryChen | 1:6ae4383194a1 | 78 | |
HarryChen | 1:6ae4383194a1 | 79 | // power on |
HarryChen | 1:6ae4383194a1 | 80 | sendCommand(0x04); |
HarryChen | 1:6ae4383194a1 | 81 | waitForReady(); |
HarryChen | 0:518ad5d26088 | 82 | |
HarryChen | 1:6ae4383194a1 | 83 | // display refresh |
HarryChen | 1:6ae4383194a1 | 84 | GDE::refresh(); |
HarryChen | 0:518ad5d26088 | 85 | |
HarryChen | 1:6ae4383194a1 | 86 | wait(1); |
HarryChen | 0:518ad5d26088 | 87 | } |
HarryChen | 0:518ad5d26088 | 88 | |
HarryChen | 1:6ae4383194a1 | 89 | namespace GDE { |
HarryChen | 0:518ad5d26088 | 90 | |
HarryChen | 1:6ae4383194a1 | 91 | void start() { |
HarryChen | 1:6ae4383194a1 | 92 | |
HarryChen | 1:6ae4383194a1 | 93 | init(); |
HarryChen | 1:6ae4383194a1 | 94 | |
HarryChen | 1:6ae4383194a1 | 95 | // power setting |
HarryChen | 1:6ae4383194a1 | 96 | sendCommand(0x01); |
HarryChen | 1:6ae4383194a1 | 97 | sendData(0x37); |
HarryChen | 1:6ae4383194a1 | 98 | sendData(0x00); |
HarryChen | 1:6ae4383194a1 | 99 | |
HarryChen | 1:6ae4383194a1 | 100 | // pannel setting |
HarryChen | 1:6ae4383194a1 | 101 | sendCommand(0x00); |
HarryChen | 1:6ae4383194a1 | 102 | sendData(0xCF); |
HarryChen | 1:6ae4383194a1 | 103 | sendData(0x08); |
HarryChen | 1:6ae4383194a1 | 104 | |
HarryChen | 1:6ae4383194a1 | 105 | // boost setting |
HarryChen | 1:6ae4383194a1 | 106 | sendCommand(0x06); |
HarryChen | 1:6ae4383194a1 | 107 | sendData(0xc7); |
HarryChen | 1:6ae4383194a1 | 108 | sendData(0xcc); |
HarryChen | 1:6ae4383194a1 | 109 | sendData(0x28); |
HarryChen | 1:6ae4383194a1 | 110 | |
HarryChen | 1:6ae4383194a1 | 111 | |
HarryChen | 1:6ae4383194a1 | 112 | // PLL setting |
HarryChen | 1:6ae4383194a1 | 113 | sendCommand(0x30); |
HarryChen | 1:6ae4383194a1 | 114 | sendData(0x3c); |
HarryChen | 1:6ae4383194a1 | 115 | |
HarryChen | 1:6ae4383194a1 | 116 | // temperature setting |
HarryChen | 1:6ae4383194a1 | 117 | sendCommand(0x41); |
HarryChen | 1:6ae4383194a1 | 118 | sendData(0x00); |
HarryChen | 1:6ae4383194a1 | 119 | |
HarryChen | 1:6ae4383194a1 | 120 | // VCOM and DATA interval setting |
HarryChen | 1:6ae4383194a1 | 121 | sendCommand(0x50); |
HarryChen | 1:6ae4383194a1 | 122 | sendData(0x77); |
HarryChen | 1:6ae4383194a1 | 123 | |
HarryChen | 1:6ae4383194a1 | 124 | // TCON setting |
HarryChen | 1:6ae4383194a1 | 125 | sendCommand(0x60); |
HarryChen | 1:6ae4383194a1 | 126 | sendData(0x22); |
HarryChen | 1:6ae4383194a1 | 127 | |
HarryChen | 1:6ae4383194a1 | 128 | // resolution setting |
HarryChen | 1:6ae4383194a1 | 129 | sendCommand(0x61); |
HarryChen | 1:6ae4383194a1 | 130 | // source 640 |
HarryChen | 1:6ae4383194a1 | 131 | sendData(0x02); |
HarryChen | 1:6ae4383194a1 | 132 | sendData(0x80); |
HarryChen | 1:6ae4383194a1 | 133 | // gate 384 |
HarryChen | 1:6ae4383194a1 | 134 | sendData(0x01); |
HarryChen | 1:6ae4383194a1 | 135 | sendData(0x80); |
HarryChen | 1:6ae4383194a1 | 136 | |
HarryChen | 1:6ae4383194a1 | 137 | // VDCS setting |
HarryChen | 1:6ae4383194a1 | 138 | sendCommand(0x82); |
HarryChen | 1:6ae4383194a1 | 139 | // decided by LUT file |
HarryChen | 1:6ae4383194a1 | 140 | sendData(0x1E); |
HarryChen | 1:6ae4383194a1 | 141 | |
HarryChen | 1:6ae4383194a1 | 142 | // flash mode |
HarryChen | 1:6ae4383194a1 | 143 | sendCommand(0xe5); |
HarryChen | 1:6ae4383194a1 | 144 | sendData(0x03); |
HarryChen | 1:6ae4383194a1 | 145 | |
HarryChen | 1:6ae4383194a1 | 146 | } |
HarryChen | 1:6ae4383194a1 | 147 | |
HarryChen | 1:6ae4383194a1 | 148 | void refresh() { |
HarryChen | 1:6ae4383194a1 | 149 | sendCommand(0x12); |
HarryChen | 0:518ad5d26088 | 150 | wait(0.1); |
HarryChen | 1:6ae4383194a1 | 151 | waitForReady(); |
HarryChen | 1:6ae4383194a1 | 152 | } |
HarryChen | 1:6ae4383194a1 | 153 | |
HarryChen | 1:6ae4383194a1 | 154 | void showPixels(PixelSource &source, bool needRefresh) { |
HarryChen | 1:6ae4383194a1 | 155 | if (needRefresh) { |
HarryChen | 1:6ae4383194a1 | 156 | PixelSource fullBlackSource = PixelSource(); |
HarryChen | 1:6ae4383194a1 | 157 | display(fullBlackSource); |
HarryChen | 1:6ae4383194a1 | 158 | } |
HarryChen | 1:6ae4383194a1 | 159 | display(source); |
HarryChen | 1:6ae4383194a1 | 160 | } |
HarryChen | 1:6ae4383194a1 | 161 | |
HarryChen | 1:6ae4383194a1 | 162 | void stop() { |
HarryChen | 1:6ae4383194a1 | 163 | |
HarryChen | 1:6ae4383194a1 | 164 | sendCommand(0x02); |
HarryChen | 1:6ae4383194a1 | 165 | waitForReady(); |
HarryChen | 1:6ae4383194a1 | 166 | |
HarryChen | 1:6ae4383194a1 | 167 | sendCommand(0x07); |
HarryChen | 1:6ae4383194a1 | 168 | sendData(0xa5); |
HarryChen | 1:6ae4383194a1 | 169 | |
HarryChen | 0:518ad5d26088 | 170 | } |
HarryChen | 0:518ad5d26088 | 171 | |
HarryChen | 0:518ad5d26088 | 172 | } |