K20 EVM - Kinetis Cortex-M4 TFT LCD 테스트
K20 EVM - Kinetis Cortex-M4 TFT LCD 테스트
Cortex-M4 코어를 가진 K20 EVM보를 이용하여 TFT-LCD 출력 테스트를 했다.
50Mhz에서 400x320 픽셀의 TFT LCD에 1프레임 출력하는데 18ms정도 소요된다.
K20 EVM TFT LCD 출력 테스트 동영상
K20 EVM - Kinetis Cortex-M4 TFT LCD 테스트
Cortex-M4 코어를 가진 K20 EVM보를 이용하여 TFT-LCD 출력 테스트를 했다.
50Mhz에서 400x320 픽셀의 TFT LCD에 1프레임 출력하는데 18ms정도 소요된다.
K20 EVM TFT LCD 출력 테스트 동영상
adStar - SD Card 이용한 7" TFT LCD 테스트
adStar의 자장 큰 장점으로 MCU내에 TFT LCD 컨트롤러가 내장되어 있는 것이다. 때문에 7" TFT LCD도 쉽고 저렴하게 제어 할 수 있다.
adStar TFT LCD제어 초기화 코드
PORT6, PORT7, PORT8 이 TFT LCD데이터 포트 이므로 기능 설정 레지스터를 LCD 로 설정해 주면된다.
주의 사항으로 JTAG핀과 공통으로 사용하므로 개발할때 불편함이 있다. MUX칩으로 스위칭 할수 있도록 하면 좀더 쉽게 개발할수 있다.
*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 테스트
adStar의 가장 큰 장점은 TFT-LCD 컨트롤러와 16Mbyte의 SDRAM을 내장하고 있어 LCD제어에 있어 아주 편리하다. 특히 16Mbyte의 RAM을 활용하면 이미지 처리에 있어 장점이 많다.
우선 기존 코드를 활용하여 TFT-LCD 모듈을 GPIO방식으로 제어 해 보았다. (추후 내장된 TFT-LCD컨트롤러를 활용하여 어느정도의 성능 향상이 있은지 확인 할 예정이다.)
400x240 한프레임 출력 시간은 GPIO방식이지만 20ms 정도로 측정된다.
adStar TFT-LCD 테스트 동영상
adStar TFT LCD 드라이버 코드
#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)
[TMS320C6720 EVM] TFT LCD테스트
TMS320C6720 TFT LCD 구동 Read/Write 함수
CANTUS TFT LCD 메모리 제어 방식 설정
STM32F4 TFT LCD BMP 파일 출력 테스트 동영상
SPI속도도 빠르기 때문에 SD Card를 이용해서 테스트 해 보았다. LPC1756의 SPI최대 속도는 50Mhz까지 출력되지만 SD Card 제어시는 18Mhz이상 힘들기 때문에 16Mhz로 테스트 해 보았다. (SPI클럭 조합이 좀 아쉽다. 16Mhz 다음에 24Mhz, 48Mhz..로 설정 가능하다.)
LPC1756 EVM TFT-LCD 테스트 드라이버 코드