Harry Chen / EPD_GDEW075T8

Dependents:   EInkTest

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?

UserRevisionLine numberNew 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 }