[MCU]/CANTUS2011. 12. 25. 00:33

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

[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;
 }
Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42011. 12. 6. 22:00

[STM32F4] STM32F405 TFT LCD 출력 테스트

[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 파일 출력 테스트
Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011. 11. 26. 22:00

[MSP430F55XX EVM] TFT LCD출력 테스트

[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()
//-----------------------------------------------------------------------------



Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352011. 11. 12. 22:30

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

[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밖에 되지 않기 때문인것 같다.
Posted by nexp

댓글을 달아 주세요

[NXP]/LPC17002011. 11. 6. 21:00

[LPC1756 EVM] TFT-LCD 테스트

[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);
//-----------------------------------------------------------------------------


Posted by nexp

댓글을 달아 주세요