800×480の液晶コントローラ無しの液晶を使う 初期化

2016年4月7日

SSD1963と液晶の初期化です。

とりあえず下記のコードになります。

#define SSD1963_Command(Value)      _LCD_RS = 0; \
                                    _LCD_WR = 0; \
                                    _LCD_BUSS = (Value); \
                                    Nop(); Nop(); Nop(); Nop(); Nop(); \
                                    Nop(); Nop(); Nop(); Nop(); Nop(); \
                                    _LCD_WR = 1; \
                                    _LCD_RS = 1

#define SSD1963_Parameter(Value)    _LCD_WR = 0; \
                                    _LCD_BUSS = (Value); \
                                    Nop(); Nop(); Nop(); Nop(); Nop(); \
                                    Nop(); Nop(); Nop(); Nop(); Nop(); \
                                    _LCD_WR = 1

void InitializeSSD1963(void)
{
    int i, j, k;
        
    //PortTest();
    
    _LCD_CS             = 0;
    _LCD_UD             = 0;
    _LCD_LR             = 1;
    _LCD_ADJ            = 1;
    _LCD_MODE           = 1;        // DE mode
    _LCD_RS             = 0;
    _LCD_WR             = 0;
    _LCD_RD             = 1;        // 固定 Read mode
    
    _LCD_RST            = 0;
    delayCT1m(140);
    
    _LCD_RST            = 1;
    delayCT1m(140);
    
    SSD1963_Command(0x01);          // Software reset
    delayCT1m(140);
    
    SSD1963_Command(0xE2);          // set multiplier and divider of PLL
    SSD1963_Parameter(0x1E);        // 100MHz
//    SSD1963_Parameter(0x1D);
    SSD1963_Parameter(0x02);
    SSD1963_Parameter(0x04);
    
    SSD1963_Command(0xE0);          //Enable PLL
    SSD1963_Parameter(0x01);
    delayCT1m(100);
    
    SSD1963_Command(0xE0);          //Lock PLL
    SSD1963_Parameter(0x03);
    
    SSD1963_Command(0x01);          //Software reset
    delayCT1m(140);
    
    SSD1963_Command(0xB0);          // SET LCD MODE  SET TFT 18Bits MODE
    SSD1963_Parameter(0x0C);        // TFT MODE & hsync+Vsync+DEN MODE
    SSD1963_Parameter(0x80);        // SET TFT MODE & hsync+Vsync+DEN MODE
    SSD1963_Parameter(0x03);        // SET horizontal size=800-1 HightByte
    SSD1963_Parameter(0x1F);        // SET horizontal size=800-1 LowByte
    SSD1963_Parameter(0x01);        // SET vertical size=480-1 HightByte
    SSD1963_Parameter(0xDF);        // SET vertical size=480-1 LowByte
    SSD1963_Parameter(0x00);        // SET even/odd line RGB seq.=RGB
    
    SSD1963_Command(0xF0);          // SET pixel data I/F format=16 565bit
    SSD1963_Parameter(0x03);
    
    SSD1963_Command(0x36);          // SET address mode=flip vertical
    SSD1963_Parameter(0x09);
    
    SSD1963_Command(0xE6);          // SET PCLK freq
    SSD1963_Parameter(0x05);        // 33.3MHz
    SSD1963_Parameter(0x53);
    SSD1963_Parameter(0xF7);
    
     //Set front porch and back porch
    SSD1963_Command(0xB4);          // HSYNC SSD1963_Parameters
    SSD1963_Parameter(0x03);        // HSNC Period  928
    SSD1963_Parameter(0xA0);
    SSD1963_Parameter(0x00);        // SET HSYNC Pulse Start Position=40+1
    SSD1963_Parameter(0x28);        //
    SSD1963_Parameter(0x31);        // SET HSYNC Pulse Width=49=48pixels+1
    SSD1963_Parameter(0x00);        // 
    SSD1963_Parameter(0x00);        // SET Hsync pulse start position
    SSD1963_Parameter(0x00);        // SET HSYNC pulse subpixel start position

    //Set the vertical blanking interval between last scan line and next LFRAME pulse
    SSD1963_Command(0xB6);          // VSYNC SSD1963_Parameters
    SSD1963_Parameter(0x02);        // Vsync total=525
    SSD1963_Parameter(0x0D);
    SSD1963_Parameter(0x00);        // VSYNC Pulse Start Position=29
    SSD1963_Parameter(0x1D);
    SSD1963_Parameter(0x04);        // VSYNC Pulse Width= 4=3lines+1
    SSD1963_Parameter(0x00);        // VSYNC Pulse Start Position=0
    SSD1963_Parameter(0x00);        // 

    SSD1963_Command(0x13);          // Enter Normal Mode
    SSD1963_Command(0x38);          // Exit Idle Mode
    SSD1963_Command(0x29);          // Set Display On
//    delayCT1m(10);
    
    SSD1963_Command(0xF0);          // SET pixel data I/F format=16 565bit
    SSD1963_Parameter(0x03);
    
    SSD1963_Command(0x36);          // Set Address Mode
//    SSD1963_Parameter(0b00001000);
    SSD1963_Parameter(0b00000000);
    
//    SSD1963_SetPartialArea(0, 480);
    
    SSD1963_WindowSet(0, 800, 0, 480);
    
    // write memory start
    SSD1963_Command(0x2C);
    
    for(j = 0; j < COLUM_MAX; j++) {
        for(i = 0; i < LINE_MAX; i++) {
            SSD1963_Parameter(GLAY);
        }
    }
}

V-Syncとか難しい設定は、液晶のマニュアルを参照します。AT070TN83

ここの8/20ページを見てください。ここの情報を使って初期化します。コメントと照らし合わせると大体わかると思いますので、他の液晶でも簡単に対応可能です。