Harry Chen / EPD_GDEW075T8

Dependents:   EInkTest

Revision:
0:518ad5d26088
Child:
1:6ae4383194a1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDEW075T8.cpp	Sun Oct 14 17:03:59 2018 +0000
@@ -0,0 +1,192 @@
+#include "mbed.h"
+#include "GDEW075T8.h"
+
+#define nCS_L    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET)
+#define nCS_H    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET)
+
+#define nDC_L    HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET)
+#define nDC_H    HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET)
+
+#define nRST_L   HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_RESET)
+#define nRST_H   HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET)
+
+// TODO: use real value
+DigitalOut nCS(D1);
+DigitalOut nDC(D2);
+DigitalOut nRST(D3);
+DigitalIn  busyPin(D8);
+
+SPI spi(D4, D5, D6, D7);
+
+static inline int SPI_Write(unsigned char value) {
+    return spi.write(value);
+}
+
+void SPI4W_WRITECOM(unsigned char command) {
+    nCS = 0;
+    nDC = 0;       // command write
+    SPI_Write(command);
+    nCS = 1;
+}
+
+void SPI4W_WRITEDATA(unsigned char data) {
+    nCS = 0;
+    nDC = 1;       // data write
+    SPI_Write(data);
+    nCS = 1;
+}
+
+static void lcd_chkstatus(void) {
+    unsigned char busy;
+    do {
+        SPI4W_WRITECOM(0x71);
+        busy = busyPin;
+        busy = !(busy & 0x01);
+    } while (busy);
+    wait(0.2);
+}
+
+static void EPD_W21_Init(void) {
+    // BS tied to GND
+    // nBS_L;              //4 wire spi mode selected
+
+    nRST = 0;             //module reset
+    wait(0.1);
+    nRST = 1;;
+    wait(0.1);
+
+}
+
+void color_bar_display (unsigned char k) {
+    unsigned long int i;
+    unsigned char j, temp1, temp2;
+
+    if (k == 0) {
+        SPI4W_WRITECOM(0x10);          //开始传输图像
+        for (i = 0; i < 30720; i++) {
+            // temp1 = G_Ultrachip1[i];
+            temp1 = 0xff; // all black
+            for (j = 0; j < 8; j++) {
+                if (temp1 & 0x80)
+                    temp2 = 0x00;
+                else
+                    temp2 = 0x03;
+
+                temp2 <<= 4;
+                temp1 <<= 1;
+                j++;
+
+                if (temp1 & 0x80)
+                    temp2 |= 0x00;
+                else
+                    temp2 |= 0x03;
+
+                temp1 <<= 1;
+
+                SPI4W_WRITEDATA(temp2);
+
+            }
+
+        }
+
+    }
+    if (k == 1) {
+        SPI4W_WRITECOM(0x10);          //开始传输图像
+        for (i = 0; i < 30720; i++) {
+            // temp1 = G_Ultrachip2[i];
+            temp1 = (i & 1) ? 0xff : 0;
+            for (j = 0; j < 8; j++) {
+                if (temp1 & 0x80)
+                    temp2 = 0x00;
+                else
+                    temp2 = 0x03;
+
+                temp2 <<= 4;
+                temp1 <<= 1;
+                j++;
+
+                if (temp1 & 0x80)
+                    temp2 |= 0x00;
+                else
+                    temp2 |= 0x03;
+
+                temp1 <<= 1;
+
+                SPI4W_WRITEDATA(temp2);
+
+            }
+
+        }
+
+    }
+
+}
+
+void GDE_Start(void) {
+    EPD_W21_Init();
+
+    SPI4W_WRITECOM(0x01);
+    SPI4W_WRITEDATA (0x37);     //POWER SETTING
+    SPI4W_WRITEDATA (0x00);
+
+    SPI4W_WRITECOM(0X00);           //PANNEL SETTING
+    SPI4W_WRITEDATA(0xCF);
+    SPI4W_WRITEDATA(0x08);
+
+    SPI4W_WRITECOM(0x06);         //boost设定
+    SPI4W_WRITEDATA (0xc7);
+    SPI4W_WRITEDATA (0xcc);
+    SPI4W_WRITEDATA (0x28);
+
+
+    SPI4W_WRITECOM(0x30);           //PLL setting
+    SPI4W_WRITEDATA (0x3c);
+
+    SPI4W_WRITECOM(0X41);           //TEMPERATURE SETTING
+    SPI4W_WRITEDATA(0x00);
+
+    SPI4W_WRITECOM(0X50);           //VCOM AND DATA INTERVAL SETTING
+    SPI4W_WRITEDATA(0x77);
+
+    SPI4W_WRITECOM(0X60);           //TCON SETTING
+    SPI4W_WRITEDATA(0x22);
+
+    SPI4W_WRITECOM(0x61);           //tres          单色640*384
+    SPI4W_WRITEDATA (0x02);     //source 640
+    SPI4W_WRITEDATA (0x80);
+    SPI4W_WRITEDATA (0x01);     //gate 384
+    SPI4W_WRITEDATA (0x80);
+
+    SPI4W_WRITECOM(0X82);           //VDCS SETTING
+    SPI4W_WRITEDATA(0x1E);      //decide by LUT file
+
+    SPI4W_WRITECOM(0xe5);           //FLASH MODE
+    SPI4W_WRITEDATA(0x03);
+
+}
+
+void GDE_ShowDemo() {
+    for (int k = 0; k < 2; ++k) {
+        color_bar_display(k);
+
+        SPI4W_WRITECOM(0x04);           //POWER ON
+        lcd_chkstatus();
+
+        SPI4W_WRITECOM(0x12);           //display refresh
+        wait(0.1);
+        lcd_chkstatus();
+
+        wait(1);
+    }
+
+}
+
+void GDE_Stop() {
+
+    SPI4W_WRITECOM(0x02);
+    lcd_chkstatus();
+
+    SPI4W_WRITECOM(0x07);
+    SPI4W_WRITEDATA(0xa5);
+
+}
\ No newline at end of file