Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdint.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <getopt.h>
- #include <fcntl.h>
- #include <sys/ioctl.h>
- #include <linux/types.h>
- static int reset_fd;
- static const char *reset = "/sys/class/gpio/gpio7/value";
- static int cs_fd;
- static const char *cs = "/sys/class/gpio/gpio105/value";
- static int sdi_fd;
- static const char *sdi = "/sys/class/gpio/gpio104/value";
- static int clk_fd;
- static const char *clk = "/sys/class/gpio/gpio102/value";
- static void pabort(const char *s)
- {
- perror(s);
- abort();
- }
- /*
- void LCD_Enter Standby_HX8369A(void)
- {
- SPI_WriteComm(0x0028); // Display off
- SPI_WriteComm(0x0010); // Enter Standby mode
- }
- void LCD_Exit Standby _HX8369A(void)
- {
- SPI_WriteComm(0x11); // Standby out
- Delay(60);
- SPI_WriteComm(0x29); // Display on
- }
- */
- void SPI_WriteComm(unsigned char i)
- {
- unsigned char n;
- write(cs_fd,"0",1);
- write(sdi_fd,"0",1);
- write(clk_fd,"0",1);
- write(clk_fd,"1",1);
- for(n=0; n<8; n++)
- {
- if(i&0x80) write(sdi_fd,"1",1);
- else write(sdi_fd,"0",1);
- i<<= 1;
- write(clk_fd,"0",1);
- write(clk_fd,"1",1);
- }
- write(cs_fd,"1",1);
- }
- void SPI_WriteData(unsigned char i)
- {
- unsigned char n;
- write(cs_fd,"0",1);
- write(sdi_fd,"1",1);
- write(clk_fd,"0",1);
- write(clk_fd,"1",1);
- for(n=0; n<8; n++)
- {
- if(i&0x80) write(sdi_fd,"1",1);
- else write(sdi_fd,"0",1);
- i<<= 1;
- write(clk_fd,"0",1);
- write(clk_fd,"1",1);
- }
- write(cs_fd,"1",1);
- }
- int main(int argc, char *argv[])
- {
- unsigned char i;
- int ret = 0;
- // Open the pin files
- reset_fd = open(reset,O_RDWR);
- if (reset_fd < 0)
- pabort("lcd reset pin unavailable");
- cs_fd = open(cs,O_RDWR);
- if (cs_fd < 0)
- pabort("lcd cs pin unavailable");
- sdi_fd = open(sdi,O_RDWR);
- if (sdi_fd < 0)
- pabort("lcd sdi pin unavailable");
- clk_fd = open(clk,O_RDWR);
- if (clk_fd < 0)
- pabort("lcd reset pin unavailable");
- // VCI=2.8V -- Actually 3.3 on our setup
- //************* Reset LCD Driver ****************//
- write(reset_fd,"1",1);
- usleep(1000); // Delay 1ms
- write(reset_fd,"0",1);
- usleep(10000); // Delay 10ms // This delay time is necessary
- write(reset_fd,"1",1);
- usleep(120000); // Delay 120 ms
- //************* Start Initial Sequence **********//
- SPI_WriteComm(0xB9); //Set_EXTC
- SPI_WriteData(0xFF);
- SPI_WriteData(0x83);
- SPI_WriteData(0x69);
- SPI_WriteComm(0xB1); //Set Power
- SPI_WriteData(0x01);
- SPI_WriteData(0x00);
- SPI_WriteData(0x34);
- SPI_WriteData(0x06);
- SPI_WriteData(0x00);
- SPI_WriteData(0x0F);
- SPI_WriteData(0x0F);
- SPI_WriteData(0x2A);
- SPI_WriteData(0x32);
- SPI_WriteData(0x3F);
- SPI_WriteData(0x3F);
- SPI_WriteData(0x07);
- SPI_WriteData(0x23);
- SPI_WriteData(0x01);
- SPI_WriteData(0xE6);
- SPI_WriteData(0xE6);
- SPI_WriteData(0xE6);
- SPI_WriteData(0xE6);
- SPI_WriteData(0xE6);
- SPI_WriteComm(0xB2); // SET Display 480x800
- SPI_WriteData(0x00);
- SPI_WriteData(0x2B);
- SPI_WriteData(0x0A); // back porch
- SPI_WriteData(0x0A); // front porch
- SPI_WriteData(0x70);
- SPI_WriteData(0x00);
- SPI_WriteData(0xFF);
- SPI_WriteData(0x00);
- SPI_WriteData(0x00);
- SPI_WriteData(0x00);
- SPI_WriteData(0x00);
- SPI_WriteData(0x03);
- SPI_WriteData(0x03);
- SPI_WriteData(0x00);
- SPI_WriteData(0x01);
- SPI_WriteComm(0xB4); // SET Display 480x800
- SPI_WriteData(0x01);
- SPI_WriteData(0x18);
- SPI_WriteData(0x80);
- SPI_WriteData(0x10);
- SPI_WriteData(0x01);
- SPI_WriteComm(0xB6); // SET VCOM
- SPI_WriteData(0x2C); // -1.296 V
- SPI_WriteData(0x2C); // -1.296 V
- SPI_WriteComm(0xD5); //SET GIP
- SPI_WriteData(0x00);
- SPI_WriteData(0x05);
- SPI_WriteData(0x03);
- SPI_WriteData(0x00);
- SPI_WriteData(0x01);
- SPI_WriteData(0x09);
- SPI_WriteData(0x10);
- SPI_WriteData(0x80);
- SPI_WriteData(0x37);
- SPI_WriteData(0x37);
- SPI_WriteData(0x20);
- SPI_WriteData(0x31);
- SPI_WriteData(0x46);
- SPI_WriteData(0x8A);
- SPI_WriteData(0x57);
- SPI_WriteData(0x9B);
- SPI_WriteData(0x20);
- SPI_WriteData(0x31);
- SPI_WriteData(0x46);
- SPI_WriteData(0x8A);
- SPI_WriteData(0x57);
- SPI_WriteData(0x9B);
- SPI_WriteData(0x07);
- SPI_WriteData(0x0F);
- SPI_WriteData(0x02);
- SPI_WriteData(0x00);
- SPI_WriteComm(0xE0); //SET GAMMA
- SPI_WriteData(0x00);
- SPI_WriteData(0x08);
- SPI_WriteData(0x0D);
- SPI_WriteData(0x2D);
- SPI_WriteData(0x34);
- SPI_WriteData(0x3F);
- SPI_WriteData(0x19);
- SPI_WriteData(0x38);
- SPI_WriteData(0x09);
- SPI_WriteData(0x0E);
- SPI_WriteData(0x0E);
- SPI_WriteData(0x12);
- SPI_WriteData(0x14);
- SPI_WriteData(0x12);
- SPI_WriteData(0x14);
- SPI_WriteData(0x13);
- SPI_WriteData(0x19);
- SPI_WriteData(0x00);
- SPI_WriteData(0x08);
- SPI_WriteData(0x0D);
- SPI_WriteData(0x2D);
- SPI_WriteData(0x34);
- SPI_WriteData(0x3F);
- SPI_WriteData(0x19);
- SPI_WriteData(0x38);
- SPI_WriteData(0x09);
- SPI_WriteData(0x0E);
- SPI_WriteData(0x0E);
- SPI_WriteData(0x12);
- SPI_WriteData(0x14);
- SPI_WriteData(0x12);
- SPI_WriteData(0x14);
- SPI_WriteData(0x13);
- SPI_WriteData(0x19);
- SPI_WriteComm(0xC1); //set DGC
- SPI_WriteData(0x01); //enable DGC function
- SPI_WriteData(0x02); //SET R-GAMMA
- SPI_WriteData(0x08);
- SPI_WriteData(0x12);
- SPI_WriteData(0x1A);
- SPI_WriteData(0x22);
- SPI_WriteData(0x2A);
- SPI_WriteData(0x31);
- SPI_WriteData(0x36);
- SPI_WriteData(0x3F);
- SPI_WriteData(0x48);
- SPI_WriteData(0x51);
- SPI_WriteData(0x58);
- SPI_WriteData(0x60);
- SPI_WriteData(0x68);
- SPI_WriteData(0x70);
- SPI_WriteData(0x78);
- SPI_WriteData(0x80);
- SPI_WriteData(0x88);
- SPI_WriteData(0x90);
- SPI_WriteData(0x98);
- SPI_WriteData(0xA0);
- SPI_WriteData(0xA7);
- SPI_WriteData(0xAF);
- SPI_WriteData(0xB6);
- SPI_WriteData(0xBE);
- SPI_WriteData(0xC7);
- SPI_WriteData(0xCE);
- SPI_WriteData(0xD6);
- SPI_WriteData(0xDE);
- SPI_WriteData(0xE6);
- SPI_WriteData(0xEF);
- SPI_WriteData(0xF5);
- SPI_WriteData(0xFB);
- SPI_WriteData(0xFC);
- SPI_WriteData(0xFE);
- SPI_WriteData(0x8C);
- SPI_WriteData(0xA4);
- SPI_WriteData(0x19);
- SPI_WriteData(0xEC);
- SPI_WriteData(0x1B);
- SPI_WriteData(0x4C);
- SPI_WriteData(0x40);
- SPI_WriteData(0x02); //SET G-Gamma
- SPI_WriteData(0x08);
- SPI_WriteData(0x12);
- SPI_WriteData(0x1A);
- SPI_WriteData(0x22);
- SPI_WriteData(0x2A);
- SPI_WriteData(0x31);
- SPI_WriteData(0x36);
- SPI_WriteData(0x3F);
- SPI_WriteData(0x48);
- SPI_WriteData(0x51);
- SPI_WriteData(0x58);
- SPI_WriteData(0x60);
- SPI_WriteData(0x68);
- SPI_WriteData(0x70);
- SPI_WriteData(0x78);
- SPI_WriteData(0x80);
- SPI_WriteData(0x88);
- SPI_WriteData(0x90);
- SPI_WriteData(0x98);
- SPI_WriteData(0xA0);
- SPI_WriteData(0xA7);
- SPI_WriteData(0xAF);
- SPI_WriteData(0xB6);
- SPI_WriteData(0xBE);
- SPI_WriteData(0xC7);
- SPI_WriteData(0xCE);
- SPI_WriteData(0xD6);
- SPI_WriteData(0xDE);
- SPI_WriteData(0xE6);
- SPI_WriteData(0xEF);
- SPI_WriteData(0xF5);
- SPI_WriteData(0xFB);
- SPI_WriteData(0xFC);
- SPI_WriteData(0xFE);
- SPI_WriteData(0x8C);
- SPI_WriteData(0xA4);
- SPI_WriteData(0x19);
- SPI_WriteData(0xEC);
- SPI_WriteData(0x1B);
- SPI_WriteData(0x4C);
- SPI_WriteData(0x40);
- SPI_WriteData(0x02); //SET B-Gamma
- SPI_WriteData(0x08);
- SPI_WriteData(0x12);
- SPI_WriteData(0x1A);
- SPI_WriteData(0x22);
- SPI_WriteData(0x2A);
- SPI_WriteData(0x31);
- SPI_WriteData(0x36);
- SPI_WriteData(0x3F);
- SPI_WriteData(0x48);
- SPI_WriteData(0x51);
- SPI_WriteData(0x58);
- SPI_WriteData(0x60);
- SPI_WriteData(0x68);
- SPI_WriteData(0x70);
- SPI_WriteData(0x78);
- SPI_WriteData(0x80);
- SPI_WriteData(0x88);
- SPI_WriteData(0x90);
- SPI_WriteData(0x98);
- SPI_WriteData(0xA0);
- SPI_WriteData(0xA7);
- SPI_WriteData(0xAF);
- SPI_WriteData(0xB6);
- SPI_WriteData(0xBE);
- SPI_WriteData(0xC7);
- SPI_WriteData(0xCE);
- SPI_WriteData(0xD6);
- SPI_WriteData(0xDE);
- SPI_WriteData(0xE6);
- SPI_WriteData(0xEF);
- SPI_WriteData(0xF5);
- SPI_WriteData(0xFB);
- SPI_WriteData(0xFC);
- SPI_WriteData(0xFE);
- SPI_WriteData(0x8C);
- SPI_WriteData(0xA4);
- SPI_WriteData(0x19);
- SPI_WriteData(0xEC);
- SPI_WriteData(0x1B);
- SPI_WriteData(0x4C);
- SPI_WriteData(0x40);
- SPI_WriteComm(0x36); //Set_address_mode
- SPI_WriteData(0x20);
- SPI_WriteComm(0x3A); //Set_pixel_format
- SPI_WriteData(0x66); //18 Bit
- //Set_LUT
- SPI_WriteComm(0x2D);
- for (i=0; i<=63; i++)
- SPI_WriteData(i*4); //Set_R_LUT
- for (i=0; i<=63; i++)
- SPI_WriteData(i*4); //Set_G_LUT
- for (i=0; i<=63; i++)
- SPI_WriteData(i*4); //Set_B_LUT
- SPI_WriteComm(0x11); //Sleep Out
- usleep(120000);
- SPI_WriteComm(0x29); //Display On
- SPI_WriteComm(0x2C); //display on
- // Close all the pin files
- close(reset_fd);
- close(cs_fd);
- close(sdi_fd);
- close(clk_fd);
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement