⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytest.c

📁 嵌入式开发中触摸屏的显示读写设置,可以显示文字等简单功能
💻 C
📖 第 1 页 / 共 2 页
字号:
	struct lcdregs * lcdP = (struct lcdregs *) LCD_BASE_PHYSICAL;
	int i;
	
	//Toshiba LTM04C380K 4", (640*480)
	Panel_Info_T Toshiba_LTM04C380K =
                         {640,  // width
                          480,  // height
                          0,			// No extra lines
						  Panel_TypeLcd,		// Panel type
                          0,			// Single panel
	                      1,			// Active display
                          16,   // bits per pixel
                          65,//3,//65,   // horizontal sync pulse width
                          95,//139,//95,   // horizontal end of line pixel clock wait count
                          1,//15,//0x1,  // horizontal beginning of line pixel clock wait count
                          0,			// Reserved
                          1,//3,//0x1,  // vertical sync pulse width
                          0,//34,//0,    // vertical end of frame line clock wait count
                          45,//5,//45,   // vertical beginning of frame clock wait count
                          0,			// Reserved
						  1,			// frameSyncPol
						  1,			// horizSyncPol
						  1,			// clockPol
						  0,			// outputEnablePol
						  0,			// AC bias counter
						  0,			// Reserved
                         };

	for(i=0;i<614448;i++){
		FrameBuffer[i]=0;
	}
	
	Util_TestCpldLed();
	PrintfUartDef("~~~~~~led blinked~~~~\r\n");
    Buffer = (DM_FrameBuffer_T*)FrameBuffer;
	PrintfUartDef("Buffer = (DM_FrameBuffer_T*)FrameBuffer\r\n");
	///////////////////////
	//LCD GPIO pin setting
	// set pon direction
	LOAD_FIELD(GPIO_GPDR1_ADDR, 0x3f, GXXR_GPIO58_OFS, 6);		//GPIO pin 58~63(6 pins) as output
	LOAD_FIELD(GPIO_GPDR2_ADDR, 0x3fff, GXXR_GPIO64_OFS, 14);	//GPIO pin 64~77(14 pins) as output
	PrintfUartDef("LCD GPIO pin setting\r\n");
	//set alternative function
	LOAD_FIELD(GPIO_GAFR1_U_ADDR, 0xaaa, GAFR_AF58_OFS, 12);	//GPIO pin 58~63
	LOAD_FIELD(GPIO_GAFR2_L_ADDR, 0xaaaaaaa, GAFR_AF64_OFS, 28);//GPIO pin 64~77
	PrintfUartDef("set alternative function\r\n");
	//print message
	PrintfUartDef("Screen width:%d\r\n", Toshiba_LTM04C380K.panelWidth);
	PrintfUartDef("Screen height:%d\r\n",Toshiba_LTM04C380K.panelHeight);
	
	//setup lcd register
	setupLcd(&Toshiba_LTM04C380K);
    PrintfUartDef("setupLcd(&Toshiba_LTM04C380K)\r\n");
    //enable LCD clock
	CLKMGR_ENABLE_CLK(CKEN_CK_LCD_OFS);
	PrintfUartDef("enable LCD clock\r\n");
	// pcd = (LCLK / 2 / PixelClock) - 1, where LCLK = 100MHz, PixelClock = 25MHz
	IOW_REG_FIELD(struct lccr3Bits, &lcdP->lccr3, pcd, 1);
	PrintfUartDef("pcd = (LCLK )\r\n");
	PrintfUartDef("entering\r\n");
	PrintfUartDef("allocateFrameBuffer1 function address is 0x%x\r\n",(UINT)allocateFrameBuffer1);
	PrintfUartDef("InitLcdGraphics function address is 0x%x\r\n",(UINT)InitLcdGraphics);
	i=allocateFrameBuffer1((void *)FrameBuffer);//16 bpp
	PrintfUartDef("exiting with %d\r\n",i);
	PrintfUartDef("exiting\r\n");
	//allocateFrameBuffer();
	clearStatusReg();
	
	//InitPWM();
	XsPwmDrv_InitPWM0();

   	//enable device power and periphery device
	SET_BIT(BRD_PCR_ADDR, PCR_PER_ON_OFS);
	SET_BIT(BRD_PCR_ADDR, PCR_LCD_ON_OFS);		// lcd power on
	SET_BIT(BRD_PCR_ADDR, PCR_LIGHT_ON_OFS);	// backlight poweron
	
	Util_DelayUs(2000);
    
    //set to almost full duty
    PWM_WRITE_DUTY(0, 1000);	//

	Util_DelayMs(20);
	
	///////////////////////////////
	//finally enable LCD controller
	IOW_REG_FIELD(struct lccr0Bits,&lcdP->lccr0, len, 1);//onlcd

	//PrintfUartDef("Dumping LCD config register\r\n");
	//Dump_Bin((UINT)0x44000000,10);
	
	
}
int CEntry_TestLcd()
{ 	 
	VScreen_T VSALL,VSALL1;
	
	unsigned short fg;
	int i,j;
	int h,v ;
	int r,g,b;
	int max ;
	int DisplayDrawing;
	int error;
	DM_FrameBuffer_T *fbP;
	struct lcdregs * lcdP = (struct lcdregs *) LCD_BASE_PHYSICAL;
	LCDFrameDescriptorT *pFD = 	(LCDFrameDescriptorT *)Frame_Descriptor_Addr;
	void *FB=&FrameBuffer[0];
	
	//init UART device	
	char VSBUF[BUFFER_ROWS][BUFFER_COLS];
	char VSBUF1[BUFFER_ROWS][BUFFER_COLS];
	VSALL.startx=0;
	VSALL.starty=0;
	VSALL.endx=319;
	VSALL.endy=239;
	VSALL.rows=7;
	VSALL.columns=40;
	//VSALL.charBuf=NULL;
	VSALL.charBuf=&VSBUF[BUFFER_ROWS][BUFFER_COLS];
	VSALL.foreColor=(unsigned short)RGB565(0,63,0);
	VSALL.backgroundColor=(unsigned short)RGB565(18,25,25);
	
	/*VSALL1.startx=320;
	VSALL1.starty=240;
	VSALL1.endx=639;
	VSALL1.endy=479;
	VSALL1.rows=7;
	VSALL1.columns=20;
	//VSALL1.charBuf=NULL;
	VSALL1.charBuf=&VSBUF1[BUFFER_ROWS][BUFFER_COLS];
	VSALL1.foreColor=(unsigned short)RGB565(0,18,24);
	VSALL1.backgroundColor=(unsigned short)RGB565(31,40,15);*/
	
	/*for(i=0;i<614448;i++){
		FrameBuffer[i]=0;
	}*/
	
	BRD_UartInitDefaultFF();
	BRD_UartInitDefaultBT();
	XsUartDrv_SetDefaultUartDevice(UART_FF);
	
	PrintfUartDef("\r\n\n\n\n\n\nBegin LCD 16bpp display test!\r\n");
	PrintfUartDef("MMU config : 0x%x\r\n",GetMMUConf());

	//init LCD controller
	InitLcdGraphics ();	 
	PrintfUartDef("After init\r\n");
	PrintfUartDef("FDADR0=0x%X, 0x%X, 0x%X, 0x%X\r\n", lcdP->FDADR0, lcdP->FSADR0, lcdP->FIDR0, lcdP->LDCMD0);
	PrintfUartDef("Mem_FDADR0=0x%X, 0x%X, 0x%X, 0x%X\r\n", pFD->FDADR, pFD->FSADR, pFD->FIDR, pFD->LDCMD);

 	
	fbP = (DM_FrameBuffer_T *)FrameBuffer;
	h = 640;
	v = 480;
	DisplayDrawing = 0;
	
	
	    // display three color band
	    /*fg = (unsigned short)RGB565(31,0,0);
	    for (i = 0;i<h;i++)
	      for (j = 0; j<160;j++){
	      	fg=(unsigned short)RGB565(j/6,j/6,0);
	      	fbP->pixelP[i+j*h]=fg;
	        }
	    fg = (unsigned short)RGB565(0,63,0);
	    for (i = 0;i<h;i++)
	      for (j = 160; j<320;j++)
	        fbP->pixelP[i+j*h]=fg;
	    fg = (unsigned short)RGB565(0,0,31);
	    for (i = 0;i<h;i++)
	      for (j = 320; j<v;j++)
	        fbP->pixelP[i+j*h]=fg;*/
	        
	    PrintfUartDef("Personal Buffer at address 0x%x\r\n",&FrameBuffer[0]);
	    VSClear(&VSALL);
	    VSClear(&VSALL1);
	    //PrintfUartDef("the the addr of fon816 is 0x%x \r\n",(unsigned int )font816);
	    //PrintfUartDef("the the addr of fon816[256*16]=0x%x is 0x%x \r\n",(unsigned int)(font816[256*16-1]),(unsigned int)(&(font816[256*16-1])));
	    PrintfUartDef("the the addr of buffer is 0x%x \r\n",(unsigned int )FrameBuffer);
	    //for(i=0;i<48;i++) PrintfUartDef("the value at %d is 0x%d\r\n",i,(font816[i]));
	    VSPrint1(1 ,1 ,font[38] ,&VSALL);
	    VSPrint1(2 ,2 ,font[51] ,&VSALL);
	    VSPrint1(3 ,3 ,font[52] ,&VSALL);
	    VSPrint1(7 ,7 ,font[49] ,&VSALL);
	    VSPrint1(4 ,11 ,font[50] ,&VSALL);
	    //insertLine(5,&VSALL);
	    //insertLine(7,&VSALL);
	    //insertLine(1,&VSALL);
	    /*VSPrint1(7 ,7 ,font[53] ,&VSALL);
	    VSPrint1(1 ,6 ,font[53] ,&VSALL);
	    VSPrint1(1 ,1 ,font[48] ,&VSALL1);
	    VSPrint1(2 ,2 ,font[51] ,&VSALL1);
	    VSPrint1(3 ,3 ,font[52] ,&VSALL1);
	    VSPrint1(7 ,7 ,font[49] ,&VSALL1);
	    VSPrint1(4 ,11 ,font[50] ,&VSALL);*/
	    /*if(FONTSIZE==16) VSPrint1(1 ,1 ,font[33] ,&VSALL1);
	    if(FONTSIZE!=2) VSPrint1(1 ,1 ,font[34] ,&VSALL);*/
	
	PrintfUartDef("Copying picture 1\r\n");
  	//memcpy((void*)PIC1_RAM_BASE,(void*)PIC1_SRC_BASE,640*480*2);

	PrintfUartDef("Copying picture 2\r\n");	
	//memcpy((void*)PIC2_RAM_BASE,(void*)PIC2_SRC_BASE,640*480*2);
  
  	PrintfUartDef("Copy finished, waiting to press key...\r\n");

	PrintfUartDef("Reg_FDADR0=0x%X, 0x%X, 0x%X, 0x%X", lcdP->FDADR0, lcdP->FSADR0, lcdP->FIDR0, lcdP->LDCMD0);
	PrintfUartDef("Mem_FDADR0=0x%X, 0x%X, 0x%X, 0x%X\r\n", pFD->FDADR, pFD->FSADR, pFD->FIDR, pFD->LDCMD);

	while(1)
	{
   		PrintfUartDef("Press button S3 to switch to another brightness...\r\n");
		while(!GET_FIELD(BRD_JSSR_ADDR, 0, 7)) {}	//any bit between bit0 and bit6
		

    	//SwitchTo((unsigned*)PIC1_RAM_BASE);
    	Util_DelayS(1);
   	    //PWM_WRITE_DUTY(0, 512);		//set PWM0 duty to 50%(512/1024), that is change the brightness of LCD
   	    PWM_WRITE_DUTY(0, 250);
    	
   		PrintfUartDef("Press button S3 to switch to another brightness...\r\n");
		while(!GET_FIELD(BRD_JSSR_ADDR, 0, 7)) {}	//any bit between bit0 and bit6
		
    	//SwitchTo((unsigned*)PIC2_RAM_BASE);
    	Util_DelayS(1);
   	    PWM_WRITE_DUTY(0, 1023);	//set PWM duty to 100%(1023/1024), that will change the brightness of LCD

		PrintfUartDef("Reg_FDADR0=0x%X, 0x%X, 0x%X, 0x%X", lcdP->FDADR0, lcdP->FSADR0, lcdP->FIDR0, lcdP->LDCMD0);
		PrintfUartDef("Mem_FDADR0=0x%X, 0x%X, 0x%X, 0x%X\r\n", pFD->FDADR, pFD->FSADR, pFD->FIDR, pFD->LDCMD);
    }

	//close LCD controller
    PWM_WRITE_DUTY(0, 0);
    off();
   }
 
   
 void printPix(int intx,int inty,unsigned short color){
 
	DM_FrameBuffer_T *fbP;
	//fbP = (DM_FrameBuffer_T *)Frame_Buffer_P;
	fbP = (DM_FrameBuffer_T *)FrameBuffer;
	fbP->pixelP[intx+inty*640] = color;
}
void copyPix(int sx,int sy,int dx,int dy){
	DM_FrameBuffer_T *fbP;
	//fbP = (DM_FrameBuffer_T *)Frame_Buffer_P;
	fbP = (DM_FrameBuffer_T *)FrameBuffer;
	fbP->pixelP[dx+dy*640] = fbP->pixelP[sx+sy*640];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -