Sample code for 4.3" TFT - SSD1963 controller.
//---------------------------------------------------------
/*
TFT_43M snippet
Program for writing to Newhaven Display 4.3" TFT using SSD1963 controller
(c)2010 Newhaven Display International, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
//---------------------------------------------------------
/*-------------------------------------------------------*/
/*------------------4.3"---------------------------------*/
int TFT_43M_demo(void)
{
TFT_43M_Init();
GPIO_ResetBits(GPIOC, DISP);
TFT_43M_WindowSet(0x0000,0x01df,0x0000,0x010f);
TFT_43M_Write_Command(0x2c);
GPIO_SetBits(GPIOC, RS);
for(n=0;n<54;n++){GPIO_SetBits(GPIOC, nWR);GPIO_Write(GPIOB,0x00);GPIO_ResetBits(GPIOC, nWR);}
for(n=0;n<8;n++){
f_read(&File1, Buff, 48960, &blen); //480x272xRGB = 382.5KB per screen
for(i=0;i<48960;i+=3){
GPIO_SetBits(GPIOC, nWR);
GPIO_Write(GPIOB, Buff[i+2]);
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
GPIO_Write(GPIOB, Buff[i+1]);
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
GPIO_Write(GPIOB, Buff[i]);
GPIO_ResetBits(GPIOC, nWR);
}
}
GPIO_SetBits(GPIOC, DISP);
return 1;
}
/*******************************************************************************
* Function Name : TFT_43M_Init
* Description : Initializes LCD.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void TFT_43M_Init(void)
{
GPIO_ResetBits(GPIOC, CS1);
GPIO_SetBits(GPIOC, DISP);
GPIO_SetBits(GPIOC, nRD);
GPIO_ResetBits(GPIOC, nWR);
GPIO_WriteBit(GPIOC, RES, Bit_RESET);
delay(5);
TFT_delay(10);
GPIO_WriteBit(GPIOC, RES, Bit_SET);
delay(100);
TFT_delay(10);
TFT_43M_Write_Command(0x01); //Software Reset
delay(10);
TFT_delay(10);
TFT_43M_Write_Command(0x01); //Software Reset
delay(10);
TFT_delay(10);
TFT_43M_Command_Write(0xe0,0x01); //START PLL
TFT_43M_Command_Write(0xe0,0x03); //LOCK PLL
TFT_43M_Write_Command(0xb0); //SET LCD MODE SET TFT 18Bits MODE
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data(0x08); //SET TFT MODE - 0x0c
TFT_43M_Write_Data(0x80); //SET TFT MODE & hsync+Vsync+DEN MODE
TFT_43M_Write_Data(0x01); //SET horizontal size=480-1 HightByte
TFT_43M_Write_Data(0xdf); //SET horizontal size=480-1 LowByte
TFT_43M_Write_Data(0x01); //SET vertical size=272-1 HightByte
TFT_43M_Write_Data(0x0f); //SET vertical size=272-1 LowByte
TFT_43M_Write_Data(0x00); //SET even/odd line RGB seq.=RGB
TFT_43M_Command_Write(0xf0,0x00); //SET pixel data I/F format=8bit
TFT_43M_Command_Write(0x3a,0x60); // SET R G B format = 6 6 6
TFT_43M_Write_Command(0xe6); //SET PCLK freq=4.94MHz ; pixel clock frequency
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data(0x01); //02
TFT_43M_Write_Data(0x45); //ff
TFT_43M_Write_Data(0x47); //ff
TFT_43M_Write_Command(0xb4); //SET HBP,
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data(0x02); //SET HSYNC Total=600
TFT_43M_Write_Data(0x0d);
TFT_43M_Write_Data(0x00); //SET HBP 68
TFT_43M_Write_Data(0x2b);
TFT_43M_Write_Data(0x28); //SET VBP 16=15+1
TFT_43M_Write_Data(0x00); //SET Hsync pulse start position
TFT_43M_Write_Data(0x00);
TFT_43M_Write_Data(0x00); //SET Hsync pulse subpixel start position
TFT_43M_Write_Command(0xb6); //SET VBP,
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data(0x01); //SET Vsync total=360
TFT_43M_Write_Data(0x1d);
TFT_43M_Write_Data(0x00); //SET VBP=19
TFT_43M_Write_Data(0x0c);
TFT_43M_Write_Data(0x09); //SET Vsync pulse 8=7+1
TFT_43M_Write_Data(0x00); //SET Vsync pulse start position
TFT_43M_Write_Data(0x00);
TFT_43M_Write_Command(0x2a); //SET column address
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data(0x00); //SET start column address=0
TFT_43M_Write_Data(0x00);
TFT_43M_Write_Data(0x01); //SET end column address=479
TFT_43M_Write_Data(0xdf);
TFT_43M_Write_Command(0x2b); //SET page address
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data(0x00); //SET start page address=0
TFT_43M_Write_Data(0x00);
TFT_43M_Write_Data(0x01); //SET end page address=271
TFT_43M_Write_Data(0x0f);
TFT_43M_Write_Command(0x13); //SET normal mode
TFT_43M_Write_Command(0x38); //SET normal mode
TFT_43M_Write_Command(0x29); //SET display on
}
void TFT_43M_Write_Command(unsigned char command)
{
GPIO_Write(GPIOB, command);
GPIO_ResetBits(GPIOC, RS);
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
}
void TFT_43M_Write_Data(unsigned char data1)
{
GPIO_Write(GPIOB, data1);
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
}
void TFT_43M_Command_Write(unsigned char REG,unsigned char VALUE)
{
TFT_43M_Write_Command(REG);
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data(VALUE);
}
void TFT_43M_SendData(unsigned long color)
{
GPIO_SetBits(GPIOC, RS);
GPIO_Write(GPIOB, (color>>16));
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
GPIO_Write(GPIOB, (color>>8));
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
GPIO_Write(GPIOB, (color));
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
}
void TFT_43M_WindowSet(unsigned int s_x,unsigned int e_x,unsigned int s_y,unsigned int e_y)
{
TFT_43M_Write_Command(0x2a); //SET page address
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data((s_x)>>8); //SET start page address=0
TFT_43M_Write_Data(s_x);
TFT_43M_Write_Data((e_x)>>8); //SET end page address=319
TFT_43M_Write_Data(e_x);
TFT_43M_Write_Command(0x2b); //SET column address
GPIO_SetBits(GPIOC, RS);
TFT_43M_Write_Data((s_y)>>8); //SET start column address=0
TFT_43M_Write_Data(s_y);
TFT_43M_Write_Data((e_y)>>8); //SET end column address=239
TFT_43M_Write_Data(e_y);
}
void TFT_43M_FULL_ON(unsigned long dat)
{
unsigned long x;
TFT_43M_WindowSet(0x0000,0x01df,0x0000,0x010f);
TFT_43M_Write_Command(0x2c);
for(x=0;x<130560;x++)
{
GPIO_SetBits(GPIOC, RS);
GPIO_Write(GPIOB, (dat>>16));
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
GPIO_Write(GPIOB, (dat>>8));
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
GPIO_Write(GPIOB, (dat));
GPIO_ResetBits(GPIOC, nWR);
GPIO_SetBits(GPIOC, nWR);
}
}