因项目开发,自己开发的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;
}