#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;iTX_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) { #define TFT_43 0 display_backlight_clear(); #if TFT_43 == 1 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); WriteData(0x03);//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); #else WriteComm(0xF7); WriteData(0xA9); WriteData(0x51); WriteData(0X2C); WriteData(0X82); WriteComm(0xC0); WriteData(0x0F); WriteData(0x0f); // VGH = 5VCI VGL = -3VCI WriteComm(0xC1); WriteData(0x47); WriteComm(0xC5); WriteData(0x00); WriteData(0x4D); WriteData(0x80); WriteComm(0xB1); WriteData(0xB0); WriteData(0X11); WriteComm(0xB1); WriteData(0xA0); WriteComm(0xB4); WriteData(0x02); WriteComm(0x36);//旋转180° // WriteData(0x28); WriteData(0xE8); WriteComm(0x3A); WriteData(0x55); //RGB565 WriteComm(0x20); WriteData(0x00); //IPS WriteComm(0xE9); WriteData(0x00); WriteComm(0xF7); WriteData(0xA9); WriteData(0x51); WriteData(0x2C); WriteData(0x82); WriteComm(0xE0); WriteData(0x00); WriteData(0x07); WriteData(0x0B); WriteData(0x03); WriteData(0x0F); WriteData(0x05); WriteData(0x30); WriteData(0x56); WriteData(0x47); WriteData(0x04); WriteData(0x0B); WriteData(0x0A); WriteData(0x2D); WriteData(0x37); WriteData(0x0F); WriteComm(0xE1); WriteData(0x00); WriteData(0x0E); WriteData(0x13); WriteData(0x04); WriteData(0x11); WriteData(0x07); WriteData(0x39); WriteData(0x45); WriteData(0x50); WriteData(0x07); WriteData(0x10); WriteData(0x0D); WriteData(0x32); WriteData(0x36); WriteData(0x0F); WriteComm(0x11); system_delay_us(120*1000); // Delay(480); WriteComm(0x29); #endif // LCD_READ_DATA(0x36); // for(uint32_t i=0;i