기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

2440(920T)를 사용해 삼성3.5" TFT-LCD(LMS350DF01)를 Display 하려는데 변화가 없어 문의 드립니다.

일단 BackLight는 항상 On을 유지합니다.(On/Off제어를 안합니다. 항상 켜있어야 해서요..)

전원만 올리게 되면 LCD의 상태는 LCD뒷쪽에 BackLight가 들어오고 LCD전면 액정부분은 검게 표시됩니다.

표시 된다라기 보다는 꺼져있는것 처럼 보입니다.

DataSheet에 나온대로 SPI로 레지스터를 셋팅해도 아무런 변화가 없습니다. 너무 답답하기에 여쭐곳도 없어

도움 요청 드립니다.  아래는 제가 작성한 코드입니다.

틀린 부분이 있거나 놓치고 있는 부분이 있다면 꼭~~ 조언부탁드리겠습니다.

 

void Init_Lcd( void )
{
      CLcd_InitLcd();
      CLcd_Init2440();
      delay_ms(100);
      LCD_PowerOn();
}

void CLcd_InitLcd( void )
{
      delay_ms(10);
      //LCD Reset(On)
      ResetLCD(ENABLE); //Reset On
      delay_ms(100);
      ResetLCD(DISABLE); //Reset Off
}

 

/* Samsung 3.5" TFT-LCD Mode: LMS350DF01  */
/* Number of Pixel : 320(H) x 480(V)   */
/* Interface: 24Bit RGB + SPI     */
void CLcd_Init2440(void)
{
      unsigned long clkval, dotclk, hfreq, vfreq;

     

      //dotclk = vclk = 9797760Hz about 9.8Mhz

      dotclk = f_freq * (LCD_HEIGHT+ VBPD + VFPD) * (LCD_WIDTH+ HBPD + HFPD); 
      clkval = (((HCLK / dotclk) / 2) - 1) & 0x3ff;
      hfreq = dotclk / (LCD_WIDTH + HBPD + HFPD);  //29.16Khz
      vfreq = hfreq / (LCD_HEIGHT + VBPD + VFPD);  //60hz

       

      rLCDCON1    = (clkval << 8) |LC1_VM_MODE | LC1_TFT_LCD | LC1_BPP_TFT_24 | LC1_ENVID;
      rLCDCON2    = LC2_VBPD | LC2_LINEVAL | LC2_VFPD | LC2_VSPW;
      rLCDCON3    = LC3_HBPD | LC3_HOZVAL | LC3_HFPD;
      rLCDCON4    = LC4_MVAL | LC4_HSPW;
      rLCDCON5    = LC5_BPP24BL_LSB | LC5_INVVCLK | LC5_INVVLINE | LC5_INVVFRAME | LC5_INVVD | LC5_PWREN | LC5_BSWP | LC5_HWSWP;

 

      rLCDSADDR1 = (((U32)LCDFRAMEBUFFER >> 22) << 21) | M21D((U32)LCDFRAMEBUFFER >> 1);
      rLCDSADDR2 =  (M21D(LCDFRAMEBUFFER >> 1)) + (PAGE_WIDTH + OFFSET) * (LCD_LINEVAL + 1);
      rLCDSADDR3 = (OFFSET << 11) | (PAGE_WIDTH); 

      rLCDINTMSK |= (3); //Mask LCD Sub Interrupt
      rTCONSEL &= (~7); //Disable LPC3600
      rTPAL = 0;   //Disable Temp Palette

      rLCDCON1 |= 1;  //ENVID ON(Enable LCD Out)
}

 

#define FRAME_CYCLE_TIME 25
void LCD_PowerOn(void)
{
     delay_ms(5);

      //Power on Sequence
      spi_write(0x07, 0x0000); //RESET
      delay_ms(12);

      spi_write(0x11, 0x333f);
      spi_write(0x12, 0x0f00);
      spi_write(0x13, 0x7fe2);
      spi_write(0x10, 0x460c);
      delay_ms(FRAME_CYCLE_TIME*6);

      spi_write(0x12, 0x1663);
      delay_ms(FRAME_CYCLE_TIME*5);

      spi_write(0x01, 0x0b3b);
      spi_write(0x02, 0x0300);
      spi_write(0x03, 0xc040);
      spi_write(0x08, 0x0004);
      spi_write(0x09, 0x0008);
      spi_write(0x76, 0x2213);
      spi_write(0x0b, 0x33e0);
      spi_write(0x0c, 0x0020);
      spi_write(0x76, 0x0000);
      spi_write(0x0d, 0x0007);
      spi_write(0x0e, 0x0500);
      spi_write(0x14, 0x0000);
      spi_write(0x15, 0x0803);
      spi_write(0x16, 0x0000);
      spi_write(0x30, 0x0005);
      spi_write(0x31, 0x0300);
      spi_write(0x32, 0x0300);
      spi_write(0x33, 0x0003);
      spi_write(0x34, 0x090c);
      spi_write(0x35, 0x0505);
      spi_write(0x36, 0x0001);
      spi_write(0x37, 0x0303);
      spi_write(0x38, 0x0f09);
      spi_write(0x39, 0x0101);

      delay_ms(1);

      //Display On Sequence
      spi_write(0x07, 0x0001);
      delay_ms(FRAME_CYCLE_TIME*2);

      spi_write(0x07, 0x0101);
      delay_ms(FRAME_CYCLE_TIME*3);

      spi_write(0x76, 0x2213);
      spi_write(0x1c, 0x7770);
      spi_write(0x0b, 0x33e1);
      spi_write(0x76, 0x0000);
      spi_write(0x07, 0x0103);
}

 

#define Index 0x74
#define Instruction 0x76
void spi_write(U8 address, U16 data)
{
      U8 msb_data, lsb_data;
      U8 msb_add, lsb_add;

     

      msb_data = (U8)(data >> 8);
      lsb_data = (U8)(data & 0xff);

      msb_add = 0x00;
      lsb_add = address;

 

      rSPPRE1=0x5;        // PCLK=31.5Mhz, SPICLK=2.625Mhz
      rSPPIN1=(0<<2)|(1<<1)|(0<<0);          //Dis-ENMUL,SBO,Release
      rSPCON1=(0<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);        //Polling,En-SCK,Master,High,A,Normal

 

     /* Index Data RS='0' */
      ControlLCD(ENABLE);
      while(!(rSPSTA1 & 0x1));    //Check TX Ready State
       rSPTDAT1 = Index;  

      while(!(rSPSTA1 & 0x1));     //Check Tx Ready State
       rSPTDAT1 = msb_add;

      while(!(rSPSTA1 & 0x1));     //Check Tx Ready State
      rSPTDAT1 = lsb_add;

      while(!(rSPSTA1 & 0x01));    //Check Tx Ready State
      ControlLCD(DISABLE);

 

      /* Instruction Data RS='1' */
      ControlLCD(ENABLE);
      while(!(rSPSTA1 & 0x1));      //Check Tx Ready State
      rSPTDAT1 = Instruction;

      while(!(rSPSTA1 & 0x1));      //Check Tx Ready State
      rSPTDAT1 = msb_data;

      while(!(rSPSTA1 & 0x1));      //Check Tx Ready State
      rSPTDAT1 = lsb_data;

      while(!(rSPSTA1 & 0x01));      //Check Tx Ready State
      ControlLCD(DISABLE);

 

      rSPCON1&=~(1<<4);  //disable SCK
}


고도리

2011.02.23 22:26:16
*.200.239.234

aesop6410 source를 보시면 해당 LCD에 대해서 동작시켰던 것이 있습ㄴ다(GPIO로)

 

참고하시기 바랍니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
» LMS350DF01 LCD "Display On" 꼭 도와주세요 T^T [1] psukhe 2011-02-23 852

사용자 로그인