377 lines
7.7 KiB
C
377 lines
7.7 KiB
C
/*
|
|
* ST7701S LCD Display.
|
|
*
|
|
* LCD Type: AMT TFT
|
|
* Display Format: 320(RGB)*960
|
|
* Input Data: RGB 16bits(RGB565)
|
|
*/
|
|
|
|
#include "FreeRTOS.h"
|
|
#include "board.h"
|
|
#include "chip.h"
|
|
|
|
|
|
//3 lines mode spi.
|
|
#define ST7701S_GPIO_SPI_CS 23
|
|
#define ST7701S_GPIO_SPI_SCL 24
|
|
#define ST7701S_GPIO_SPI_SDA 25
|
|
#define ST7701S_GPIO_SPI_RST 26
|
|
|
|
#define ST7701S_DELAY udelay(5)
|
|
|
|
|
|
static void SPI_SendData(unsigned char value)
|
|
{
|
|
int i;
|
|
|
|
for(i=0; i<8; i++)
|
|
{
|
|
if(value & 0x80)
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SDA, 1); //SDA=1
|
|
else
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SDA, 0); //SDA=0
|
|
|
|
value<<= 1;
|
|
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SCL, 0); //SCL=0
|
|
ST7701S_DELAY;
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SCL, 1); //SCL=1
|
|
ST7701S_DELAY;
|
|
}
|
|
}
|
|
|
|
static void SPI_WriteComm(unsigned char value)
|
|
{
|
|
gpio_direction_output(ST7701S_GPIO_SPI_CS, 0); //CS=0
|
|
|
|
//D/CX = 0
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SDA, 0); //SDA=0
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SCL, 0); //SCL=0
|
|
ST7701S_DELAY;
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SCL, 1); //SCL=1
|
|
ST7701S_DELAY;
|
|
|
|
//Command data.
|
|
SPI_SendData(value);
|
|
|
|
gpio_direction_output(ST7701S_GPIO_SPI_CS, 1); //CS=1
|
|
ST7701S_DELAY;
|
|
}
|
|
|
|
static void SPI_WriteData(unsigned char value)
|
|
{
|
|
gpio_direction_output(ST7701S_GPIO_SPI_CS, 0); //CS=0
|
|
|
|
//D/CX = 1
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SDA, 1); //SDA=1
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SCL, 0); //SCL=0
|
|
ST7701S_DELAY;
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SCL, 1); //SCL=1
|
|
ST7701S_DELAY;
|
|
|
|
//Parameter data.
|
|
SPI_SendData(value);
|
|
|
|
gpio_direction_output(ST7701S_GPIO_SPI_CS, 1); //CS=1
|
|
ST7701S_DELAY;
|
|
}
|
|
|
|
static void st7701s_reg_init(void)
|
|
{
|
|
SPI_WriteComm (0xFF);
|
|
SPI_WriteData (0x77);
|
|
SPI_WriteData (0x01);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x13);
|
|
|
|
SPI_WriteComm (0xEF);
|
|
SPI_WriteData (0x08);
|
|
|
|
SPI_WriteComm (0xFF);
|
|
SPI_WriteData (0x77);
|
|
SPI_WriteData (0x01);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x10);
|
|
|
|
SPI_WriteComm (0xC0);
|
|
SPI_WriteData (0x77);
|
|
SPI_WriteData (0x00);
|
|
|
|
SPI_WriteComm (0xC1); //proch control.
|
|
SPI_WriteData (0x09); //vbp
|
|
SPI_WriteData (0x08); //vfp
|
|
|
|
SPI_WriteComm (0xC2); //inv
|
|
#if 0
|
|
SPI_WriteData (0x01);
|
|
#else
|
|
SPI_WriteData (0x07);
|
|
#endif
|
|
SPI_WriteData (0x02);
|
|
|
|
//default:0x00, DE mode.
|
|
SPI_WriteComm (0xC3); //RGB control.
|
|
SPI_WriteData (0x02); //82 HVmode 02 DEmode
|
|
|
|
#if 0 //default:0x00
|
|
SPI_WriteComm (0xC7); //add. Source direction control.
|
|
SPI_WriteData (0x04); //0x00:Source form 0 to 479, 0x04:from 479 to 0.
|
|
#endif
|
|
|
|
SPI_WriteComm (0xCC);
|
|
SPI_WriteData (0x10);
|
|
|
|
SPI_WriteComm (0xB0);
|
|
SPI_WriteData (0x40);
|
|
SPI_WriteData (0x14);
|
|
SPI_WriteData (0x59);
|
|
SPI_WriteData (0x10);
|
|
SPI_WriteData (0x12);
|
|
SPI_WriteData (0x08);
|
|
SPI_WriteData (0x03);
|
|
SPI_WriteData (0x09);
|
|
SPI_WriteData (0x05);
|
|
SPI_WriteData (0x1E);
|
|
SPI_WriteData (0x05);
|
|
SPI_WriteData (0x14);
|
|
SPI_WriteData (0x10);
|
|
SPI_WriteData (0x68);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0x15);
|
|
|
|
SPI_WriteComm (0xB1);
|
|
SPI_WriteData (0x40);
|
|
SPI_WriteData (0x08);
|
|
SPI_WriteData (0x53);
|
|
SPI_WriteData (0x09);
|
|
SPI_WriteData (0x11);
|
|
SPI_WriteData (0x09);
|
|
SPI_WriteData (0x02);
|
|
SPI_WriteData (0x07);
|
|
SPI_WriteData (0x09);
|
|
SPI_WriteData (0x1A);
|
|
SPI_WriteData (0x04);
|
|
SPI_WriteData (0x12);
|
|
SPI_WriteData (0x12);
|
|
SPI_WriteData (0x64);
|
|
SPI_WriteData (0x29);
|
|
SPI_WriteData (0x29);
|
|
|
|
SPI_WriteComm (0xFF);
|
|
SPI_WriteData (0x77);
|
|
SPI_WriteData (0x01);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x11);
|
|
|
|
SPI_WriteComm (0xB0);
|
|
SPI_WriteData (0x6D); //6D
|
|
|
|
SPI_WriteComm (0xB1); //vcom
|
|
SPI_WriteData (0x1D);
|
|
|
|
SPI_WriteComm (0xB2);
|
|
SPI_WriteData (0x87);
|
|
|
|
SPI_WriteComm (0xB3);
|
|
SPI_WriteData (0x80);
|
|
|
|
SPI_WriteComm (0xB5);
|
|
SPI_WriteData (0x49);
|
|
|
|
SPI_WriteComm (0xB7);
|
|
SPI_WriteData (0x85);
|
|
|
|
SPI_WriteComm (0xB8);
|
|
SPI_WriteData (0x20);
|
|
|
|
SPI_WriteComm (0xC1);
|
|
SPI_WriteData (0x78);
|
|
|
|
SPI_WriteComm (0xC2);
|
|
SPI_WriteData (0x78);
|
|
|
|
SPI_WriteComm (0xD0);
|
|
SPI_WriteData (0x88);
|
|
|
|
SPI_WriteComm (0xE0);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x02);
|
|
|
|
SPI_WriteComm (0xE1);
|
|
SPI_WriteData (0x02);
|
|
SPI_WriteData (0x8C);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x03);
|
|
SPI_WriteData (0x8C);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0x33);
|
|
|
|
SPI_WriteComm (0xE2);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0xC9);
|
|
SPI_WriteData (0x3C);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0xCA);
|
|
SPI_WriteData (0x3C);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
|
|
SPI_WriteComm (0xE3);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0x33);
|
|
|
|
SPI_WriteComm (0xE4);
|
|
SPI_WriteData (0x44);
|
|
SPI_WriteData (0x44);
|
|
|
|
SPI_WriteComm (0xE5);
|
|
SPI_WriteData (0x05);
|
|
SPI_WriteData (0xCD);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x01);
|
|
SPI_WriteData (0xC9);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x07);
|
|
SPI_WriteData (0xCF);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x03);
|
|
SPI_WriteData (0xCB);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
|
|
SPI_WriteComm (0xE6);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x33);
|
|
SPI_WriteData (0x33);
|
|
|
|
SPI_WriteComm (0xE7);
|
|
SPI_WriteData (0x44);
|
|
SPI_WriteData (0x44);
|
|
|
|
SPI_WriteComm (0xE8);
|
|
SPI_WriteData (0x06);
|
|
SPI_WriteData (0xCE);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x02);
|
|
SPI_WriteData (0xCA);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x08);
|
|
SPI_WriteData (0xD0);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x04);
|
|
SPI_WriteData (0xCC);
|
|
SPI_WriteData (0x82);
|
|
SPI_WriteData (0x82);
|
|
|
|
SPI_WriteComm (0xEB);
|
|
SPI_WriteData (0x08);
|
|
SPI_WriteData (0x01);
|
|
SPI_WriteData (0xE4);
|
|
SPI_WriteData (0xE4);
|
|
SPI_WriteData (0x88);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x40);
|
|
|
|
SPI_WriteComm (0xEC);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
|
|
SPI_WriteComm (0xED);
|
|
SPI_WriteData (0xFF);
|
|
SPI_WriteData (0xF0);
|
|
SPI_WriteData (0x07);
|
|
SPI_WriteData (0x65);
|
|
SPI_WriteData (0x4F);
|
|
SPI_WriteData (0xFC);
|
|
SPI_WriteData (0xC2);
|
|
SPI_WriteData (0x2F);
|
|
SPI_WriteData (0xF2);
|
|
SPI_WriteData (0x2C);
|
|
SPI_WriteData (0xCF);
|
|
SPI_WriteData (0xF4);
|
|
SPI_WriteData (0x56);
|
|
SPI_WriteData (0x70);
|
|
SPI_WriteData (0x0F);
|
|
SPI_WriteData (0xFF);
|
|
|
|
SPI_WriteComm (0xEF);
|
|
SPI_WriteData (0x10);
|
|
SPI_WriteData (0x0D);
|
|
SPI_WriteData (0x04);
|
|
SPI_WriteData (0x08);
|
|
SPI_WriteData (0x3F);
|
|
SPI_WriteData (0x1F);
|
|
|
|
SPI_WriteComm (0xFF);
|
|
SPI_WriteData (0x77);
|
|
SPI_WriteData (0x01);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
SPI_WriteData (0x00);
|
|
|
|
mdelay(114); //Sleep out cmd cannot be send after hw-reset for 120ms.
|
|
SPI_WriteComm (0x11); //sleep out.
|
|
|
|
SPI_WriteComm (0x35);
|
|
SPI_WriteData (0x00);
|
|
|
|
#if 0
|
|
SPI_WriteComm (0x36); //
|
|
SPI_WriteData (0x10); //bit4(0:normal scan, 1:inverse scan); bit3(0:RGB, 1:BGR), default:0x00
|
|
#endif
|
|
|
|
SPI_WriteComm (0x3A); //RGB Interface pixel format.
|
|
SPI_WriteData (0x77); //bit[4-6](101:16-bit/pixel; 110:18-bit/pixel;111:24-bit/pixel), default:0x70
|
|
|
|
//SPI_WriteComm (0x11);
|
|
//Delay(120);
|
|
|
|
SPI_WriteComm (0x29); //display on.
|
|
}
|
|
|
|
static void st7701s_hw_reset(void)
|
|
{
|
|
gpio_direction_output(ST7701S_GPIO_SPI_RST, 1);
|
|
mdelay(10);
|
|
gpio_direction_output(ST7701S_GPIO_SPI_RST, 0);
|
|
mdelay(1); //>=9us
|
|
gpio_direction_output(ST7701S_GPIO_SPI_RST, 1);
|
|
mdelay(6); //>=5ms
|
|
}
|
|
|
|
int st7701s_init(void)
|
|
{
|
|
gpio_direction_output(ST7701S_GPIO_SPI_CS, 1); //CS=1
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SCL, 1); //SCL=1
|
|
gpio_direction_output(ST7701S_GPIO_SPI_SDA, 0); //SDA=0
|
|
|
|
st7701s_hw_reset();
|
|
|
|
st7701s_reg_init();
|
|
|
|
return 0;
|
|
}
|