ssd1963初始化程序

来源:互联网 发布:淘宝客服回复质量问题 编辑:程序博客网 时间:2024/06/05 05:11

因项目开发,自己开发的SSD1963驱动程序,硬件初始化过程如下。 QQ:369758761

void ssd1963fb_hard_init( void )
{
 /* twice soft reset */
 ssd1963fb_write_cmd(0x01); /* 0x01 --> soft_reset cmd, need >= 5ms delay */
 mdelay(10);
 ssd1963fb_write_cmd(0x01); /* 0x01 --> soft_reset cmd, need >= 5ms delay */
        mdelay(10);
 
 /* set_pll_mn */
 ssd1963fb_write_cmd(0xE2); /* 0xE2 --> set_pll_mn cmd, PLL=100MHz XTAL_IN=10MHz */
 ssd1963fb_write_data(0x1D);
 ssd1963fb_write_data(0x02);
 ssd1963fb_write_data(0x4);

 /* set_pll */
 ssd1963fb_write_cmd(0xE0); /* 0xE0 --> set_pll cmd, enable PLL */
 ssd1963fb_write_data(0x01); /* after set pll need 100us delay before lock PLL*/
 mdelay(1);
 ssd1963fb_write_cmd(0xE0); /* 0xE0 --> set_pll cmd, enable PLL */
        ssd1963fb_write_data(0x03); /* after enable PLL, now lock PLL.*/

 /* set_lshift_freq */
 ssd1963fb_write_cmd(0xE6);  /* 0xE6 --> set_lshift_freq cmd, now PLL=100MHz, set PCLK(pixel clock)=9MHz */
 ssd1963fb_write_data(0x01);
        ssd1963fb_write_data(0x70);
        ssd1963fb_write_data(0x9A);

 /* set_lcd_mode */
 ssd1963fb_write_cmd(0xB0);  /* 0xB0 --> set_lcd_mode cmd */
 ssd1963fb_write_data(0x24); /* 24bpp pclk->rising edge, HS VS active low */
        ssd1963fb_write_data(0x00); /* 00 or 01 is tft mode */
        ssd1963fb_write_data(0x01); /* HDP[10:8] = 0x01    */
 ssd1963fb_write_data(0xDF); /* HDP[7:0]  = 0xDF HDP[10:0] = 479  */
        ssd1963fb_write_data(0x01); /* VDP[10:8] = 0x01 */
        ssd1963fb_write_data(0x0F); /* VDP[7:0]  = 0x0F VDP[10:0] = 271  */
        ssd1963fb_write_data(0x00); /* ssd1963 p45    */

 /* set_hori_period  */
 ssd1963fb_write_cmd(0xB4);  /* 0xB4 --> set_hori_period cmd */
 /* horizontal total period = ( HT[10:0] + 1 ) pixels */
 ssd1963fb_write_data(0x02); /* HT[10:8] = 0x02 */
 ssd1963fb_write_data(0x0C); /* HT[7:0]  = 0x0C, HT[10:0]=0x20C, CT043 is 525 = 0x20D pixels */
 /* for tft horizontal sync pulse start position  = HPS[10:0] pixels */
 ssd1963fb_write_data(0x00); /* HPS[10:8] = 0x00    */
 ssd1963fb_write_data(0x2D); /* HPS[7:0]  = 0x2D HPS[10:0] = 0x2D, CT043 is 45 = 0x2D pixels  */
 /* horizontal sync pulse width  = ( HPW[6:0] + 1)  pixels */
 ssd1963fb_write_data(0x28); /* HPW[6:0] = 0x28, CT043 is 41 = 0x29 pixels */
 /* horizontal display period start position  = LPS[10:0] pixels */
 ssd1963fb_write_data(0x00); /* LPS[10:8] = 0x00    */
 ssd1963fb_write_data(0x02); /* LPS[7:0]  = 0x02 LPS[10:0] = 0x02 CTO43 is 2 = 0x02 pixels */
 /* LPSPP is only useful for serial tft */
 ssd1963fb_write_data(0x00); /* LPSPP[1:0] = 0x00    */

 /* set_vert_period */
 ssd1963fb_write_cmd(0xB6);   /* 0xB6 --> set_vert_period cmd */
 /* Vertical Total = (VT[10:0] + 1) lines */
 ssd1963fb_write_data(0x01);  /* VT[10:8] = 0x01 */
 ssd1963fb_write_data(0x1D);  /* VT[7:0]  = 0x1D  VT[10:0]=0x11D, CT043 is 286 = 0x11E */
 /* Vertical Sync Pulse Start Position = VPS[10:0] lines */
 ssd1963fb_write_data(0x00);  /* VPS[10:8] = 0x00    */
 ssd1963fb_write_data(0x0E);  /* VPS[7:0]  = 0x0E VPS[10:0] =0x0E, CT043 is 14 = 0x0E lines  */
 /* Vertical Sync Pulse Width = (VPW[6:0] + 1) lines  */
 ssd1963fb_write_data(0x9 );  /* VPW[6:0] = 0x9, CT043 is 10 = 0xA lines */
 /* Vertical Display Period Start Position = FPS lines */
 ssd1963fb_write_data(0x00);  /* FPS[10:8] = 0x00    */
 ssd1963fb_write_data(0x02);  /* FPS[7:0]  = 0x02, CT043 is 2 = 0x2 lines */

 /* set_gamma_curve */ 
 ssd1963fb_write_cmd(0x26);  /* 0x26 --> set_gamma_curve cmd */
 ssd1963fb_write_data(0x00); /* 0x00 --> no gamma curve  */

 /* set_gpio_conf */
 ssd1963fb_write_cmd(0xB8);   /* 0xB8 --> set_gpio_conf cmd */
        ssd1963fb_write_data(0x0F); 
        ssd1963fb_write_data(0x01);

 /* set_gpio_value */
        ssd1963fb_write_cmd(0xBA);   /* 0xBA --> set_gpio_value cmd */
        ssd1963fb_write_data(0x0F);

 /* set_address_mode */
        ssd1963fb_write_cmd(0x36);   /* 0x36 --> set_address_mode cmd */
        ssd1963fb_write_data(0x00);

 /* set_tear_on */
        ssd1963fb_write_cmd(0x35);   /* 0x35 --> set_tear_on cmd */
        ssd1963fb_write_data(0x01);

 /* set_tear_off */
        ssd1963fb_write_cmd(0x34);   /* 0x34 --> set_tear_off cmd */

  /* set_tear_scanline */
        ssd1963fb_write_cmd(0x44);   /* 0x44 --> set_tear_scanline cmd */
        ssd1963fb_write_data(0x00);
        ssd1963fb_write_data(0x19);

 /* set_pixel_data_interface */
        ssd1963fb_write_cmd(0xF0);  /* 0xF0 --> set_pixel_data_interface cmd */
 ssd1963fb_write_data(0x00); /* 000 <-> 8bit 010 <->16bit  */

 /* set_pwm_conf */
 ssd1963fb_write_cmd(0xBE);  /* 0xBE --> set_pwm_conf cmd */
 ssd1963fb_write_data(0x0F); /* PWMF[7:0] = 0xF frequency=100MHz/256/256/F=1017Hz */
 ssd1963fb_write_data(0x80); /* PWM[7:0]  = 0x80 <->128/256  PWM duty cycle 50% */
 ssd1963fb_write_data(0x09); /* C[3] = 0x1 C[0] = 0x1   */
 ssd1963fb_write_data(0xFF); /* D[7:0]  = 0xFF brightest   */
 ssd1963fb_write_data(0x00); /* E[7:0] = 00 dimmest */
 ssd1963fb_write_data(0x00); /* F[3:0] = 0x000  off ssd1963 p55   */

 /* set_dbc_th */
 ssd1963fb_write_cmd(0xD4);  /* 0xD4 --> set_dbc_th cmd */
 ssd1963fb_write_data(0x00); /* DBC_TH1[16] = 0x00 */
 ssd1963fb_write_data(0x09); /* DBC_TH1[15:8]  = 0x09 */
 ssd1963fb_write_data(0x90); /* DBC_TH1[7:0] = 0x90 */
 ssd1963fb_write_data(0x00); /* DBC_TH2[16] = 0x00  */
 ssd1963fb_write_data(0x17); /* DBC_TH2[15:8]  = 0x17 */
 ssd1963fb_write_data(0xE8); /* DBC_TH2[7:0] = 0xE8   */
 ssd1963fb_write_data(0x00); /* DBC_TH3[16] = 0x00  */
 ssd1963fb_write_data(0x39); /* DBC_TH3[15:8]  = 0x39 */
 ssd1963fb_write_data(0x60); /* DBC_TH3[7:0] = 0x60   */

 /* set_dbc_conf */
 ssd1963fb_write_cmd(0xD0);  /* 0xD0 --> set_dbc_conf cmd */
 ssd1963fb_write_data(0x0D); /* A[6]=0 A[5]=0 A[3:2]=11 A[0]=1 */

  /* exit_sleep_mode */
        ssd1963fb_write_cmd(0x11);  /* 0x11 --> exit_sleep_mode cmd */
 mdelay(10);       /* need wait > 5ms */

  /* set_display_on */
 ssd1963fb_write_cmd(0x29);  /* 0x29 --> set_display_on cmd */

 /* set_column_address */ 
 ssd1963fb_write_cmd(0x2A);  /* 0x2A --> set_column_address cmd */
 ssd1963fb_write_data(0x00); /*start 0x00 to 0x01DF is from 0 to 480 */
 ssd1963fb_write_data(0x00);
 ssd1963fb_write_data(0x01);
 ssd1963fb_write_data(0xDF);
 
 /* set_page_address */
        ssd1963fb_write_cmd(0x2B);  /* 0x2B --> set_page_address cmd */
 ssd1963fb_write_data(0x00); /*start 0x00 to 0x010F is from 0 to 272 */
        ssd1963fb_write_data(0x00);
        ssd1963fb_write_data(0x01);
        ssd1963fb_write_data(0x0F);
 
 return;
}