STM32F439 EVM - SD카드를 이용한 BMP파일 출력 테스트



STM32F439 EVM 보드 에는 SDIO방식의 SD Card 연결할 수 있는 SD 소켓이 할당되어 있고 이를 이용하여 SD Card의 BMP파일을 TFT LCD에 출력하는 테스트를 진행해 보았다.




STM32F439 7" TFT-LCD 출력 테스트 동영상




STM32F439 SDIO 초기화 코드
uint8_t BSP_SD_Init(void)
  uint8_t SD_state = MSD_OK;
  
  /* uSD device interface configuration */
  uSdHandle.Instance = SDIO;

  uSdHandle.Init.ClockEdge           = SDIO_CLOCK_EDGE_RISING;
  uSdHandle.Init.ClockBypass         = SDIO_CLOCK_BYPASS_DISABLE;
  uSdHandle.Init.ClockPowerSave      = SDIO_CLOCK_POWER_SAVE_DISABLE;
  uSdHandle.Init.BusWide             = SDIO_BUS_WIDE_1B;
  uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  uSdHandle.Init.ClockDiv            = SDIO_TRANSFER_CLK_DIV;
  
  /* Configure IO functionalities for SD detect pin */
  //BSP_IO_Init(); 
  
  /* Check if the SD card is plugged in the slot */
  if(BSP_SD_IsDetected() != SD_PRESENT)
  {
    return MSD_ERROR;
  }
  
  /* HAL SD initialization */
  SD_MspInit();
  if(HAL_SD_Init(&uSdHandle, &uSdCardInfo) != SD_OK)
  {
    SD_state = MSD_ERROR;
  }
  
  /* Configure SD Bus width */
  if(SD_state == MSD_OK)
  {
    /* Enable wide operation */
    if(HAL_SD_WideBusOperation_Config(&uSdHandle, SDIO_BUS_WIDE_4B) != SD_OK)
    {
      SD_state = MSD_ERROR;
    }
    else
    {
      SD_state = MSD_OK;
    }
  }
  
  return  SD_state;
}



STM32F439 SD Card를 이용한 BMP파일 출력 테스트 예제코드
    //SD 카드 초기화
    if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
    {
        if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
        {
            Led2On();
            Error_Handler();

            while(1);
        }
        else
        {
            //파일 리스트 출력
            //res = print_files("");
            Led1On();
            
            
            //------------------------------------------------------------------
            //BMP파일 출력테스트
            InitBmpFileRead();
            
            //BMP파일 읽어와서
            if(OpenReadBmpFile(ImageBuffer, (const char*)"1_3.bmp"))
            {
                BSP_LCD_SelectLayer(1);
                
                //출력
                BSP_LCD_DrawBitmap(0, 0, ImageBuffer);  
                BSP_LCD_SetTransparency(1, 255);            
            }
            //------------------------------------------------------------------
}
}




STM32F439 BMP 이미지 7" TFT-LCD에 출력 결과









STM32F439 LCD EVM - TFT LCD Test

[ST_MICRO]/STM32F43x | 2015.03.01 23:30
Posted by nexp

STM32F439 LCD EVM - TFT LCD Test





STM32F429, STM32F439의 가장 큰 장점으로 TFT-LCD 컨트롤러가 내장되어 있어 1024x768 해상도의 TFT-LCD를 별도의 제어기 없이 연결할 수 있다. 물론 큰 LCD를 연결하려면 메모리 때문에 SDRAM을 연결해야 하는 부담이 있다.
여기서 조금 아쉬운점이 있는데 LCD메모리도 포함 시켜서 만들면 훨신더 경쟁력이 있지 않았을까? (adStar의 경우 TFT-LCD 컨트롤러 및 SDRAM이 한칩에 있어 가격이나 사이즈면에서 상당히 편리하다.)

24-bit RGB Parallel Pixel Output; 8 bits-per-pixel (RGB888)
- 2 display layers with dedicated FIFO (64x32-bit)
- Color Look-Up Table (CLUT) up to 256 color (256x24-bit) per layer
- Supports up to XGA (1024x768) resolution
- Programmable timings for different display panels
- Programmable Background color
- Programmable polarity for HSync, VSync and Data Enable
- Up to 8 Input color formats selectable per layer
- ARGB8888, RGB888, RGB565, ARGB1555, ARGB4444,
- L8 (8-bit Luminance or CLUT), AL44 (4-bit alpha + 4-bit luminance), AL88 (8-bit alpha + 8-bit luminance)




STM32F4 LTDC 핀맵







STM32F439  TFT-LCD 초기화 코드

uint8_t BSP_LCD_Init(void)

    /* LTDC Configuration ----------------------------------------------------*/

    LtdcHandler.Instance = LTDC;

    

    /* Configure horizontal synchronization width */

    LtdcHandler.Init.HorizontalSync = HSYNC;

    /* Configure vertical synchronization height */

    LtdcHandler.Init.VerticalSync = VSYNC;

    /* Configure accumulated horizontal back porch */

    LtdcHandler.Init.AccumulatedHBP = HBP;

    /* Configure accumulated vertical back porch */

    LtdcHandler.Init.AccumulatedVBP = VBP;

    /* Configure accumulated active width */

    LtdcHandler.Init.AccumulatedActiveW = ACTIVE_W-2;

    /* Configure accumulated active height */

    LtdcHandler.Init.AccumulatedActiveH = ACTIVE_H;

    /* Configure total width */

    LtdcHandler.Init.TotalWidth = TOTAL_WIDTH;

    /* Configure total height */

    LtdcHandler.Init.TotalHeigh = TOTAL_HEIGHT;


    

    /* Configure R,G,B component values for LCD background color */

    LtdcHandler.Init.Backcolor.Red= 0;

    LtdcHandler.Init.Backcolor.Blue= 0;

    LtdcHandler.Init.Backcolor.Green= 0;

    

    /* LCD clock configuration */

    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;

    PeriphClkInitStruct.PLLSAI.PLLSAIN = _PLLSAIN_CLK;

    PeriphClkInitStruct.PLLSAI.PLLSAIR = PLLSAIR_DIV;

    PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;

    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); 

    

    /* Polarity */

    LtdcHandler.Init.HSPolarity = LTDC_HSPOLARITY_AL;

    LtdcHandler.Init.VSPolarity = LTDC_VSPOLARITY_AL;

    LtdcHandler.Init.DEPolarity = LTDC_DEPOLARITY_AL;

    LtdcHandler.Init.PCPolarity = LTDC_PCPOLARITY_IPC;

    

    MspInit();

    HAL_LTDC_Init(&LtdcHandler); 

    


    /* Initialize the SDRAM */

    BSP_SDRAM_Init();


    /* Initialize the font */

    BSP_LCD_SetFont(&LCD_DEFAULT_FONT);


return LCD_OK;

}  






STM32F439 EVM TFT-LCD커넥터 핀맵






기존 7" TFT-LCD 모듈 커넥터 연결하여 다양한 LCD 테스트 가능하다.










STM32F439 TFT LCD 제어 예제

아래는 간단히 LCD 초기화 하고 LCD에 Text 표시하는 예제이다.


#if _USE_TFTLCD_
    LCD_BackLightInit();  
    
    //LCD초기화
    BSP_LCD_Init();

    /* Layer2 Init */
    BSP_LCD_LayerDefaultInit(1, LCD_FRAME_BUFFER_LAYER1);
    /* Set Foreground Layer */
    BSP_LCD_SelectLayer(1);
    /* Clear the LCD */
    BSP_LCD_Clear(LCD_COLOR_GREEN);  
    BSP_LCD_SetColorKeying(1, LCD_COLOR_RED);
    BSP_LCD_SetLayerVisible(1, DISABLE);

    /* Layer1 Init */
    BSP_LCD_LayerDefaultInit(0, LCD_FRAME_BUFFER_LAYER0);

    // Set Foreground Layer
    BSP_LCD_SelectLayer(0);

    // Enable The LCD 
    BSP_LCD_DisplayOn();

    // Clear the LCD 
    BSP_LCD_Clear(LCD_COLOR_BLUE);
    
    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);


    BSP_LCD_DrawRect(0,0, LCD_WIDTH-1, LCD_HEIGHT-1);
    BSP_LCD_DisplayStringAtLine(0, "STM32F429- EtherCat Test");
#endif


코드 다운로드 하고 테스트 해보면 아래와 같이 TFT-LCD에 출력 되는것을 확인 할수 있다. STM32F439에서 TFT-LCD출력을 위한 기본 셋팅은 구성되었으므로 앞으로 여러가지 테스트 예제를 작성해 가면서 테스트 해보자.





STM32F439 TFT LCD 제어 테스트 예제 동영상

SD Card에 있는 BMP파일을읽어 TFT LCD에 출력하는 동영상









STM32F439 EVM 테스트 보드 제작




STM32F439 시리즈중 100이상 모델은 TFT-LCD 컨트롤러를 내장하고 있어 LCD출력할 프로젝트라면 사용하기 좋은 MCU이다. 

TFT LCD 및 SDRAM, HDMI, 이더넷, USB등을 테스트 할 수 있는 176핀의 STM32F439IGT6 테스트 보드를 제작해 보았다.

기본적으로 기존에 제작한 핀맵을 기준으로 연결할 수 있도록 하고 나머지 핀들은 확장해서 테스트 할수 있도록 했다.



이 보드의 주요 기능은 7" TFT-LCD 모듈을 연결하여 여러가지 기능을 테스트 할수 있는 모듈이다.


기존 SRAM 방식의 TFT-LCD 모듈을 연결하여 테스트 가능하다.





기존 7" TFT-LCD 모듈 테스트 커넥터




7" TFT-LCD 테스트 커넥터




HDMI 출력 모듈 테스트 커넥터




TM4C123 EVM - TFT-LCD 테스트

[TI]/TM4C | 2014.07.27 21:00
Posted by nexp

TM4C123 EVM - TFT-LCD 테스트 



TM4C123 보드를 이용하여 TFT-LCD를 적은 핀수로 테스트 할 수 있는 [LCD-CONV] 보드의 TFT-LCD 테스트를 진행 했다. TFT-LCD출력 속도는 18ms로 빠른데 SD Card 읽어들이는 속도가 상대적으로 느려 고속출력은 무리가 있어 보인다.


TI 제공 ROM 함수 사용시

320x240 한프레임 출력 시간이 100ms 정도 출력된다.

상당히 느리다..

#define _LCD_DAT_OUT(Data) ROM_GPIOPinWrite(GPIO_PORTC_BASE, 0xFF, Data>>8);\

                                        LCD_DATA_LATCH();\

                                                                ROM_GPIOPinWrite(GPIO_PORTC_BASE, 0xFF, Data&0xFF)




레지스터 직접 제어시

18ms 로 상당히 빨라졌다.

#define _LCD_DAT_OUT(Data) PORTC = (Data>>8);\

                                              LCD_DATA_LATCH();\

                                                                PORTC = Data




TM4C123 TFT-LCD 테스트 동영상







TM4C123 TFT-LCD 드라이버 코드

//-----------------------------------------------------------------------------

// TFT LCD Driver

#define TFT_DRV_HD66791 0

#define TFT_DRV_COM44 1


                                        

#define LCD_LAT_BIT BIT6

#define LCD_LAT_PORT GPIO2

#define LCD_LAT_ON() PD6 = BIT6;

#define LCD_LAT_OFF() PD6 = 0;

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


#define LCD_RST_BIT BIT6

#define LCD_RST_PORT GPIOA

#define LCD_RST_ON()

#define LCD_RST_OFF()


#define LCD_WR_BIT BIT0

#define LCD_WR_PORT GPIO2

#define LCD_WR_OFF() (PD0 = 0);

#define LCD_WR_ON() (PD0 = BIT0);


#define LCD_RS_BIT BIT1

#define LCD_RS_PORT GPIO2

#define LCD_RS_OFF() (PD1 = 0);

#define LCD_RS_ON() (PD1 = BIT1);


#define LCD_EN_BIT BIT2

#define LCD_EN_PORT GPIO2

#define LCD_ENABLE() (PD2 = 0);

#define LCD_DISABLE() (PD2 = BIT2);


#define LCD_BL_BIT BIT3

#define LCD_BL_PORT GPIO2

#define LCD_BL_OFF() (PD3 = 0);

#define LCD_BL_ON() (PD3 = BIT3);


/*                                        

#define _LCD_DAT_OUT(Data) ROM_GPIOPinWrite(GPIO_PORTC_BASE, 0xFF, Data>>8);\

                                        LCD_DATA_LATCH();\

                                        ROM_GPIOPinWrite(GPIO_PORTC_BASE, 0xFF, Data&0xFF)

*/


#define _LCD_DAT_OUT(Data) PORTC = (Data>>8);\

                                        LCD_DATA_LATCH();\

                                        PORTC = Data


#define TFTGpioInit() ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);\

                                        ROM_GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, 0xFF);\

                                        ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);\

                                        ROM_GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, 0xFF); 

//-----------------------------------------------------------------------------




TM4C123 SD Card 드라이버 코드

//-----------------------------------------------------------------------------

// SD Card HAL

#define _DEBUG_FAT_FILE                 1


#define MMC_CS_PORT GPIOA

#define MMC_CS_BIT     BIT3


#define MMC_CS_INIT() ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);\

                                        ROM_GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, MMC_CS_BIT);


#define MMC_CS_HIGH() PA3 = BIT3

#define MMC_CS_LOW() PA3 = 0;


#define MMC_SpiInit() SPI0_Init()

#define MMC_SendByte SPI0_WriteReadByte

#define MMC_Send(Data) SPI0_WriteReadByte(Data)

#define MMC_Recv() SPI0_WriteReadByte(0xFF)

#define MMC_SPISpeed SPI0_SetSpeed


#define SPI_Mode3() 


#define FAT_MAX_NUM_FILE          50


#define FCLK_SLOW()                     MMC_SPISpeed(SPI_SPEED_1MHZ)

#define FCLK_FAST()                    MMC_SPISpeed(SPI_SPEED_10MHZ) 

//-----------------------------------------------------------------------------




[TMS320C28346] 7" TFT LCD 테스트

[DSP]/DSP28346 | 2014.01.12 20:21
Posted by nexp

[TMS320C28346] 7" TFT LCD 테스트



SSD1963 을 이용하여 TMS320C28346 보드에서 7" TFT LCD를 테스트 했다.


TFT LCD의 CS는 TMS320C28346의 ZONE7에 할당된 CS7을 이용하였고 RS는 A0로 할당해서 코드 수정했다.
#pragma DATA_SECTION(gExinf1Buff,"ZONE7DATA");

#define _LCD_CMD_OUT(Data) gExinf1Buff[0] = Data
#define _LCD_DAT_OUT(Data) gExinf1Buff[1] = Data


#if _USE_EXINF
//Write Command 
void Lcd_Cmd(unsigned short Data)
{
_LCD_CMD_OUT(Data);
}

void Lcd_Data(unsigned short Data)
{
_LCD_DAT_OUT(Data);
}



기존 코드 수정하고 동작하니 색깔을 나오는데... 화면에 1/3만 출력된다.
 
DSP 컴파일러에 문제가 있는것 같다.
처음에 unsigned int로 할당에서 문제가 되었는데 (800x480 이면 unsigned long), long 형으로 바꾸어도 문제가 되었다.
 
#define LCD_SIZE_MAX     384000//(800*480)
 
define 문으로 할당하지 않고 상수로 하니 정상 동작 한다.
이게 무슨 황당한 일인가? (옵션에 문제가 있나?)
-> CCS 5.x 에서 테스트 하니 정상 동작한다.
 
//Full Color Display Data
void Disp_Full_Color(unsigned int Color)
{
 unsigned long i;//size;
 lcd70_set_area(0,0,799,479);
 Lcd_Cmd(0x2C);
 
 //for(i=0;i<LCD_SIZE_MAX;i++)
 for(i=0;i<384000;i++)
 {
  Lcd_Data(Color);
 }
}
 

800x480 한 화면에 출력하는데 걸리는 시간은 25ms 정도 걸린다. (참고로 TSM320F28335 에서는 45ms 정도 걸린다.)


TMS320C28346 을이용한 7" TFT LCD 테스트 결과


TFT-LCD 테스트 동영상


TMS320F28335 - SSD1963 7" TFT LCD테스트 (SD Card를 이용한 BMP이미지 출력)




TFT LCD 컨트롤러 SSD1963 테스트 보드를 이용하여 TMS320F28335에서 TFT LCD제어 테스트를 했다.




TMS32F28335 TFT-LCD 테스트 동영상
TMS320F28335를 이용하여 SD Card의 BMP파일을 읽어 TFT-LCD에 표시하는 예제이다.  SPI클럭의 한계로 SD Card 이용시 고속 출력은 무리가 있는듯...




TMS320F28335 TFT-LCD드라이버 코드

extern volatile Uint16 gExinf0Buff[100];

//-----------------------------------------------------------------------------

// TFT LCD Driver

#define _USE_EXINF 1


#define TFT_DRV_HD66791 0

#define TFT_DRV_COM44 0

#define TFT_DRV_AT070 1

#define TFT_DRV_LMS700K 0



#define LCD_LAT_BIT BIT2 //-> GPIO34

#define LCD_LAT_PORT PORTB


#define LCD_LAT_ON() //Sbi(LCD_LAT_PORT, LCD_LAT_BIT);NOP();

#define LCD_LAT_OFF() //Cbi(LCD_LAT_PORT, LCD_LAT_BIT);NOP();



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


#define LCD_EN_BIT BIT4 //GP36

#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 BIT25

#define LCD_RST_PORT GPIOA

#define LCD_RST_ON() sbi(LCD_RST_PORT, LCD_RST_BIT);

#define LCD_RST_OFF() cbi(LCD_RST_PORT, LCD_RST_BIT);



#define _LCD_CMD_OUT(Data) gExinf0Buff[0] = Data

#define _LCD_DAT_OUT(Data) gExinf0Buff[1] = Data



#define TFTGpioInit() EALLOW;\

GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0;\

GpioCtrlRegs.GPADIR.bit.GPIO25 = 1;\

GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0;\

GpioCtrlRegs.GPADIR.bit.GPIO24 = 1;\

EDIS;

//-----------------------------------------------------------------------------



TMS320F28335 7" TFT-LCD 출력 테스트










SSD1963 EVM - 7" TFT LCD 테스트 보드 제작




TFT LCD 컨트롤러 SSD1963 테스트 보드를 제작 했다.

컨트롤러를 이용하여 테스트 할 수 있는 커넥터와 LCD만 연결하여 내장 TFT LCD컨트롤러로 제어 할 수 있는 커넥터도 함깨 내장하였다.







SSD1963 TFT LCD 컨트롤러 사용할 경우




TFT LCD 만 사용할 경우

STM32F429나 ADStar와 같이 TFT LCD컨트롤러를 내장하고 있는 MCU의 경우 SSD1963컨트롤러 없이 바로 LCD에 연결해서 TFT LCD테스트가 가능하다.










 MSP430FR5739 EVM - 2.8" TFT LCD 테스트

 

 

 

MSP430FR5739를 이용하여 좀더 큰 2.8" TFT LCD 제어를 테스트 해보았다.

SM-Type, M-Type에서 간단히 TFT LCD를 연결할 수 있는 [LCD_IF_P EVM] 을 이용하여 테스트 했다.

 

 

 

 

MSP430FR5739 TFT LCD제어 핀맵

 

 

 

 

 

MSP430FR5739 TFT LCD 제어 드라이버 코드

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

#define LCD_LAT_BIT      BIT2
#define LCD_LAT_PORT     PJOUT
#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      BIT0
#define LCD_EN_PORT      PJOUT
#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      BIT1
#define LCD_RS_PORT      P4OUT
#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      P4OUT
#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      BIT1
#define LCD_BL_PORT      PJOUT
#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>>8);\
                                     LCD_DATA_LATCH();\
                                     PORT1 = (Data&0xFF);

 

#define TFTGpioInit()     P1DIR=0xFF;\
                                        Sbi(P4DIR, BIT1|BIT0);\
                                        Sbi(PJDIR, BIT0|BIT1|BIT2|BIT3)   
//-----------------------------------------------------------------------------

 MSP430FR5739 EVM - 1.5" I1511 TFT LCD 테스트

 

 

MSP430FR5739 를 이용하여 1.5" TFT LCD 테스트를 했다.

확장 테스트 보드는 XMega32 EVM 보드를 이용하였다.

 

 

 

 

 

 I1511 TFT LCD  제어 드라이버 코드

SD CARD의 BMP파읽을 읽어 TFT LCD에 출력하는 예제이다.

 

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

#define LCD_LAT_BIT      BIT0
#define LCD_LAT_PORT     PORT1
#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      BIT1
#define LCD_EN_PORT      PJOUT
#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      BIT2
#define LCD_RS_PORT      PJOUT
#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      PJOUT
#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      BIT0
#define LCD_BL_PORT      PJOUT
#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>>8);\
                                     LCD_DATA_LATCH();\
                                     PORT1 = Data;

 

#define TFTGpioInit()     P1DIR=0xFF;\
                                        Sbi(P4DIR, BIT0|BIT1);\
                                        Sbi(PJDIR, BIT0|BIT1|BIT2|BIT3)   
//-----------------------------------------------------------------------------

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보다는 출력속도가 느린것 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

블로그 이미지

nexp

카테고리

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