본문 바로가기

[MCU]/CANTUS

[CANTUS EVM] TFT LCD제어

[CANTUS EVM] TFT LCD제어



[LCD-EXP EVM]
보드를 이용하여 CANTUS로 COM26T2844 TFT LCD를 제어 해 보려고 한다.
환경설정이 달라지면서 여러가지 문제점이 많다. 기존 소스를 포팅하니 오류가 많이 뜬다.
-> 문제는 디렉토리 설정에서 현재 자신의 프로젝트를 가리키는 설정에 문제가 있었다.
-> 그냥 "." 기입하면 자신의 디렉토리가 설정된다.



CANTUS의  GPIO 출력 레지스터는 일반 MCU와 달리  Low, High를 PxOHIGH, PxOLOW에 각각 따로 설정해야 한다. 특히 LCD와 같이 데이터를 포트제어로 해야 할때 문제가 있다. 두번 제어 해야 하므로 속도도 문제가 되고...

아무튼 기존 다른 MCU에서 사용했던 코드를 포팅 했는데.. TFT LCD가 정상 동작 하지 않는다.
왜 이렇게 만들었을까?

#define _LCD_DAT_OUT(Data)    *R_P0oLOW=0xFF;*R_P0oHIGH = (Data&0xFF);\
                                                          *R_P1oLOW=0xFF;*R_P1oHIGH = ((Data>>8)&0xFF);


스코프로 하나씩 찍어보자..
-> 문제는 /RD 쪽 포트 설정에 문제였던것 같다.
//-----------------------------------------------------------------------------
// 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      
#define LCD_ENABLE()     Sbi(*R_P5oLOW, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(*R_P5oHIGH, LCD_EN_BIT)

#define LCD_RST_BIT      BIT6
#define LCD_RST_PORT     
#define LCD_RST_OFF()     Sbi(*R_P2oLOW, LCD_RST_BIT)
#define LCD_RST_ON()     Sbi(*R_P2oHIGH, LCD_RST_BIT)

#define LCD_RS_BIT      BIT7
#define LCD_RS_PORT      
#define LCD_RS_OFF()     Sbi(*R_P2oLOW, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(*R_P2oHIGH, LCD_RS_BIT)

#define LCD_WR_BIT      BIT3
#define LCD_WR_PORT      
#define LCD_WR_OFF()     Sbi(*R_P2oLOW, LCD_WR_BIT)
#define LCD_WR_ON()      Sbi(*R_P2oHIGH, LCD_WR_BIT)

#define LCD_RD_BIT      BIT2
#define LCD_RD_PORT      
#define LCD_RD_OFF()     Sbi(*R_P2oLOW, LCD_RD_BIT)
#define LCD_RD_ON()      Sbi(*R_P2oHIGH, LCD_RD_BIT)

#define LCD_BL_BIT      BIT4
#define LCD_BL_PORT      
#define LCD_BL_OFF()     Sbi(*R_P5oLOW, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(*R_P5oHIGH, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    *R_P0oLOW=0xFF;*R_P0oHIGH = (Data&0xFF);\
          LCD_DATA_LATCH();\
          *R_P1oLOW=0xFF;*R_P1oHIGH = ((Data>>8)&0xFF);

#define TFTGpioInit()     Sbi(*R_PAF5, (3<<4));Sbi(*R_PAF5, (3<<5));*R_P0oDIR = 0xFF;\
          *R_P1oDIR = 0xFF;\
          *R_P2oDIR = 0xFF;\
          *R_P5oDIR = 0xFF;


이제 정상 동작한다.
그런제 JTAG다운로드가 너무 느리다. 80Kbyte의 간단한 이미지를 다운하는데 1분가까이 걸린다. 이건뭐... 시리얼보다 느리니.. 개발하지 말라는건지...

일단 LCD출력속도를 한번 테스트 해 보았다.

LCD_EXP_EVM 를 이용한 속도 테스트 결과와 비교해 볼 수 있다.




SD에 저장해서 출력하는 방식을 취해보았다. 잘 동작한다.



CANTUS 512 SD Card사용 TFT LCD테스트 동영상

 



반응형