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@0:518ad5d26088, 2018-10-14 (annotated)
- Committer:
- HarryChen
- Date:
- Sun Oct 14 17:03:59 2018 +0000
- Revision:
- 0:518ad5d26088
- Child:
- 1:6ae4383194a1
Port GDEW075T8 library to mbed
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 | 0:518ad5d26088 | 3 | |
HarryChen | 0:518ad5d26088 | 4 | #define nCS_L HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET) |
HarryChen | 0:518ad5d26088 | 5 | #define nCS_H HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET) |
HarryChen | 0:518ad5d26088 | 6 | |
HarryChen | 0:518ad5d26088 | 7 | #define nDC_L HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET) |
HarryChen | 0:518ad5d26088 | 8 | #define nDC_H HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET) |
HarryChen | 0:518ad5d26088 | 9 | |
HarryChen | 0:518ad5d26088 | 10 | #define nRST_L HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_RESET) |
HarryChen | 0:518ad5d26088 | 11 | #define nRST_H HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET) |
HarryChen | 0:518ad5d26088 | 12 | |
HarryChen | 0:518ad5d26088 | 13 | // TODO: use real value |
HarryChen | 0:518ad5d26088 | 14 | DigitalOut nCS(D1); |
HarryChen | 0:518ad5d26088 | 15 | DigitalOut nDC(D2); |
HarryChen | 0:518ad5d26088 | 16 | DigitalOut nRST(D3); |
HarryChen | 0:518ad5d26088 | 17 | DigitalIn busyPin(D8); |
HarryChen | 0:518ad5d26088 | 18 | |
HarryChen | 0:518ad5d26088 | 19 | SPI spi(D4, D5, D6, D7); |
HarryChen | 0:518ad5d26088 | 20 | |
HarryChen | 0:518ad5d26088 | 21 | static inline int SPI_Write(unsigned char value) { |
HarryChen | 0:518ad5d26088 | 22 | return spi.write(value); |
HarryChen | 0:518ad5d26088 | 23 | } |
HarryChen | 0:518ad5d26088 | 24 | |
HarryChen | 0:518ad5d26088 | 25 | void SPI4W_WRITECOM(unsigned char command) { |
HarryChen | 0:518ad5d26088 | 26 | nCS = 0; |
HarryChen | 0:518ad5d26088 | 27 | nDC = 0; // command write |
HarryChen | 0:518ad5d26088 | 28 | SPI_Write(command); |
HarryChen | 0:518ad5d26088 | 29 | nCS = 1; |
HarryChen | 0:518ad5d26088 | 30 | } |
HarryChen | 0:518ad5d26088 | 31 | |
HarryChen | 0:518ad5d26088 | 32 | void SPI4W_WRITEDATA(unsigned char data) { |
HarryChen | 0:518ad5d26088 | 33 | nCS = 0; |
HarryChen | 0:518ad5d26088 | 34 | nDC = 1; // data write |
HarryChen | 0:518ad5d26088 | 35 | SPI_Write(data); |
HarryChen | 0:518ad5d26088 | 36 | nCS = 1; |
HarryChen | 0:518ad5d26088 | 37 | } |
HarryChen | 0:518ad5d26088 | 38 | |
HarryChen | 0:518ad5d26088 | 39 | static void lcd_chkstatus(void) { |
HarryChen | 0:518ad5d26088 | 40 | unsigned char busy; |
HarryChen | 0:518ad5d26088 | 41 | do { |
HarryChen | 0:518ad5d26088 | 42 | SPI4W_WRITECOM(0x71); |
HarryChen | 0:518ad5d26088 | 43 | busy = busyPin; |
HarryChen | 0:518ad5d26088 | 44 | busy = !(busy & 0x01); |
HarryChen | 0:518ad5d26088 | 45 | } while (busy); |
HarryChen | 0:518ad5d26088 | 46 | wait(0.2); |
HarryChen | 0:518ad5d26088 | 47 | } |
HarryChen | 0:518ad5d26088 | 48 | |
HarryChen | 0:518ad5d26088 | 49 | static void EPD_W21_Init(void) { |
HarryChen | 0:518ad5d26088 | 50 | // BS tied to GND |
HarryChen | 0:518ad5d26088 | 51 | // nBS_L; //4 wire spi mode selected |
HarryChen | 0:518ad5d26088 | 52 | |
HarryChen | 0:518ad5d26088 | 53 | nRST = 0; //module reset |
HarryChen | 0:518ad5d26088 | 54 | wait(0.1); |
HarryChen | 0:518ad5d26088 | 55 | nRST = 1;; |
HarryChen | 0:518ad5d26088 | 56 | wait(0.1); |
HarryChen | 0:518ad5d26088 | 57 | |
HarryChen | 0:518ad5d26088 | 58 | } |
HarryChen | 0:518ad5d26088 | 59 | |
HarryChen | 0:518ad5d26088 | 60 | void color_bar_display (unsigned char k) { |
HarryChen | 0:518ad5d26088 | 61 | unsigned long int i; |
HarryChen | 0:518ad5d26088 | 62 | unsigned char j, temp1, temp2; |
HarryChen | 0:518ad5d26088 | 63 | |
HarryChen | 0:518ad5d26088 | 64 | if (k == 0) { |
HarryChen | 0:518ad5d26088 | 65 | SPI4W_WRITECOM(0x10); //开始传输图像 |
HarryChen | 0:518ad5d26088 | 66 | for (i = 0; i < 30720; i++) { |
HarryChen | 0:518ad5d26088 | 67 | // temp1 = G_Ultrachip1[i]; |
HarryChen | 0:518ad5d26088 | 68 | temp1 = 0xff; // all black |
HarryChen | 0:518ad5d26088 | 69 | for (j = 0; j < 8; j++) { |
HarryChen | 0:518ad5d26088 | 70 | if (temp1 & 0x80) |
HarryChen | 0:518ad5d26088 | 71 | temp2 = 0x00; |
HarryChen | 0:518ad5d26088 | 72 | else |
HarryChen | 0:518ad5d26088 | 73 | temp2 = 0x03; |
HarryChen | 0:518ad5d26088 | 74 | |
HarryChen | 0:518ad5d26088 | 75 | temp2 <<= 4; |
HarryChen | 0:518ad5d26088 | 76 | temp1 <<= 1; |
HarryChen | 0:518ad5d26088 | 77 | j++; |
HarryChen | 0:518ad5d26088 | 78 | |
HarryChen | 0:518ad5d26088 | 79 | if (temp1 & 0x80) |
HarryChen | 0:518ad5d26088 | 80 | temp2 |= 0x00; |
HarryChen | 0:518ad5d26088 | 81 | else |
HarryChen | 0:518ad5d26088 | 82 | temp2 |= 0x03; |
HarryChen | 0:518ad5d26088 | 83 | |
HarryChen | 0:518ad5d26088 | 84 | temp1 <<= 1; |
HarryChen | 0:518ad5d26088 | 85 | |
HarryChen | 0:518ad5d26088 | 86 | SPI4W_WRITEDATA(temp2); |
HarryChen | 0:518ad5d26088 | 87 | |
HarryChen | 0:518ad5d26088 | 88 | } |
HarryChen | 0:518ad5d26088 | 89 | |
HarryChen | 0:518ad5d26088 | 90 | } |
HarryChen | 0:518ad5d26088 | 91 | |
HarryChen | 0:518ad5d26088 | 92 | } |
HarryChen | 0:518ad5d26088 | 93 | if (k == 1) { |
HarryChen | 0:518ad5d26088 | 94 | SPI4W_WRITECOM(0x10); //开始传输图像 |
HarryChen | 0:518ad5d26088 | 95 | for (i = 0; i < 30720; i++) { |
HarryChen | 0:518ad5d26088 | 96 | // temp1 = G_Ultrachip2[i]; |
HarryChen | 0:518ad5d26088 | 97 | temp1 = (i & 1) ? 0xff : 0; |
HarryChen | 0:518ad5d26088 | 98 | for (j = 0; j < 8; j++) { |
HarryChen | 0:518ad5d26088 | 99 | if (temp1 & 0x80) |
HarryChen | 0:518ad5d26088 | 100 | temp2 = 0x00; |
HarryChen | 0:518ad5d26088 | 101 | else |
HarryChen | 0:518ad5d26088 | 102 | temp2 = 0x03; |
HarryChen | 0:518ad5d26088 | 103 | |
HarryChen | 0:518ad5d26088 | 104 | temp2 <<= 4; |
HarryChen | 0:518ad5d26088 | 105 | temp1 <<= 1; |
HarryChen | 0:518ad5d26088 | 106 | j++; |
HarryChen | 0:518ad5d26088 | 107 | |
HarryChen | 0:518ad5d26088 | 108 | if (temp1 & 0x80) |
HarryChen | 0:518ad5d26088 | 109 | temp2 |= 0x00; |
HarryChen | 0:518ad5d26088 | 110 | else |
HarryChen | 0:518ad5d26088 | 111 | temp2 |= 0x03; |
HarryChen | 0:518ad5d26088 | 112 | |
HarryChen | 0:518ad5d26088 | 113 | temp1 <<= 1; |
HarryChen | 0:518ad5d26088 | 114 | |
HarryChen | 0:518ad5d26088 | 115 | SPI4W_WRITEDATA(temp2); |
HarryChen | 0:518ad5d26088 | 116 | |
HarryChen | 0:518ad5d26088 | 117 | } |
HarryChen | 0:518ad5d26088 | 118 | |
HarryChen | 0:518ad5d26088 | 119 | } |
HarryChen | 0:518ad5d26088 | 120 | |
HarryChen | 0:518ad5d26088 | 121 | } |
HarryChen | 0:518ad5d26088 | 122 | |
HarryChen | 0:518ad5d26088 | 123 | } |
HarryChen | 0:518ad5d26088 | 124 | |
HarryChen | 0:518ad5d26088 | 125 | void GDE_Start(void) { |
HarryChen | 0:518ad5d26088 | 126 | EPD_W21_Init(); |
HarryChen | 0:518ad5d26088 | 127 | |
HarryChen | 0:518ad5d26088 | 128 | SPI4W_WRITECOM(0x01); |
HarryChen | 0:518ad5d26088 | 129 | SPI4W_WRITEDATA (0x37); //POWER SETTING |
HarryChen | 0:518ad5d26088 | 130 | SPI4W_WRITEDATA (0x00); |
HarryChen | 0:518ad5d26088 | 131 | |
HarryChen | 0:518ad5d26088 | 132 | SPI4W_WRITECOM(0X00); //PANNEL SETTING |
HarryChen | 0:518ad5d26088 | 133 | SPI4W_WRITEDATA(0xCF); |
HarryChen | 0:518ad5d26088 | 134 | SPI4W_WRITEDATA(0x08); |
HarryChen | 0:518ad5d26088 | 135 | |
HarryChen | 0:518ad5d26088 | 136 | SPI4W_WRITECOM(0x06); //boost设定 |
HarryChen | 0:518ad5d26088 | 137 | SPI4W_WRITEDATA (0xc7); |
HarryChen | 0:518ad5d26088 | 138 | SPI4W_WRITEDATA (0xcc); |
HarryChen | 0:518ad5d26088 | 139 | SPI4W_WRITEDATA (0x28); |
HarryChen | 0:518ad5d26088 | 140 | |
HarryChen | 0:518ad5d26088 | 141 | |
HarryChen | 0:518ad5d26088 | 142 | SPI4W_WRITECOM(0x30); //PLL setting |
HarryChen | 0:518ad5d26088 | 143 | SPI4W_WRITEDATA (0x3c); |
HarryChen | 0:518ad5d26088 | 144 | |
HarryChen | 0:518ad5d26088 | 145 | SPI4W_WRITECOM(0X41); //TEMPERATURE SETTING |
HarryChen | 0:518ad5d26088 | 146 | SPI4W_WRITEDATA(0x00); |
HarryChen | 0:518ad5d26088 | 147 | |
HarryChen | 0:518ad5d26088 | 148 | SPI4W_WRITECOM(0X50); //VCOM AND DATA INTERVAL SETTING |
HarryChen | 0:518ad5d26088 | 149 | SPI4W_WRITEDATA(0x77); |
HarryChen | 0:518ad5d26088 | 150 | |
HarryChen | 0:518ad5d26088 | 151 | SPI4W_WRITECOM(0X60); //TCON SETTING |
HarryChen | 0:518ad5d26088 | 152 | SPI4W_WRITEDATA(0x22); |
HarryChen | 0:518ad5d26088 | 153 | |
HarryChen | 0:518ad5d26088 | 154 | SPI4W_WRITECOM(0x61); //tres 单色640*384 |
HarryChen | 0:518ad5d26088 | 155 | SPI4W_WRITEDATA (0x02); //source 640 |
HarryChen | 0:518ad5d26088 | 156 | SPI4W_WRITEDATA (0x80); |
HarryChen | 0:518ad5d26088 | 157 | SPI4W_WRITEDATA (0x01); //gate 384 |
HarryChen | 0:518ad5d26088 | 158 | SPI4W_WRITEDATA (0x80); |
HarryChen | 0:518ad5d26088 | 159 | |
HarryChen | 0:518ad5d26088 | 160 | SPI4W_WRITECOM(0X82); //VDCS SETTING |
HarryChen | 0:518ad5d26088 | 161 | SPI4W_WRITEDATA(0x1E); //decide by LUT file |
HarryChen | 0:518ad5d26088 | 162 | |
HarryChen | 0:518ad5d26088 | 163 | SPI4W_WRITECOM(0xe5); //FLASH MODE |
HarryChen | 0:518ad5d26088 | 164 | SPI4W_WRITEDATA(0x03); |
HarryChen | 0:518ad5d26088 | 165 | |
HarryChen | 0:518ad5d26088 | 166 | } |
HarryChen | 0:518ad5d26088 | 167 | |
HarryChen | 0:518ad5d26088 | 168 | void GDE_ShowDemo() { |
HarryChen | 0:518ad5d26088 | 169 | for (int k = 0; k < 2; ++k) { |
HarryChen | 0:518ad5d26088 | 170 | color_bar_display(k); |
HarryChen | 0:518ad5d26088 | 171 | |
HarryChen | 0:518ad5d26088 | 172 | SPI4W_WRITECOM(0x04); //POWER ON |
HarryChen | 0:518ad5d26088 | 173 | lcd_chkstatus(); |
HarryChen | 0:518ad5d26088 | 174 | |
HarryChen | 0:518ad5d26088 | 175 | SPI4W_WRITECOM(0x12); //display refresh |
HarryChen | 0:518ad5d26088 | 176 | wait(0.1); |
HarryChen | 0:518ad5d26088 | 177 | lcd_chkstatus(); |
HarryChen | 0:518ad5d26088 | 178 | |
HarryChen | 0:518ad5d26088 | 179 | wait(1); |
HarryChen | 0:518ad5d26088 | 180 | } |
HarryChen | 0:518ad5d26088 | 181 | |
HarryChen | 0:518ad5d26088 | 182 | } |
HarryChen | 0:518ad5d26088 | 183 | |
HarryChen | 0:518ad5d26088 | 184 | void GDE_Stop() { |
HarryChen | 0:518ad5d26088 | 185 | |
HarryChen | 0:518ad5d26088 | 186 | SPI4W_WRITECOM(0x02); |
HarryChen | 0:518ad5d26088 | 187 | lcd_chkstatus(); |
HarryChen | 0:518ad5d26088 | 188 | |
HarryChen | 0:518ad5d26088 | 189 | SPI4W_WRITECOM(0x07); |
HarryChen | 0:518ad5d26088 | 190 | SPI4W_WRITEDATA(0xa5); |
HarryChen | 0:518ad5d26088 | 191 | |
HarryChen | 0:518ad5d26088 | 192 | } |