K20 EVM - Kinetis Cortex-M4 TFT LCD 테스트



Cortex-M4 코어를 가진 K20 EVM보를 이용하여 TFT-LCD 출력 테스트를 했다.

50Mhz에서 400x320 픽셀의 TFT LCD에 1프레임 출력하는데 18ms정도 소요된다.



[NET-EVB SM] 확장 테스트 보드를 이용하여 SD Card의 BMP이미지를 출력하도록 했다.









K20 EVM TFT LCD 출력 테스트 동영상




K20 TFT LCD 드라이버 소스코드정리
//-----------------------------------------------------------------------------
#define _SPI0_IO_INIT() PORTD_PCR0 = PORT_PCR_MUX(0x2);\
PORTD_PCR1 = PORT_PCR_MUX(0x2);\
PORTD_PCR2 = PORT_PCR_MUX(0x2);\
PORTD_PCR3 = PORT_PCR_MUX(0x2);
                                        
                                        
                                        

#define TFT_DRV_HD66791                 0
#define TFT_DRV_COM44                   1

#define LCD_LAT_BIT BIT16
#define LCD_LAT_PORT GPIOB
#define LCD_LAT_ON() sbi(LCD_LAT_PORT, LCD_LAT_BIT) 
#define LCD_LAT_OFF() cbi(LCD_LAT_PORT, LCD_LAT_BIT) 
#define LCD_DATA_LATCH() LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT BIT17
#define LCD_EN_PORT GPIOB
#define LCD_ENABLE() cbi(LCD_EN_PORT, LCD_EN_BIT) 
#define LCD_DISABLE() sbi(LCD_EN_PORT, LCD_EN_BIT) 

#define LCD_RST_BIT //BIT8
#define LCD_RST_PORT //PORTB
#define LCD_RST_ON() //Sbi(LCD_RST_PORT, LCD_RST_BIT) 
#define LCD_RST_OFF() //Cbi(LCD_RST_PORT, LCD_RST_BIT) 

#define LCD_RS_BIT BIT0
#define LCD_RS_PORT GPIOA
#define LCD_RS_OFF() cbi(LCD_RS_PORT, LCD_RS_BIT) 
#define LCD_RS_ON() sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT BIT3
#define LCD_WR_PORT GPIOA
#define LCD_WR_OFF() cbi(LCD_WR_PORT, LCD_WR_BIT) 
#define LCD_WR_ON() sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT ///BIT9
#define LCD_RD_PORT //PORTB
#define LCD_RD_OFF() //Cbi(LCD_RD_PORT, LCD_RD_BIT) 
#define LCD_RD_ON() //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT BIT3
#define LCD_BL_PORT GPIOC
#define LCD_BL_OFF() cbi(LCD_BL_PORT, LCD_BL_BIT) 
#define LCD_BL_ON() sbi(LCD_BL_PORT, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data) PORTD = (Data>>8);\
                                    LCD_DATA_LATCH();\
                                    PORTD = (Data&0xFF);

#define TFTGpioInit() SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;\
                                        SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;\
                                        SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK;\
                                        SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK;\
                                        PORTA_PCR0 = PORT_PCR_MUX(1);\
                                        PORTA_PCR3 = PORT_PCR_MUX(1);\
PORTB_PCR16 = PORT_PCR_MUX(1);\
                                        PORTB_PCR17 = PORT_PCR_MUX(1);\
                                        PORTC_PCR3 = PORT_PCR_MUX(1);\
                                        PORTD_PCR0 = PORT_PCR_MUX(1);\
                                        PORTD_PCR1 = PORT_PCR_MUX(1);\
                                        PORTD_PCR2 = PORT_PCR_MUX(1);\
                                        PORTD_PCR3 = PORT_PCR_MUX(1);\
                                        PORTD_PCR4 = PORT_PCR_MUX(1);\
                                        PORTD_PCR5 = PORT_PCR_MUX(1);\
                                        PORTD_PCR6 = PORT_PCR_MUX(1);\
                                        PORTD_PCR7 = PORT_PCR_MUX(1);\
                                        Sbi(GPIOA_PDDR, (BIT0|BIT3));\
                                        Sbi(GPIOB_PDDR, (BIT16|BIT17));\
                                        Sbi(GPIOD_PDDR, 0xFF);



adStar - SD Card 이용한 7" TFT LCD 테스트

 

 

adStar의 자장 큰 장점으로 MCU내에 TFT LCD 컨트롤러가 내장되어 있는 것이다. 때문에 7" TFT LCD도 쉽고 저렴하게 제어 할 수 있다.

 

 

adStar TFT LCD제어 초기화 코드

PORT6, PORT7, PORT8 이 TFT LCD데이터 포트 이므로 기능 설정 레지스터를 LCD 로 설정해 주면된다.

주의 사항으로 JTAG핀과 공통으로 사용하므로 개발할때 불편함이 있다. MUX칩으로 스위칭 할수 있도록 하면 좀더 쉽게 개발할수 있다.

void InitLcd()
{
 Cbi(*R_PAF5, 0xFFC0);//VSYNC,HSYNC,DISP_EN,CRTC_CLK_OUT
 BCKLIGHT_IO_INIT();
 BCKLIGHT_OFF();

 

 *R_PAF6 = 0; //LCD R
 *R_PAF7 = 0; //LCD G
 *R_PAF8 = 0; //LCD B
 
 crtc_clock_init(); 
}

 

 

LCD 종류에 따라 모드 설정이 필요한데 setscreen() 함수에서 설정 가능하다.

초기에 정상동작을 하지 않아 약간의 수정을 해 주니 잘 동작한다.

void setscreen(SCREENRES res,U32 scmode)
{
 switch(res)
 {
 case SCREEN_480x272:
  setscreenex(480,272,scmode,0x0000020D,0x0002002B,0x002D020D ,0x0000011E ,0x0002000C ,0x000E011E );
  break;
 case SCREEN_640x480:
  setscreenex(640,480,scmode,0x00000320,0x00130073,0x00A00320 ,0x0000020D ,0x0007000D ,0x002B020B );
  break;
 case SCREEN_800x480:
  //setscreenex(800,480,scmode,1000,(3<<16)|0,(24<<16)|1000 ,530 ,(23<<16)|2 ,(13<<16)|530 );
  break;
 case SCREEN_800x600:
  setscreenex(800,600,scmode,0x00000420,0x002300b0,0x01000420 ,0x00000274 ,0x0004000a ,0x001a0272 );
  break;
 default:
  debugstring("invalid screen size\r\n");
  return;
 }
}


void setscreenex(U32 width,U32 height,U32 scmode,U32 ht,U32 hs, U32 ha, U32 vt, U32 vs, U32 va)
{
 *R_CRTHT  = ht; //Horizontal Active와 Blank구간을 포함한 Horizontal Total Scan Value
 *R_CRTHS  = hs; //Horizontal Sync 구간의 Start(End) value
 *R_CRTHA  = ha; //Horizontal Active 구간의 Start(End) value
 *R_CRTVT  = vt; //Vertical Active와 blank 구간을 포함한 Vertical Total scan value
 *R_CRTVS  = vs; //Vertical Sync 구간의 Start(End) value
 *R_CRTVA  = va; //Vertical Active구간의 Start(End) value
 screen_w= width;
 screen_h = height;
 
 U32 conval=0;
 debugprintf(" CRTC %d x %d Setting Done\r\n",width,height);
 if(scmode&SCREENMODE_RGB888)
 {
  debugstring("RGB888 Mode\r\n");
  screen_bpp = 32;
  conval |= (1<<13);
 }
 else
 {
  debugstring("RGB565 Mode\r\n");
  screen_bpp = 16;
  conval |= (1<<12);
 }
 conval |= (1<<4);//line pitch not align 512,1024
 *R_CRTWIDTH = screen_w;
 *R_CRTCON = conval;
 drawsetclipwindow(0,0,screen_w,screen_h);
 set_interrupt(INTNUM_FRAMESYNC,framesync_isr);
 enable_interrupt(INTNUM_FRAMESYNC,FALSE);
}

 

 

 

asStar 7" TFT LCD 테스트 동영상

sdCard를 이용하여 7" TFT LCD에 BMP영상을 출력핟록 하고 있다. jpg파일도 가능하지만 JPG->BMP 변환 속도가 느려 BMP보다는 출력속도가 느린것 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[adStar EVM] TFT-LCD 테스트

[MCU]/adStar | 2012.12.25 23:00
Posted by nexp

 [adStar EVM] TFT-LCD 테스트

 

 

 

adStar의 가장 큰 장점은 TFT-LCD 컨트롤러와 16Mbyte의 SDRAM을 내장하고 있어 LCD제어에 있어 아주 편리하다. 특히 16Mbyte의 RAM을 활용하면 이미지 처리에 있어 장점이 많다.

우선 기존 코드를 활용하여 TFT-LCD 모듈을  GPIO방식으로 제어 해 보았다. (추후 내장된 TFT-LCD컨트롤러를 활용하여 어느정도의 성능 향상이 있은지 확인 할 예정이다.)

 

400x240 한프레임 출력 시간은 GPIO방식이지만 20ms 정도로 측정된다.

 

adStar TFT-LCD 테스트 동영상

 

 

adStar TFT LCD 드라이버 코드

//-----------------------------------------------------------------------------
// TFT LCD Driver
#define TFT_DRV_HD66791     0
#define TFT_DRV_COM44     1

#define LCD_LAT_BIT      
#define LCD_LAT_PORT     
#define LCD_LAT_ON()     
#define LCD_LAT_OFF()     
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT5
#define LCD_EN_PORT      GPIO6
#define LCD_ENABLE()     cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      BIT2
#define LCD_RST_PORT     GPIO6
#define LCD_RST_OFF()     cbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_ON()     sbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT3
#define LCD_RS_PORT      GPIO6
#define LCD_RS_OFF()     cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT      BIT3
#define LCD_WR_PORT      GPIO5
#define LCD_WR_OFF()     cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      BIT2
#define LCD_RD_PORT      GPIO5
#define LCD_RD_OFF()     //cbi(*R_P2oLOW, LCD_RD_BIT)
#define LCD_RD_ON()      //sbi(*R_P2oHIGH, LCD_RD_BIT)

#define LCD_BL_BIT      BIT4
#define LCD_BL_PORT      GPIO6
#define LCD_BL_OFF()     cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      sbi(LCD_BL_PORT, LCD_BL_BIT)

#define TFTGpioInit()     *R_PAF8 = 0xFFFF;*R_GP8ODIR = 0xFF;\
          *R_PAF7 = 0xFFFF;*R_GP7ODIR = 0xFF;\
          Sbi(*R_GP6ODIR,  BIT2|BIT3|BIT4|BIT5);Sbi(*R_PAF6, GP_CFG(2)|GP_CFG(3)|GP_CFG(4)|GP_CFG(5));\
          Sbi(*R_GP5ODIR,  BIT3);Sbi(*R_PAF5, GP_CFG(3));

 

 

 

 

 

 

[TMS320C6720 EVM] TFT LCD테스트

[DSP]/DSP6000 | 2012.02.11 22:00
Posted by nexp

 [TMS320C6720 EVM] TFT LCD테스트


TMS320C6720은 최대 200Mhz까지 동작한다. 속도가 빠르기 때문에 타이밍 조절하는데 좀 고생했다.
EMIF는 SDRAM, SRAM 모두 가능한데 SARM을 위한 CS가 하나밖에 없어 보드상의 Nor Flash CS인 CS2에서 점퍼를 이용해 [LCD_EXP_EVM] 보드 의 CS로 사용했다.

TFT LCD 400x240 한프레임 출력하는데 걸리는 시간은  4.2ms정도 이고(좀더 튜닝을 하면 더 오르겠지만.. EMIF속도가 빨라 Wait Time 설정이 필요하다), 안정적인 구동을 위해 7ms 설정 했다.


TMS320C672x TFT LCD 출력 테스트 동영상




TMS320C6720 SD Card 이미지 출력 예제 동영상
역시 SPI로 SD Card제어하기 때문에 속도는 그리 빠르지 않아 보인다. NAND를 이용하여 테스트 하면 속도가 빨라지지 않을까..




TMS320C6720 TFT LCD 구동 Read/Write 함수

#define LCD_DATA       *(volatile unsigned short*)(0x90000000)

//Write Command
void Lcd_Cmd(unsigned int Data)  
{
 LCD_RS_OFF();

  _LCD_DAT_OUT(Data);

LCD_RS_ON(); 
}

//Write Data
void Lcd_Data(unsigned int Data)  
{
 _LCD_DAT_OUT(Data);
}



TMS320C6720 SD Card 드라이버코드
//-----------------------------------------------------------------------------
// SD Card HAL
#define MMC_CS_PORT      SPI0_PC3
#define MMC_CS_BIT      BIT11

#define MMC_CS_INIT()     Cbi(SPI0_PC0, MMC_CS_BIT);Sbi(SPI0_PC1, MMC_CS_BIT);\
          MMC_CS_HIGH()
          
#define MMC_CS_HIGH()     Led1Off()
#define MMC_CS_LOW()     Led1On()
//#define MMC_CS_LOW()     Cbi(MMC_CS_PORT, MMC_CS_BIT)
//#define MMC_CS_LOW()     Cbi(MMC_CS_PORT, MMC_CS_BIT)

#define MMC_ASSERT_INIT()    MMC_CS_INIT();MMC_CS_HIGH()
#define MMC_ASSERT()     MMC_CS_LOW()
#define MMC_DEASSERT()     MMC_CS_HIGH()

#define MMC_SpiInit()     SPI1_Init()
#define MMC_SendByte     SPI1_WriteReadByte
#define MMC_Send(Data)      SPI1_WriteByte(Data)
#define MMC_Recv()      SPI1_WriteReadByte(0xFF)
#define MMC_RecvP(Data)     MMC_Send(0xFF); (*(Data)=SPI1_ReadByte())
#define MMC_SPISpeed     SPI1_SetSpeed
[AT90USB1287-EX] AT90USB1287 TFT-LCD 출력 속도 테스트



16bit 240x400 한프레임 출력 시간은 140ms 정도 걸린다. 8비트 IO 제어 방식이라 빠른 속도를 기대하기는 힘들것 같다.


[AT90USB-EX] TFT LCD출력 속도 테스트 동영상






확장 포트는 표준 8bit 모드 TFT-LCD 모듈제어 포트를 연결할 수 있다.





[AT90USB-EX] TFT LCD Driver 코드
//-----------------------------------------------------------------------------
//TFT LCD Driver
#define TFT_DRV_HD66791                 0
#define TFT_DRV_COM44                   1
#define TFT_DRV_ST7735                    0

#define LCD_LAT_BIT      BIT4
#define LCD_LAT_PORT     PORTB
#define LCD_LAT_ON()     Sbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_LAT_OFF()     Cbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT6
#define LCD_EN_PORT      PORTB
#define LCD_ENABLE()     Cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      //BIT8
#define LCD_RST_PORT     //PORTB
#define LCD_RST_ON()     //Sbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_OFF()     //Cbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT7
#define LCD_RS_PORT      PORTB
#define LCD_RS_OFF()     Cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT      BIT0
#define LCD_WR_PORT      PORTE
#define LCD_WR_OFF()     Cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      Sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      BIT9
#define LCD_RD_PORT      PORTB
#define LCD_RD_OFF()     //Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      BIT5
#define LCD_BL_PORT      PORTB
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    PORTA = (Data>>8);\
                                     LCD_DATA_LATCH();\
                                     PORTA = (Data&0xFF);

#define TFTGpioInit()     Sbi(DDRB, BIT4|BIT5|BIT6|BIT7); Sbi(DDRA, 0xFF); Sbi(DDRE, BIT0);
//-----------------------------------------------------------------------------

[CANTUS-EX EVM] TFT LCD테스트 - 메모리 모드 제어


CANTUS 는 저렴한 국산 32bit MCU지만 성능이 나쁘지 않다.
메모리 제어  방식이 가능하므로 TFT LCD제어를 GPIO방식이 아니라 메모리 제어 방식으로 해 보았다.


[CANTUS-EX EVM] 보드에서 TFT LCD의 Enable 핀은 CS1( P2.5)에 할당 되어 있다.

속도 측정 결과 400x240 한프레임 출력 하는데 걸리는 시간은 16ms 정도  된다. 포트제어 방식에 비교하면 좀더 빨라진것 같다.


SRAM CS0의 메모리 설정을 위해 SxCTRL(0x80000404)  레지스터를 이용하여 설정할 수 있다.





CANTUS 512 TFT LCD 메모리 제어 방식 테스트 동영상
한프레임 출력시 4ms걸리는 TMS320028335 와 ([TMS32F28335 TFT LCD_속도측정 결과) 비교하면 좀 느린감이 있지만 SD Card를 제어에 있어 SDIO기능이 있기 때문에 더 빨라 보인다. 결론적으로 성능이나 가격 보다는 각 특정 기능에 적합한 MCU를 선정할 필요가 있는것 같다.







CANTUS TFT LCD 메모리 제어 방식 설정

void LcdMode(void)
{
 *(volatile U16*)0x80000404 = 0x0101;//BANK 1 16Bit
 
 *R_PAF0 = 0xAAAA; //SRAM interface address, data
 *R_PAF1 = 0xaaaa;
 *R_PAF2 = 0xAAAA; /* nCS, nWE, nRE, ALE */ 
 }



TFT LCD제어 코드
포트제어 방식과 비교하면 상당히 코드가 간단해 진다. 때문에 속도도 더 빨라진다.
void Lcd_Cmd(unsigned int Data)   //Write Command
{
//LCD_RS_OFF();
 *(volatile unsigned short*)(LCD_BASE_DATA_ADDR) = Data;
// LCD_RS_ON();
}

void Lcd_Data(unsigned int Data)  //Write Data
{
 
 *(volatile unsigned short*)(LCD_BASE_DATA_ADDR) = Data;
 }
[STM32F4] STM32F405 TFT LCD 출력 테스트



STM32F103 EVM] 보드와 핀맵이 동일하기 때문에 기존 확장 보드에서 TFT LCD테스트 가능하다.
GPIO 최대 클럭으로 제어시 LCD가 동작을 하지 않는다. 이때 1프레임 출력시간은 4ms로 너무 빨라서 GPIO로는 타이밍을 맞추기 힘든것 같다.  약간의 지연시간을 주니 정상 동작하고 1프레임 출력 시간은 8ms 정도 된다. 상당히 빠른것 같다.
 (메모리 버스 타입이 아니라 딜레이는 더이상 줄이기 힘든것 같다.)

STM32F4 TFT LCD 출력 속도 테스트 동영상





STM32F4 TFT LCD BMP 파일 출력 테스트 동영상

SPI를 이용하여 SD Card의  BMP 파일 출력 테스트
[MSP430F55XX EVM] TFT LCD출력 테스트



한프레임 출력하는데 70ms정도 나온다
MSP430F5x의 최대 클럭(33Mhz)으로 설정시 48ms로 예전 버전의 MSP430보다 상당히 빨라졌다.



MSP430F5510 TFT LCD 출력 테스트 동영상
드라이버 코드만 수정하면 쉽게 테스트 가능하므로 간단히 SD Card의 BMP파일을 FTF LCD에 출력하는 테스트를 진행해 보았다.





MSP430F5529 EVM보드의 핀맵






MSP430F5529 TFT LCD 출력 드라이버 코드



//-----------------------------------------------------------------------------
//TFT LCD

#define LCD_LAT_BIT      BIT5
#define LCD_LAT_PORT     PORT3
#define LCD_LAT_ON()     Sbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_LAT_OFF()     Cbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT5
#define LCD_EN_PORT      PORT7
#define LCD_ENABLE()     Cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      BIT2
#define LCD_RST_PORT     PORT7
#define LCD_RST_ON()     Sbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_OFF()     Cbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT3
#define LCD_RS_PORT      PORT7
#define LCD_RS_OFF()     Cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT      BIT1
#define LCD_WR_PORT      PORT8
#define LCD_WR_OFF()     Cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      Sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      //BIT5
#define LCD_RD_PORT      //LATD
#define LCD_RD_OFF()     //Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      BIT4
#define LCD_BL_PORT      PORT7
#define LCD_BL_OFF()     Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    PORT1=Data;PORT2=(Data>>8)


#define TFTGpioInit()     P1DIR=0xFF;P2DIR=0xFF;\
                                        Sbi(P7DIR, BIT2|BIT3|BIT4|BIT5);\
                                        Sbi(P8DIR, BIT1)   
//-----------------------------------------------------------------------------





MSP430F5529 SD Card 드라이버 코드
SD Card의 CS는 [LCD_EXP EVM] 보드의 MA_29번핀(/CS0)에 연결되어 있다.


#define _SPI1_ENABLE     1

//-----------------------------------------------------------------------------
// SD Card HAL
#define MMC_CS_PORT      PORT8
#define MMC_CS_BIT      BIT2

#define MMC_CS_INIT()     Sbi(P8DIR, MMC_CS_BIT);\
          MMC_CS_HIGH()
          
          
#define MMC_CS_HIGH()     Sbi(MMC_CS_PORT, MMC_CS_BIT)
#define MMC_CS_LOW()     Cbi(MMC_CS_PORT, MMC_CS_BIT)

#define MMC_ASSERT_INIT()    MMC_CS_INIT();MMC_CS_HIGH()
#define MMC_ASSERT()     MMC_CS_LOW()
#define MMC_DEASSERT()     MMC_CS_HIGH()


#define MMC_SpiInit()     SPI1_Init()
#define MMC_SendByte     SPI1_WriteReadByte
#define MMC_Send(Data)      SPI1_WriteByte(Data)
#define MMC_Recv()      SPI1_WriteReadByte(0xFF)
#define MMC_RecvP(Data)     MMC_Send(0xFF); (*(Data)=SPI1_ReadByte())
#define MMC_SPISpeed     SPI1_SetSpeed

#define SPI_Mode3()
//-----------------------------------------------------------------------------



[DSP28335 EVM] TFT LCD 출력 속도 테스트 - TMS320F28335 EXP_LCD EVM



[LCD_EXP_EVM] 보드 를 이용하여 TMS320F28335로 TFT LCD출력 테스트를 진행 했다.
TMS320F28335는 외부 메모리 인터페이스(EXINF)를 지원하므로 EXINF로 실험 해 보았다.

LCD_CS는 TMS320F28335 CS0로 할당 했고 LCD RS는 A0로  할당 했다.




240x400 픽셀의 한 프레임 출력시 GPIO로 제어 하면 10ms정도 시간이 걸린다.

외부 데이터/어드레스 버스로 제어 했을때  Function -2옵티마이즈 옵션으로 8ms정도 나온다
File -3로 최적화시에 한프레임 출력하는데  4ms 정도 나온다.
특히나 CS동기를 맞추기 때문에 다른 입출력 장치(Ethernet, ADC, DAC 등)와 함께 사용시 확실한 성능 차이를 보여줄 것 같다.

TMS320F28335 TFT-LCD 출력 테스트 동영상





TMS32F28335 TFT LCD 테스트 동영상 - Sd card를 이용한 BMP출력
SPI를 이용하여 SD Card의 BMP이미지 출력시 속도가 많이 느려지는데 TMS320F28335의 SPI클럭속도가 최대 10Mhz밖에 되지 않기 때문인것 같다.

[LPC1756 EVM] TFT-LCD 테스트

[NXP]/LPC1700 | 2011.11.06 21:00
Posted by nexp
[LPC1756 EVM] TFT-LCD 테스트


LPC1756 EVM을 이용하여 TFT-LCD를 테스트 해보았다. 100Mhz 클럭 이기 때문에 좀더 빠를것 같은 기대로 테스트 진행 해 보았다.


IO제어는 빠른것 같다. 1프레임 출력하는데 10ms 안으로 들어온다. 좀더 옵티마이즈 하면 더 빨라질것 같다. 물론 Address/Data Bus를 이용하는것 보다는 느리겠지만 간단히 GPIO만으로도 빠른 속도를 낼 수 있을것 같다.





SPI속도도 빠르기 때문에 SD Card를 이용해서 테스트 해 보았다. LPC1756의 SPI최대 속도는 50Mhz까지 출력되지만 SD Card 제어시는 18Mhz이상 힘들기 때문에 16Mhz로 테스트 해 보았다. (SPI클럭 조합이 좀 아쉽다. 16Mhz 다음에 24Mhz, 48Mhz..로 설정 가능하다.)




LPC1756 EVM TFT-LCD 테스트 드라이버 코드

//-----------------------------------------------------------------------------
//TFT LCD
#define TFT_DRV_HD66791                 0
#define TFT_DRV_COM44                   1

#define LCD_LAT_BIT      BIT0
#define LCD_LAT_PORT     GPIO1
#define LCD_LAT_ON()     sbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_LAT_OFF()     cbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT4
#define LCD_EN_PORT      GPIO1
#define LCD_ENABLE()     cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      //BIT8
#define LCD_RST_PORT     //PORTB
#define LCD_RST_ON()     //Sbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_OFF()     //Cbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT0
#define LCD_RS_PORT      GPIO0
#define LCD_RS_OFF()     cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT      BIT1
#define LCD_WR_PORT      GPIO1
#define LCD_WR_OFF()     cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      //BIT5
#define LCD_RD_PORT      //LATD
#define LCD_RD_OFF()     //Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      //Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      BIT4
#define LCD_BL_PORT      PORT3
#define LCD_BL_OFF()     //Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      //Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    PORT2 = (PORT2&0xFF00) | (Data>>8);\
                                     LCD_DATA_LATCH();\
                                     PORT2 = (PORT2&0xFF00) | (Data&0xFF);

#define TFTGpioInit()     GPIOInit(0, DIR_OUT, (BIT0));\
                                        GPIOInit(1, DIR_OUT, (BIT0|BIT1|BIT4));\
                                        GPIOInit(2, DIR_OUT, 0xFF);
//-----------------------------------------------------------------------------


블로그 이미지

nexp

카테고리

분류 전체보기 (1550)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (139)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (210)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (127)
[SENSOR] (41)
[DATA] (21)
[FPGA] (29)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)

티스토리 툴바