SPI LCD屏驅動
阿新 • • 發佈:2019-01-08
因為硬體的限制 SPI 只有三根線(cs clk sdi)
unsigned int spi_read_24date(unsigned char reg)
{
char i;
unsigned int buff=0;
set_spi_cs(0);
udelay(200);
set_spi_clk(0);
set_spi_sdi(0);
set_spi_clk(1);
udelay(100);
for(i=0; i < 8; i++)
{
set_spi_clk(0);
udelay(200);
if (reg & 0x80)
set_spi_sdi(1);
else
set_spi_sdi(0);
udelay(100);
set_spi_clk(1);
udelay(200);
reg <<= 1;
}
spi_sdi_set_input(1);//把sdi口設定為input
udelay(200);
set_spi_clk(0);
udelay(300);
set_spi_clk(1);
udelay(200);
for (i=0; i < 24; i++)
{
set_spi_clk(0);
udelay(200);
if(spi_sdi_get_input(1))
buff |= 0x800000 >> i;
udelay(100);
set_spi_clk(1);
udelay(200);
}
}
void spi_write_date(unsigned char data)
{
char i;
set_spi_cs(0);
udelay(200);
set _spi_clk(0);
set_spi_sdi(1);
set_spi_clk(1);
udelay(100);
for(i=0; i < 8; i++)
{
set_spi_clk(0);
udelay(200);
if(cmd & 0x80)
set_spi_sdi(1);
else
set_spi_sdi(0);
udelay(100);
set_spi_clk(1);
udelay(200);
cmd <<= 1;
}
set_spi_cs(1);
}
void spi_write_cmd(unsigned char cmd)
{
char i;
set_spi_cs(0);
udelay(200);
set_spi_clk(0);
set_spi_sdi(0);
set_spi_clk(1);
udelay(100);
for(i=0; i < 8; i++)
{
set_spi_clk(0);
udelay(200);
if(cmd & 0x80)
set_spi_sdi(1);
else
set_spi_sdi(0);
udelay(100);
set_spi_clk(1);
udelay(200);
cmd <<= 1;
}
set_spi_cs(1);
}
void init_7789v(void)
{
spi_write_cmd(0x01);
udelay(2000);//Delay 120ms
spi_write_cmd(0x11);
udelay(2000);//Delay 120ms
//---------------------Display Setting------------------------//
//-----------------------ST7789V Frame rate setting-----------------//
spi_write_cmd(0xb2);
spi_write_date(0x0c);
spi_write_date(0x0c);
spi_write_date(0x00);
spi_write_date(0x33);
spi_write_date(0x33);
spi_write_cmd(0xb7);
spi_write_date(0x35); //VGH=13V, VGL=-10.4V
//-------------------------------------------------//
spi_write_cmd(0xbb);
spi_write_date(0x19);
spi_write_cmd(0xc0);
spi_write_date(0x2c);
spi_write_cmd(0xc2);
spi_write_date(0x01);
spi_write_cmd(0xc3);
spi_write_date(0x12);
spi_write_cmd(0xc4);
spi_write_date(0x20);
spi_write_cmd(0xc6);
spi_write_date(0x0f);
spi_write_cmd(0xd0);
spi_write_date(0xa4);
spi_write_date(0xa1);
//----------------------------------------//
spi_write_cmd(0xe0); //gamma setting
spi_write_date(0xd0);
spi_write_date(0x04);
spi_write_date(0x0d);
spi_write_date(0x11);
spi_write_date(0x13);
spi_write_date(0x2b);
spi_write_date(0x3f);
spi_write_date(0x54);
spi_write_date(0x4c);
spi_write_date(0x18);
spi_write_date(0x0d);
spi_write_date(0x0b);
spi_write_date(0x1f);
spi_write_date(0x23);
spi_write_cmd(0xe1);
spi_write_date(0xd0);
spi_write_date(0x04);
spi_write_date(0x0c);
spi_write_date(0x11);
spi_write_date(0x13);
spi_write_date(0x2c);
spi_write_date(0x3f);
spi_write_date(0x44);
spi_write_date(0x51);
spi_write_date(0x2f);
spi_write_date(0x1f);
spi_write_date(0x1f);
spi_write_date(0x20);
spi_write_date(0x23);
spi_write_cmd(0xb0);
spi_write_date(0x11);
spi_write_date(0xf0);
spi_write_cmd(0xb1);
spi_write_date(0xc0);
spi_write_date(0x02);
spi_write_date(0x14);
spi_write_cmd(0x36);
spi_write_date(0x14);
spi_write_cmd(0x3a);
spi_write_date(0x66);
spi_write_cmd(0x29); //display on
}