MXC-A36_2024.04.18/fr3092_mcu/components/drivers/bsp/display/driver_nv3041a.c

1142 lines
29 KiB
C
Raw Normal View History

2024-04-17 19:45:26 +08:00
#include "driver_display.h"
#include "driver_nv3041a.h"
#include "driver_parallel_interface.h"
extern PARALLEL_HandTypeDef hparallel;
static void WriteComm(uint8_t reg)
{
__PARALLEL_CS_SET(hparallel.PARALLELx);
/* writer cmd */
Parallel_write_cmd(&hparallel,reg);
__PARALLEL_CS_RELEASE(hparallel.PARALLELx);
}
static void WriteData(uint8_t data)
{
__PARALLEL_CS_SET(hparallel.PARALLELx);
/* writer cmd */
Parallel_write_param(&hparallel,data);
__PARALLEL_CS_RELEASE(hparallel.PARALLELx);
}
static void LCD_READ_DATA(uint8_t reg)
{
static uint16_t data=0;
__PARALLEL_CS_SET(hparallel.PARALLELx);
/* writer cmd */
//Parallel_write_cmd(&hparallel,reg);
// Parallel_read_data_cmd(&hparallel,reg,&data,1);
printf("reg_param:0x%x\r\n",data);
__PARALLEL_CS_RELEASE(hparallel.PARALLELx);
}
void display_backlight_set(void)
{
gpio_write_pin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
}
void display_backlight_clear(void)
{
gpio_write_pin(GPIOA, GPIO_PIN_4, GPIO_PIN_CLEAR);
}
void nv3041a_set_window(uint16_t x_s, uint16_t x_e, uint16_t y_s, uint16_t y_e)
{
WriteComm(0x2a);//列地址设置
WriteData(x_s>>8);
WriteData(x_s&0xff);
WriteData(x_e>>8);
WriteData(x_e&0xff);
WriteComm(0x2b);//行地址设置
WriteData(y_s>>8);
WriteData(y_s&0xff);
WriteData(y_e>>8);
WriteData(y_e&0xff);
WriteComm(0x2c);//储存器写
// write_cmd(0x2c);
}
void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{
uint16_t i,j,size;
nv3041a_set_window(xsta,xend-1,ysta,yend-1);//设置显示范围
__PARALLEL_CS_SET(hparallel.PARALLELx);
if(hparallel.Init.DataBusSelect == DATA_BUS_8_BIT)
{
size=2;
}else{
size=2;
}
for(i=ysta;i<yend;i++)
{
for(j=xsta;j<xend;j++)
{
// LCD_WR_DATA(color);
/* writer data */
Parallel_write_data(&hparallel,(uint32_t *)&color,size);
}
}
__PARALLEL_CS_RELEASE(hparallel.PARALLELx);
}
void nv3041a_display(uint32_t pixel_count, uint8_t pixel_width, void *data)
{
uint32_t frame_size=0;
if (pixel_width == 8) {
frame_size = (pixel_count*4);
}
if (pixel_width == 16) {
// frame_size = SPI_FRAME_SIZE_16BIT;
frame_size = (pixel_count*2);
}
else if (pixel_width == 32) {
frame_size = (pixel_count);
}
__PARALLEL_CS_SET(hparallel.PARALLELx);
//Parallel_write_param(&hparallel,data);
Parallel_write_data(&hparallel,data,(frame_size));
//while(__PARALLEL_IS_BUS_BUSY(hparallel.PARALLELx));
__PARALLEL_CS_RELEASE(hparallel.PARALLELx);
}
void nv3041a_display_dma(uint32_t pixel_count, uint8_t pixel_width, void *data)
{
uint8_t dma_trans_width=0;
uint32_t dma_sample_count=0;
switch (dma_display_handle.Init.Source_Width) {
case DMA_TRANSFER_WIDTH_32:
//272x480 16
dma_sample_count = pixel_count * pixel_width / 32;
//dma_sample_count=dma_sample_count*4;
break;
case DMA_TRANSFER_WIDTH_16:
dma_sample_count = pixel_count * pixel_width / 16;
// dma_sample_count=dma_sample_count*2;
break;
case DMA_TRANSFER_WIDTH_8:
dma_sample_count = pixel_count * pixel_width / 8;
// dma_sample_count=dma_sample_count;
break;
default:
return;
}
// switch(hparallel.Init.DataBusSelect)
// {
// case DATA_BUS_8_BIT:
// dma_trans_width = 2;
// break;
//
// case DATA_BUS_16_BIT:
// dma_trans_width=2;
// break;
// }
dma_sample_count=dma_sample_count*2;
__PARALLEL_CS_SET(hparallel.PARALLELx);
__PARALLEL_SET_WR_LEN(hparallel.PARALLELx,dma_sample_count);
dma_start_IT(&dma_display_handle, (uint32_t)data, (uint32_t)&hparallel.PARALLELx->TX_FIFO, (dma_sample_count));
}
void nv3041a_display_dma_isr(void)
{
#if 0
while(__SPI_IS_BUSY(spi_display_handle.SPIx));
// CS Release
__DISPLAY_CS_SET();
/* Clear Transfer complete status */
dma_clear_tfr_Status(&dma_display_handle);
/* channel Transfer complete interrupt disable */
dma_tfr_interrupt_disable(&dma_display_handle);
__SPI_DISABLE(spi_display_handle.SPIx);
__SPI_TX_ENDIAN_SET(spi_display_handle.SPIx, TX_RX_Endian_4321);
__SPI_DATA_FRAME_SIZE(spi_display_handle.SPIx, SPI_FRAME_SIZE_8BIT);
#endif
//printf("nv3041a_display_dma_isr1\r\n");
while(!( __PARALLEL_INT_STATUS(hparallel.PARALLELx)&INT_TXFIFO_EMPTY));
__PARALLEL_CS_RELEASE(hparallel.PARALLELx);
/* Clear Transfer complete status */
dma_clear_tfr_Status(&dma_display_handle);
/* channel Transfer complete interrupt disable */
dma_tfr_interrupt_disable(&dma_display_handle);
//printf("nv3041a_display_dma_isr2\r\n");
}
#define pixel_size 100*100
uint16_t color_buffer[pixel_size]={0};
void nv3041a_init(void)
{
display_backlight_clear();
//2024 0329 by lj 驱动测试
WriteComm(0xff);
WriteData(0xa5);
WriteComm(0xE7);
WriteData(0x10);
WriteComm(0x35);
WriteData(0x00);//01
WriteComm(0x36);
WriteData(0x00);//c0
WriteComm(0x3A);
//TE_output_en
//TE_ interface_en
WriteData(0x01);//01---565/00---666
WriteComm(0x40);
WriteData(0x01);//01:IPS/00:TN
WriteComm(0x41);
WriteData(0x03);//01--8bit//03--16bit
WriteComm(0x44);
WriteData(0x15);
WriteComm(0x45);
WriteData(0x15);
WriteComm(0x55);
WriteData(0x01);
//VBP
//VFP
WriteComm(0x7d);//vdds_trim[2:0]
WriteData(0x03);
WriteComm(0xc1);//avdd_clp_en avdd_clp[1:0] avcl_clp_en avcl_clp[1:0]
WriteData(0xbb);//0xbb 88
WriteComm(0xc2);//vgh
WriteData(0x07);
WriteComm(0xc3);//vgl
WriteData(0x10);
WriteComm(0xc6);//avdd_ratio_sel avcl_ratio_sel vgh_ratio_sel[1:0] vgl_ratio_sel[1:0]
WriteData(0x3e);
WriteComm(0xc7);//mv_clk_sel[1:0] avdd_clk_sel[1:0] avcl_clk_sel
WriteData(0x25);
WriteComm(0xc8);// VGL_CLK_sel
WriteData(0x21);
WriteComm(0x7a);// user_vgsp
WriteData(0x4F);
WriteComm(0x6f);// user_gvdd
WriteData(0x49);
WriteComm(0x78);// user_gvcl
WriteData(0x57);
WriteComm(0xc9);
WriteData(0x00);
WriteComm(0x67);
WriteData(0x11);
//gate_ed
WriteComm(0x51);//gate_st_o[7:0]
WriteData(0x0a);
WriteComm(0x52);//gate_ed_o[7:0]
WriteData(0x7D);
//7A
WriteComm(0x53);//gate_st_e[7:0]
WriteData(0x0a);
WriteComm(0x54);//gate_ed_e[7:0]
WriteData(0x7D); //7A
//sorce
WriteComm(0x46);//fsm_hbp_o[5:0]
WriteData(0x0a);
WriteComm(0x47);//fsm_hfp_o[5:0]
WriteData(0x2a);
WriteComm(0x48);//fsm_hbp_e[5:0]
WriteData(0x0a);
WriteComm(0x49);//fsm_hfp_e[5:0]
WriteData(0x1a);
WriteComm(0x44);
WriteData(0x15);
WriteComm(0x45);
WriteData(0x15);
WriteComm(0x73);
WriteData(0x08);
WriteComm(0x74);
WriteData(0x10);
///test mode
//WriteComm(0xf8);
//WriteData(0x16);
//WriteComm(0xf9);
//WriteData(0x20);
//0A
WriteComm(0x56);//src_ld_wd[1:0] src_ld_st[5:0]
WriteData(0x43);
WriteComm(0x57);//pn_cs_en src_cs_st[5:0]
WriteData(0x42);
WriteComm(0x58);//src_cs_p_wd[6:0]
WriteData(0x3c);
WriteComm(0x59);//src_cs_n_wd[6:0]
WriteData(0x64);
WriteComm(0x5a);//src_pchg_st_o[6:0]
WriteData(0x41);
WriteComm(0x5b);//src_pchg_wd_o[6:0]
WriteData(0x3C);
WriteComm(0x5c);//src_pchg_st_e[6:0]
WriteData(0x02);
WriteComm(0x5d);//src_pchg_wd_e[6:0]
WriteData(0x3c);
WriteComm(0x5e);//src_pol_sw[7:0]
WriteData(0x1f);
WriteComm(0x60);//src_op_st_o[7:0]
WriteData(0x80);
WriteComm(0x61);//src_op_st_e[7:0]
WriteData(0x3f);
WriteComm(0x62);//src_op_ed_o[9:8] src_op_ed_e[9:8]
WriteData(0x21);
WriteComm(0x63);//src_op_ed_o[7:0]
WriteData(0x07);
WriteComm(0x64);//src_op_ed_e[7:0]
WriteData(0xe0);
WriteComm(0x65);//chopper
WriteData(0x02);
WriteComm(0x6e);
WriteData(0x14);
WriteComm(0xe5);
WriteData(0x06);
WriteComm(0xe6);
WriteData(0x00);
WriteComm(0xca);
WriteData(0x20);
WriteComm(0xcb);
WriteData(0x52);
WriteComm(0xcc);
WriteData(0x10);
WriteComm(0xcD);
WriteData(0x42);
WriteComm(0xD0);
WriteData(0x20);
WriteComm(0xD1);
WriteData(0x52);
WriteComm(0xD2);
WriteData(0x10);
WriteComm(0xD3);
WriteData(0x42);
WriteComm(0xD4);
WriteData(0x0a);
WriteComm(0xD5);
WriteData(0x32);
WriteComm(0x80);
WriteData(0x04);
//lvd
//DVDD_TRIM
//ESD_CTRL
//avdd_mux_st_o[7:0]
//avdd_mux_ed_o[7:0]
//avdd_mux_st_e[7:0]
//avdd_mux_ed_e[7:0]
//avcl_mux_st_o[7:0]
//avcl_mux_ed_o[7:0]
//avcl_mux_st_e[7:0]
//avcl_mux_ed_e[7:0]
//vgh_mux_st[7:0]
//vgh_mux_ed[7:0]
//gam_vrp0
//04
WriteComm(0xA0); //gam_VRN0 0- 63-
WriteData(0x00);
//00
WriteComm(0x81);
WriteData(0x08);
//gam_vrp1
//07
WriteComm(0xA1); //gam_VRN1 1- 62-
WriteData(0x06);
//05
WriteComm(0x82);
WriteData(0x05);
//gam_vrp2
//04
WriteComm(0xA2); //gam_VRN2 2- 61-
WriteData(0x03);
//02
WriteComm(0x86);
WriteData(0x17);
//gam_prp0
//17
WriteComm(0xA6); //gam_PRN0 8- 55-
WriteData(0x15); //15
WriteComm(0x87); //gam_prp1 40 23 7bit
WriteData(0x2A); //2A
WriteComm(0xA7); //gam_PRN1 40- 23-
WriteData(0x2A); //2A
WriteComm(0x83); //gam_vrp3 61 2 6bit
WriteData(0x37); //37
WriteComm(0xA3); //gam_VRN3 61- 2-
WriteData(0x37); //37
WriteComm(0x84); //gam_vrp4 62 1 6bit
WriteData(0x35); //35
WriteComm(0xA4); //gam_VRN4 62- 1-
WriteData(0x35); //35
WriteComm(0x85); //gam_vrp5 63 0 6bit
WriteData(0x3f); //3F
WriteComm(0xA5); //gam_VRN5 63- 0-
WriteData(0x3f); //3F
WriteComm(0x88); //gam_pkp0 4 59 5bit
WriteData(0x0A); //0A
WriteComm(0xA8); //gam_PKN0 4- 59-
WriteData(0x0A); //0A
WriteComm(0x89); //gam_pkp1 5 58 5bit
WriteData(0x12); //12
WriteComm(0xA9); //gam_PKN1 5- 58-
WriteData(0x11); //11
WriteComm(0x8a); //gam_pkp2 7 56 5bit
WriteData(0x19); //19
WriteComm(0xAa); //gam_PKN2 7- 56-
WriteData(0x18); //18
WriteComm(0x8b); //gam_PKP3 10 53 5bit
WriteData(0x0a); //0A
WriteComm(0xAb); //gam_PKN3 10- 53-
WriteData(0x0a); //0A
WriteComm(0x8c); //gam_PKP4 16 47 5bit
WriteData(0x10); //10
WriteComm(0xAc); //gam_PKN4 16- 47-
WriteData(0x10); //10
WriteComm(0x8d); //gam_PKP5 22 41 5bit
WriteData(0x12); //12
WriteComm(0xAd); //gam_PKN5 22- 41-
WriteData(0x11); //11
WriteComm(0x8e); //gam_PKP6 28 35 5bit
WriteData(0x11); //11
WriteComm(0xAe); //gam_PKN6 28- 35-
WriteData(0x11); //11
WriteComm(0x8f); //gam_PKP7 34 29 5bit
WriteData(0x11); //11
WriteComm(0xAf); //gam_PKN7 34- 29-
WriteData(0x10); //10
WriteComm(0x90); //gam_PKP8 46 17 5bit
WriteData(0x04); //04
WriteComm(0xB0); //gam_PKN8 46- 17-
WriteData(0x04); //04
WriteComm(0x91); //gam_PKP9 52 11 5bit
WriteData(0x0B); //0B
WriteComm(0xB1); //gam_PKN9 52- 11-
WriteData(0x0B); //0B
WriteComm(0x92); //gam_PKP10 58 5 5bit
WriteData(0x17); //17
WriteComm(0xB2); //gam_PKN10 58- 5-
WriteData(0x17); //17
WriteComm(0xff);
WriteData(0x00);
WriteComm(0x11);
system_delay_us(120*1000);
WriteComm(0x29);
system_delay_us(20*1000);
#if 0//2024 0329 by lj
WriteComm(0xff);
WriteData(0xa5);
WriteComm(0xE7); //TE_output_en
WriteData(0x10);
WriteComm(0x35); //TE_ interface_en
WriteData(0x00);//01
WriteComm(0x36);
WriteData(0xC0);//c0
WriteComm(0x3A);
WriteData(0x01);//01---565/00---666
WriteComm(0x40);
WriteData(0x01);//01:IPS/00:TN
WriteComm(0x41);
WriteData(0x03);//01--8bit//03--16bit
WriteComm(0x44); //VBP
WriteData(0x15);
WriteComm(0x45); //VFP
WriteData(0x15);
WriteComm(0x7d);//vdds_trim[2:0]
WriteData(0x03);
WriteComm(0xc1);//avdd_clp_en avdd_clp[1:0] avcl_clp_en avcl_clp[1:0]
WriteData(0xbb);//0xbb 88 a2
WriteComm(0xc2);//vgl_clp_en vgl_clp[2:0]
WriteData(0x05);
WriteComm(0xc3);//vgl_clp_en vgl_clp[2:0]
WriteData(0x10);
WriteComm(0xc6);//avdd_ratio_sel avcl_ratio_sel vgh_ratio_sel[1:0] vgl_ratio_sel[1:0]
WriteData(0x3e);
WriteComm(0xc7);//mv_clk_sel[1:0] avdd_clk_sel[1:0] avcl_clk_sel[1:0]
WriteData(0x25);
WriteComm(0xc8);// VGL_CLK_sel
WriteData(0x21);
WriteComm(0x7a);// user_vgsp
WriteData(0x51); //58
WriteComm(0x6f);// user_gvdd
WriteData(0x49); //4F
WriteComm(0x78);// user_gvcl
WriteData(0x65); //70 57——>65
WriteComm(0xc9);
WriteData(0x00);
WriteComm(0x67);
WriteData(0x11);
WriteComm(0x51);//gate_st_o[7:0]
WriteData(0x0a);
WriteComm(0x52);//gate_ed_o[7:0]
WriteData(0x7D); //7A
WriteComm(0x53);//gate_st_e[7:0]
WriteData(0x0a);
WriteComm(0x54);//gate_ed_e[7:0]
WriteData(0x7D); //7A
WriteComm(0x46);//fsm_hbp_o[5:0]
WriteData(0x0a);
WriteComm(0x47);//fsm_hfp_o[5:0]
WriteData(0x2a);
WriteComm(0x48);//fsm_hbp_e[5:0]
WriteData(0x0a);
WriteComm(0x49);//fsm_hfp_e[5:0]
WriteData(0x1a);
WriteComm(0x44); //VBP
WriteData(0x15);
WriteComm(0x45); //VFP
WriteData(0x15);
WriteComm(0x73);
WriteData(0x08);
WriteComm(0x74);
WriteData(0x10); //0A
WriteComm(0x56);//src_ld_wd[1:0] src_ld_st[5:0]
WriteData(0x43);
WriteComm(0x57);//pn_cs_en src_cs_st[5:0]
WriteData(0x42);
WriteComm(0x58);//src_cs_p_wd[6:0]
WriteData(0x3c);
WriteComm(0x59);//src_cs_n_wd[6:0]
WriteData(0x64);
WriteComm(0x5a);//src_pchg_st_o[6:0]
WriteData(0x41);
WriteComm(0x5b);//src_pchg_wd_o[6:0]
WriteData(0x3C);
WriteComm(0x5c);//src_pchg_st_e[6:0]
WriteData(0x02);
WriteComm(0x5d);//src_pchg_wd_e[6:0]
WriteData(0x3c);
WriteComm(0x5e);//src_pol_sw[7:0]
WriteData(0x1f);
WriteComm(0x60);//src_op_st_o[7:0]
WriteData(0x80);
WriteComm(0x61);//src_op_st_e[7:0]
WriteData(0x3f);
WriteComm(0x62);//src_op_ed_o[9:8] src_op_ed_e[9:8]
WriteData(0x21);
WriteComm(0x63);//src_op_ed_o[7:0]
WriteData(0x07);
WriteComm(0x64);//src_op_ed_e[7:0]
WriteData(0xe0);
WriteComm(0x65);//chopper
WriteData(0x02);
WriteComm(0xca); //avdd_mux_st_o[7:0]
WriteData(0x20);
WriteComm(0xcb); //avdd_mux_ed_o[7:0]
WriteData(0x52);
WriteComm(0xcc); //avdd_mux_st_e[7:0]
WriteData(0x10);
WriteComm(0xcD); //avdd_mux_ed_e[7:0]
WriteData(0x42);
WriteComm(0xD0); //avcl_mux_st_o[7:0]
WriteData(0x20);
WriteComm(0xD1); //avcl_mux_ed_o[7:0]
WriteData(0x52);
WriteComm(0xD2); //avcl_mux_st_e[7:0]
WriteData(0x10);
WriteComm(0xD3); //avcl_mux_ed_e[7:0]
WriteData(0x42);
WriteComm(0xD4); //vgh_mux_st[7:0]
WriteData(0x0a);
WriteComm(0xD5); //vgh_mux_ed[7:0]
WriteData(0x32);
//gammma boe4.3
WriteComm(0x80); //gam_vrp0
WriteData(0x00);
WriteComm(0xA0); //gam_VRN0
WriteData(0x00);
WriteComm(0x81); //gam_vrp1
WriteData(0x06);//07
WriteComm(0xA1); //gam_VRN1
WriteData(0x08);//06
WriteComm(0x82); //gam_vrp2
WriteData(0x03);//02
WriteComm(0xA2); //gam_VRN2
WriteData(0x03);//01
WriteComm(0x86); //gam_prp0
WriteData(0x14); //11
WriteComm(0xA6); //gam_PRN0
WriteData(0x14); //10
WriteComm(0x87); //gam_prp1
WriteData(0x2C); //27
WriteComm(0xA7); //gam_PRN1
WriteData(0x26); //27
WriteComm(0x83); //gam_vrp3
WriteData(0x37);
WriteComm(0xA3); //gam_VRN3
WriteData(0x37);
WriteComm(0x84); //gam_vrp4
WriteData(0x35);
WriteComm(0xA4); //gam_VRN4
WriteData(0x35);
WriteComm(0x85); //gam_vrp5
WriteData(0x3f);
WriteComm(0xA5); //gam_VRN5
WriteData(0x3f);
WriteComm(0x88); //gam_pkp0
WriteData(0x0A); //0b
WriteComm(0xA8); //gam_PKN0
WriteData(0x0A); //0b
WriteComm(0x89); //gam_pkp1
WriteData(0x13); //14
WriteComm(0xA9); //gam_PKN1
WriteData(0x12); //13
WriteComm(0x8a); //gam_pkp2
WriteData(0x18); //1a
WriteComm(0xAa); //gam_PKN2
WriteData(0x19); //1a
WriteComm(0x8b); //gam_PKP3
WriteData(0x0a);
WriteComm(0xAb); //gam_PKN3
WriteData(0x0a);
WriteComm(0x8c); //gam_PKP4
WriteData(0x17);//14
WriteComm(0xAc); //gam_PKN4
WriteData(0x0B);//08
WriteComm(0x8d); //gam_PKP5
WriteData(0x1A);//17
WriteComm(0xAd); //gam_PKN5
WriteData(0x09);//07
WriteComm(0x8e); //gam_PKP6
WriteData(0x1A); //16 //16
WriteComm(0xAe); //gam_PKN6
WriteData(0x08); //06 //13
WriteComm(0x8f); //gam_PKP7
WriteData(0x1F); //1B
WriteComm(0xAf); //gam_PKN7
WriteData(0x00); //07
WriteComm(0x90); //gam_PKP8
WriteData(0x08);//04
WriteComm(0xB0); //gam_PKN8
WriteData(0x00);//04
WriteComm(0x91); //gam_PKP9
WriteData(0x10);//0A
WriteComm(0xB1); //gam_PKN9
WriteData(0x06);//0A
WriteComm(0x92); //gam_PKP10
WriteData(0x19);//16
WriteComm(0xB2); //gam_PKN10
WriteData(0x15);//15
WriteComm(0xff);
WriteData(0x00);
WriteComm(0x11);
system_delay_us(120*1000);
WriteComm(0x29);
//#if 0
// WriteComm(0xff);
// WriteData(0xa5);
// WriteComm(0xE7); //TE_output_en
// WriteData(0x10);
// WriteComm(0x35); //TE_ interface_en
// WriteData(0x00);//01
// WriteComm(0x36);
// WriteData(0xC0);//c0
// WriteComm(0x3A);
// WriteData(0x01);//01---565/00---666
// WriteComm(0x40);
// WriteData(0x01);//01:IPS/00:TN
// WriteComm(0x41);
// WriteData(0x03);//01--8bit//03--16bit
// WriteComm(0x44); //VBP
// WriteData(0x15);
// WriteComm(0x45); //VFP
// WriteData(0x15);
// WriteComm(0x7d);//vdds_trim[2:0]
// WriteData(0x03);
// WriteComm(0xc1);//avdd_clp_en avdd_clp[1:0] avcl_clp_en avcl_clp[1:0]
// WriteData(0xbb);//0xbb 88 a2
// WriteComm(0xc2);//vgl_clp_en vgl_clp[2:0]
// WriteData(0x05);
// WriteComm(0xc3);//vgl_clp_en vgl_clp[2:0]
// WriteData(0x10);
// WriteComm(0xc6);//avdd_ratio_sel avcl_ratio_sel vgh_ratio_sel[1:0] vgl_ratio_sel[1:0]
// WriteData(0x3e);
// WriteComm(0xc7);//mv_clk_sel[1:0] avdd_clk_sel[1:0] avcl_clk_sel[1:0]
// WriteData(0x25);
// WriteComm(0xc8);// VGL_CLK_sel
// WriteData(0x21);
// WriteComm(0x7a);// user_vgsp
// WriteData(0x51); //58
// WriteComm(0x6f);// user_gvdd
// WriteData(0x49); //4F
// WriteComm(0x78);// user_gvcl
// WriteData(0x57); //70
// WriteComm(0xc9);
// WriteData(0x00);
// WriteComm(0x67);
// WriteData(0x11);
// WriteComm(0x51);//gate_st_o[7:0]
// WriteData(0x0a);
// WriteComm(0x52);//gate_ed_o[7:0]
// WriteData(0x7D); //7A
// WriteComm(0x53);//gate_st_e[7:0]
// WriteData(0x0a);
// WriteComm(0x54);//gate_ed_e[7:0]
// WriteData(0x7D); //7A
// WriteComm(0x46);//fsm_hbp_o[5:0]
// WriteData(0x0a);
// WriteComm(0x47);//fsm_hfp_o[5:0]
// WriteData(0x2a);
// WriteComm(0x48);//fsm_hbp_e[5:0]
// WriteData(0x0a);
// WriteComm(0x49);//fsm_hfp_e[5:0]
// WriteData(0x1a);
// WriteComm(0x44); //VBP
// WriteData(0x15);
// WriteComm(0x45); //VFP
// WriteData(0x15);
// WriteComm(0x73);
// WriteData(0x08);
// WriteComm(0x74);
// WriteData(0x10); //0A
// WriteComm(0x56);//src_ld_wd[1:0] src_ld_st[5:0]
// WriteData(0x43);
// WriteComm(0x57);//pn_cs_en src_cs_st[5:0]
// WriteData(0x42);
// WriteComm(0x58);//src_cs_p_wd[6:0]
// WriteData(0x3c);
// WriteComm(0x59);//src_cs_n_wd[6:0]
// WriteData(0x64);
// WriteComm(0x5a);//src_pchg_st_o[6:0]
// WriteData(0x41);
// WriteComm(0x5b);//src_pchg_wd_o[6:0]
// WriteData(0x3C);
// WriteComm(0x5c);//src_pchg_st_e[6:0]
// WriteData(0x02);
// WriteComm(0x5d);//src_pchg_wd_e[6:0]
// WriteData(0x3c);
// WriteComm(0x5e);//src_pol_sw[7:0]
// WriteData(0x1f);
// WriteComm(0x60);//src_op_st_o[7:0]
// WriteData(0x80);
// WriteComm(0x61);//src_op_st_e[7:0]
// WriteData(0x3f);
// WriteComm(0x62);//src_op_ed_o[9:8] src_op_ed_e[9:8]
// WriteData(0x21);
// WriteComm(0x63);//src_op_ed_o[7:0]
// WriteData(0x07);
// WriteComm(0x64);//src_op_ed_e[7:0]
// WriteData(0xe0);
// WriteComm(0x65);//chopper
// WriteData(0x02);
// WriteComm(0xca); //avdd_mux_st_o[7:0]
// WriteData(0x20);
// WriteComm(0xcb); //avdd_mux_ed_o[7:0]
// WriteData(0x52);
// WriteComm(0xcc); //avdd_mux_st_e[7:0]
// WriteData(0x10);
// WriteComm(0xcD); //avdd_mux_ed_e[7:0]
// WriteData(0x42);
// WriteComm(0xD0); //avcl_mux_st_o[7:0]
// WriteData(0x20);
// WriteComm(0xD1); //avcl_mux_ed_o[7:0]
// WriteData(0x52);
// WriteComm(0xD2); //avcl_mux_st_e[7:0]
// WriteData(0x10);
// WriteComm(0xD3); //avcl_mux_ed_e[7:0]
// WriteData(0x42);
// WriteComm(0xD4); //vgh_mux_st[7:0]
// WriteData(0x0a);
// WriteComm(0xD5); //vgh_mux_ed[7:0]
// WriteData(0x32);
// //gammma boe4.3
// WriteComm(0x80); //gam_vrp0
// WriteData(0x00);
// WriteComm(0xA0); //gam_VRN0
// WriteData(0x00);
// WriteComm(0x81); //gam_vrp1
// WriteData(0x06);//07
// WriteComm(0xA1); //gam_VRN1
// WriteData(0x08);//06
// WriteComm(0x82); //gam_vrp2
// WriteData(0x03);//02
// WriteComm(0xA2); //gam_VRN2
// WriteData(0x03);//01
// WriteComm(0x86); //gam_prp0
// WriteData(0x14); //11
// WriteComm(0xA6); //gam_PRN0
// WriteData(0x14); //10
// WriteComm(0x87); //gam_prp1
// WriteData(0x2C); //27
// WriteComm(0xA7); //gam_PRN1
// WriteData(0x26); //27
// WriteComm(0x83); //gam_vrp3
// WriteData(0x37);
// WriteComm(0xA3); //gam_VRN3
// WriteData(0x37);
// WriteComm(0x84); //gam_vrp4
// WriteData(0x35);
// WriteComm(0xA4); //gam_VRN4
// WriteData(0x35);
// WriteComm(0x85); //gam_vrp5
// WriteData(0x3f);
// WriteComm(0xA5); //gam_VRN5
// WriteData(0x3f);
// WriteComm(0x88); //gam_pkp0
// WriteData(0x0A); //0b
// WriteComm(0xA8); //gam_PKN0
// WriteData(0x0A); //0b
// WriteComm(0x89); //gam_pkp1
// WriteData(0x13); //14
// WriteComm(0xA9); //gam_PKN1
// WriteData(0x12); //13
// WriteComm(0x8a); //gam_pkp2
// WriteData(0x18); //1a
// WriteComm(0xAa); //gam_PKN2
// WriteData(0x19); //1a
// WriteComm(0x8b); //gam_PKP3
// WriteData(0x0a);
// WriteComm(0xAb); //gam_PKN3
// WriteData(0x0a);
// WriteComm(0x8c); //gam_PKP4
// WriteData(0x17);//14
// WriteComm(0xAc); //gam_PKN4
// WriteData(0x0B);//08
// WriteComm(0x8d); //gam_PKP5
// WriteData(0x1A);//17
// WriteComm(0xAd); //gam_PKN5
// WriteData(0x09);//07
// WriteComm(0x8e); //gam_PKP6
// WriteData(0x1A); //16 //16
// WriteComm(0xAe); //gam_PKN6
// WriteData(0x08); //06 //13
// WriteComm(0x8f); //gam_PKP7
// WriteData(0x1F); //1B
// WriteComm(0xAf); //gam_PKN7
// WriteData(0x00); //07
// WriteComm(0x90); //gam_PKP8
// WriteData(0x08);//04
// WriteComm(0xB0); //gam_PKN8
// WriteData(0x00);//04
// WriteComm(0x91); //gam_PKP9
// WriteData(0x10);//0A
// WriteComm(0xB1); //gam_PKN9
// WriteData(0x06);//0A
// WriteComm(0x92); //gam_PKP10
// WriteData(0x19);//16
// WriteComm(0xB2); //gam_PKN10
// WriteData(0x15);//15
// WriteComm(0xff);
// WriteData(0x00);
// WriteComm(0x11);
// system_delay_us(120*1000);
// WriteComm(0x29);
//#if 0
WriteComm(0xff);
WriteData(0xa5);
WriteComm(0xE7);//TE_output_en
WriteData(0x10);
WriteComm(0x35);//TE_ interface_en
WriteData(0x01);
WriteComm(0x3A);
WriteData(0x01);//00---666//01--565
WriteComm(0x40);
WriteData(0x01); //01:IPS/00:TN
WriteComm(0x41);
//2024.03.08修改
WriteData(0x03);
//WriteData(0x01);//01--8bit//03--16bit
WriteComm(0x55);
WriteData(0x01);
WriteComm(0x44);//VBP
WriteData(0x15);//21NVu NV3041A-01
WriteComm(0x45);//VFP
WriteData(0x15);//21
WriteComm(0x7d);//vdds_trim[2:0]
WriteData(0x03);//2.07V
WriteComm(0xc1);//avdd_clp_en avdd_clp[1:0] avcl_clp_en avcl_clp[1:0]
WriteData(0xab);//6.74V/-5.16V
WriteComm(0xc2);//vgh_clp_en vgl_clp[2:0]
WriteData(0x17);
WriteComm(0xc3);//vgl_clp_en vgl_clp[2:0]
WriteData(0x10);//-10.951
WriteComm(0xc6);//avdd_ratio_sel avcl_ratio_sel vgh_ratio_sel[1:0] vgl_ratio_sel[1:0]
WriteData(0x3a);//35
WriteComm(0xc7);//mv_clk_sel[1:0] avdd_clk_sel[1:0] avcl_clk_sel[1:0]
WriteData(0x25); //2e
WriteComm(0xc8);// VGL_CLK_sel
WriteData(0x11);
WriteComm(0x6f);// user_gvdd
WriteData(0x2f);
WriteComm(0x78);// user_gvcl
WriteData(0x4b);
//WriteComm(0x7a);// user_vgsp
//WriteData(0x5f);
//test
WriteComm(0x7a);// user_vgsp
WriteData(0x49);
WriteComm(0xc9);
WriteData(0x00);
//gate_ed
WriteComm(0x51);//gate_st_o[7:0]
//WriteData(0x4b);
WriteData(0x20);
WriteComm(0x52);//gate_ed_o[7:0]
WriteData(0x7c);
WriteComm(0x53);//gate_st_e[7:0]
//WriteData(0x45);
WriteData(0x1c);
WriteComm(0x54);//gate_ed_e[7:0]
WriteData(0x77);
////sorce oldNVu NV3041A-01
WriteComm(0x46);//fsm_hbp_o[5:0]
WriteData(0x0a);
WriteComm(0x47);//fsm_hfp_o[5:0]
WriteData(0x2a);
WriteComm(0x48);//fsm_hbp_e[5:0]
WriteData(0x0a);
WriteComm(0x49);//fsm_hfp_e[5:0]
WriteData(0x1a);
WriteComm(0x56);//src_ld_wd[1:0] src_ld_st[5:0]
WriteData(0x43);
WriteComm(0x57);//pn_cs_en src_cs_st[5:0]
WriteData(0x42);
WriteComm(0x58);//src_cs_p_wd[6:0]
WriteData(0x3c);
WriteComm(0x59);//src_cs_n_wd[6:0]
WriteData(0x64);
WriteComm(0x5a);//src_pchg_st_o[6:0]
WriteData(0x41);
WriteComm(0x5b);//src_pchg_wd_o[6:0]
WriteData(0x3c);
WriteComm(0x5c);//src_pchg_st_e[6:0]
WriteData(0x02);
WriteComm(0x5d);//src_pchg_wd_e[6:0]
WriteData(0x3c);
WriteComm(0x5e);//src_pol_sw[7:0]
WriteData(0x1f);
WriteComm(0x60);//src_op_st_o[7:0]
WriteData(0x80);
WriteComm(0x61);//src_op_st_e[7:0]
WriteData(0x3f);
WriteComm(0x62);//src_op_ed_o[9:8] src_op_ed_e[9:8]
WriteData(0x21);
WriteComm(0x63);//src_op_ed_o[7:0]
WriteData(0x07);
WriteComm(0x64);//src_op_ed_e[7:0]
WriteData(0xe0);
WriteComm(0x65);//chopper
WriteData(0x01);//01-A2,02--A1NVu NV3041A-01
//WriteComm(0x67);
//WriteData(0x33);//01
WriteComm(0xca); //avdd_mux_st_o[7:0]
WriteData(0x20);
WriteComm(0xcb); //avdd_mux_ed_o[7:0]
WriteData(0x52);
WriteComm(0xcc); //avdd_mux_st_e[7:0]
WriteData(0x10);
WriteComm(0xcD); //avdd_mux_ed_e[7:0]
WriteData(0x42);
WriteComm(0xD0); //avcl_mux_st_o[7:0]
WriteData(0x20);
WriteComm(0xD1); //avcl_mux_ed_o[7:0]
WriteData(0x52);
WriteComm(0xD2); //avcl_mux_st_e[7:0]
WriteData(0x10);
WriteComm(0xD3); //avcl_mux_ed_e[7:0]
WriteData(0x42);
WriteComm(0xD4); //vgh_mux_st[7:0]
WriteData(0x0a);
WriteComm(0xD5); //vgh_mux_ed[7:0]
WriteData(0x32);
WriteComm(0xe5); //DVDD_TRIM
WriteData(0x05); //1.65 05
WriteComm(0xe6); //ESD_CTRL
WriteData(0x00);
WriteComm(0x6e); //LVD_en
WriteData(0x14);
//gammma 01
WriteComm(0x80); //gam_vrp0 63
WriteData(0x04);
WriteComm(0xA0); //gam_VRN0 63
WriteData(0x00);
WriteComm(0x81); //gam_vrp1 62
WriteData(0x07);
WriteComm(0xA1); //gam_VRN1 62-
WriteData(0x05);
WriteComm(0x82); //gam_vrp2 61
WriteData(0x06);
WriteComm(0xA2); //gam_VRN2 61-NVu NV3041A-01
WriteData(0x04);
WriteComm(0x83); //gam_vrp3 2
WriteData(0x39);
WriteComm(0xA3); //gam_VRN3 2-
WriteData(0x39);
WriteComm(0x84); //gam_vrp4 1
WriteData(0x3a);
WriteComm(0xA4); //gam_VRN4 1-
WriteData(0x3a);
WriteComm(0x85); //gam_vrp5 0
WriteData(0x3f); //2a~39-0.43
WriteComm(0xA5); //gam_VRN5 0-
WriteData(0x3f);
WriteComm(0x86); //gam_prp0 50
WriteData(0x2c); //33
WriteComm(0xA6); //gam_PRN0 50-
WriteData(0x2a); //2a
//WriteComm(0x87); //gam_prp1 14
//WriteData(0x46); //2d
//WriteComm(0xA7); //gam_PRN1 14-
//WriteData(0x44); //2d
WriteComm(0x87); //gam_prp1 14
WriteData(0x43); //2d
WriteComm(0xA7); //gam_PRN1 14-
WriteData(0x47); //2d
WriteComm(0x88); //gam_pkp0 59
WriteData(0x08); //0b
WriteComm(0xA8); //gam_PKN0 59-
WriteData(0x08); //0b
WriteComm(0x89); //gam_pkp1 57
WriteData(0x0f); //14
WriteComm(0xA9); //gam_PKN1 57-
WriteData(0x0f); //14
WriteComm(0x8a); //gam_pkp2 54
WriteData(0x17); //1a
WriteComm(0xAa); //gam_PKN2 54-
WriteData(0x17); //1a
WriteComm(0x8b); //gam_PKP3 44
WriteData(0x10);
WriteComm(0xAb); //gam_PKN3 44-
WriteData(0x10);
WriteComm(0x8c); //gam_PKP4 38
WriteData(0x16);
WriteComm(0xAc); //gam_PKN4 38-
WriteData(0x16);//NVu NV3041A-01
WriteComm(0x8d); //gam_PKP5 32
WriteData(0x14);
WriteComm(0xAd); //gam_PKN5 32-
WriteData(0x14);
WriteComm(0x8e); //gam_PKP6 26
WriteData(0x11); //16
WriteComm(0xAe); //gam_PKN6 26-
WriteData(0x11); //13
WriteComm(0x8f); //gam_PKP7 20
WriteData(0x14); //1c
WriteComm(0xAf); //gam_PKN7 20-
WriteData(0x14); //0a
WriteComm(0x90); //gam_PKP8 10
WriteData(0x06);
WriteComm(0xB0); //gam_PKN8 10-
WriteData(0x06);
WriteComm(0x91); //gam_PKP9 6
WriteData(0x0f);
WriteComm(0xB1); //gam_PKN9 6-
WriteData(0x0f);
WriteComm(0x92); //gam_PKP10 4
WriteData(0x16);
WriteComm(0xB2); //gam_PKN10 4-
WriteData(0x16);
WriteComm(0xff);
WriteData(0x00);
WriteComm(0x11);
WriteComm(0x36);
WriteData(0x00);
system_delay_us(120*1000);
WriteComm(0x29);
system_delay_us(20*1000);
#endif
// LCD_READ_DATA(0x36);
// for(uint32_t i=0;i<pixel_size;i++)
// {
// color_buffer[i]=0xf800;
// }
// nv3041a_set_window(0,240-1,0,320-1);
// __PARALLEL_CS_SET(hparallel.PARALLELx);
// /* writer data */
// Parallel_write_data(&hparallel,(uint32_t *)&color_buffer,(pixel_size));
// __PARALLEL_CS_RELEASE(hparallel.PARALLELx);
// system_delay_us(2000*1000);
// nv3041a_set_window(0,100-1,0,100-1);
// for(uint32_t i=0;i<pixel_size;i++)
// {
// color_buffer[i]=0x001f;
// }
// nv3041a_display_dma(pixel_size,8,color_buffer);
//2024.03.08 by lj
#if 0
for(uint32_t i=0;i<pixel_size;i++)
{
color_buffer[i]=0xf800;
}
nv3041a_set_window(0,100-1,0,100-1);
__PARALLEL_CS_SET(hparallel.PARALLELx);
/* writer data */
Parallel_write_data(&hparallel,(uint32_t *)&color_buffer,(pixel_size));
system_delay_us(100);
__PARALLEL_CS_RELEASE(hparallel.PARALLELx);
system_delay_us(1000*1000);
#if 1
extern uint32_t *user_get_display_framebuffer(void);
uint16_t *buf = (uint16_t*)user_get_display_framebuffer();
nv3041a_set_window(0,100-1,0,100-1);
for(uint32_t i=0;i<pixel_size;i++)
{
color_buffer[i]=0x001f;
}
nv3041a_display_dma(pixel_size,8,color_buffer);
system_delay_us(2000*1000);
uint16_t color_buf[16]={
0xf800,0x001f,0x01e0,0xffff,0x0fff,
};
static uint8_t index=0;
while(1)
{
for(uint32_t i=0;i<480*272;i++)
{
buf[i]=color_buf[index];
}
++index;
index%=4;
nv3041a_set_window(0,480-1,0,272-1);
nv3041a_display_dma((480*272),8,buf);
system_delay_us(2000*1000);
if(index==0)break;
}
for(uint32_t i=0;i<480*272;i++)
{
buf[i]=0xf800;
}
nv3041a_set_window(0,480-1,0,272-1);
nv3041a_display_dma((480*272),8,buf);
system_delay_us(2000*1000);
#endif
LCD_Fill(0,0,240,320,0x001f);
system_delay_us(2000*1000);
LCD_Fill(0,0,240,320,0x01e0);
system_delay_us(2000*1000);
LCD_Fill(0,0,240,320,0xffff);
printf("LCD_Fill\r\n");
#endif
printf("2024.0417\r\n");
printf("LCD_OK\r\n");
}