//--------------------------------------------------------- /* TFT_43M snippet Program for writing to Newhaven Display 4.3" TFT using SSD1963 controller (c)2010 Curt Lagerstam - Newhaven Display International, LLC. 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); } }