📄 mytest.c
字号:
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 + -