📄 display.c
字号:
rINTSUBMSK &= ~(1<<17);//i80 I/F
}
else
{
rVIDINTCON = (0x3f<<20)|(3<<5)|(3<<2)|(1<<1)|(1<<0); //Win0/1 FIFO(empty)
rINTSUBMSK &= ~(1<<15);//RGB I/F FIFO int.
}
Display_Start(LCD_WIN_0);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
printf("Winow 0, press any key\n");
getchar();
LcdWindowOnOff(LCD_WIN_0,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
// Setting Window 1(24bpp)
Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_24BPP_888,180,100);
//printf("Sart:0x%x, End:0x%x, Ver:0x%x\n",*(int *)0x4c80006c,*(int *)0x4c800084,*(int *)0x4c80009c);
for(j=0;j<100;j++)
{
for(i=0;i<180;i++)
{
if(j%2)
{
if(i%2)
PutPixel(i,j,0xff0000);
else
PutPixel(i,j,0xffffff);
}
else
{
if(i%2)
PutPixel(i,j,0xffffff);
else
PutPixel(i,j,0xff0000);
}
}
}
lprintf((screen_width-64)/2,(screen_height-8)/2,0x0,"Window 1");
screen_width=lcd_horizon_value;
screen_height=lcd_line_value;
// WIN0/1 OSD(top)
*VIDOSDxA_Reg_Addr[1] =( ((screen_width-180)/2) << 11 )|( (0)<<0 );
// WIN0/1 OSD(bottom)
*VIDOSDxB_Reg_Addr[1] =( (((screen_width-180)/2)+180)-1 <<11 )|( (100-1)<<0 );
// WINCON0/1
*WINCONx_Reg_Addr[1] &= ~((1<<6)|(1<<1));
*WINCONx_Reg_Addr[1] |= (alpha_sel<<1);
// Alpha value(VIDOSD1C)
*VIDOSDxC_Reg_Addr[1] = (0xf<<20)|(0xf<<16)|(0xf<<12)|(0xf<<8)|(0xf<<4)|(0xf<<0);
printf("Winow 0 & 1 no-Color key and 0xf-Blending, press any key\n");
Display_Start(LCD_WIN_ALL);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
getchar();
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
*VIDOSDxC_Reg_Addr[1] = (0x9<<20)|(0x9<<16)|(0x9<<12)|(0x9<<8)|(0x9<<4)|(0x9<<0);
printf("Winow 0 & 1 no-Color key and 0x9-Blending, press any key\n");
Display_Start(LCD_WIN_ALL);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
getchar();
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
*WxKEYCON0_Reg_Addr[1] = (0<<26)|(1<<25)|(0<<24)|(0x000000);
*WxKEYCON1_Reg_Addr[1] = 0xff0000;
*VIDOSDxC_Reg_Addr[1] = (0x9<<20)|(0x9<<16)|(0x9<<12)|(0x9<<8)|(0x9<<4)|(0x9<<0);
printf("Winow 0 & 1 0xff0000-Color key and 0x9-Blending, press any key\n");
Display_Start(LCD_WIN_ALL);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
getchar();
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
*WxKEYCON0_Reg_Addr[1] &= ~(1<<25);
*VIDOSDxC_Reg_Addr[1] = (0x0<<20)|(0x0<<16)|(0x0<<12)|(0x0<<8)|(0x0<<4)|(0x0<<0);
printf("Winow 0 & 1 no-Color key and 0x0-Blending, press any key\n");
Display_Start(LCD_WIN_ALL);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
/* Ending Test */
Display_End(LCD_WIN_ALL);
rVIDINTCON=(0x3f<<20)|0;
rINTMSK |= (1<<16);
}
#endif
#if 0
void PlaneBlendingTest(void)
{
uint32 i;
int32 alpha_sel;
printf("\nSelect the alpha type which you want to test\n");
printf(" 0: alpha 0 1: alpha 1\n");
alpha_sel = GetIntNum();
if ((alpha_sel<0)||(alpha_sel>1))
alpha_sel=0;
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
// Setting Window 0
Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xf800);
LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x7e0);
LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x1f);
LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffff);
lprintf(50,20,0xffff,"Window 0");
// Setting Window 1
Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width/4*1-1, screen_height-1, 0xf800);
LCD_FilledRectangle(screen_width/4*1, 0, screen_width/4*2-1, screen_height-1, 0x7e0);
LCD_FilledRectangle(screen_width/4*2, 0, screen_width/4*3-1, screen_height-1, 0x1f);
LCD_FilledRectangle(screen_width/4*3, 0, screen_width-1, screen_height-1, 0xffff);
lprintf(50,100,0xffff,"Window 1");
*WINCONx_Reg_Addr[1] &= ~((1<<6)|(1<<1));
*WINCONx_Reg_Addr[1] |= (alpha_sel<<1);
*VIDOSDxC_Reg_Addr[1] = (0<<20)|(0<<16)|(0<<12)|(0xf<<8)|(0xf<<4)|(0xf<<0);
/*
LcdWindowOnOff(LCD_WIN_ALL,LCD_ON);
LcdEnvidOnOff(LCD_ON);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
LcdBacklightCon(LCD_ON);
*/
Display_Start(LCD_WIN_ALL);
printf("Press any key to start\n");
getchar();
for(i=0;i<8;i++)
{
if(lcd_if==I80_IF)
{
*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12);
Delay(10);
rCPUTRIGCON2 = 1;
}
else
*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|((i^0xf)<<8)|((i^0xf)<<4)|((i^0xf)<<0);
delayLoop(10000000);
}
/* Ending Test */
Display_End(LCD_WIN_ALL);
}
#endif
void PixelBlendingTest( void)
{
uint32 i;
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
// Setting Window 0
Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xf800);
LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x7e0);
LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x1f);
LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffff);
lprintf(50,20,0xffff,"Window 0");
// Setting Window 1
Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_16BPP_A555,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width/8*1-1, screen_height-1, 0x7c00);
LCD_FilledRectangle(screen_width/8*1, 0, screen_width/8*2-1, screen_height-1, 0x3e0);
LCD_FilledRectangle(screen_width/8*2, 0, screen_width/8*3-1, screen_height-1, 0x1f);
LCD_FilledRectangle(screen_width/8*3, 0, screen_width/8*4-1, screen_height-1, 0x7fff);
LCD_FilledRectangle(screen_width/8*4, 0, screen_width/8*5-1, screen_height-1, 0xfc00);
LCD_FilledRectangle(screen_width/8*5, 0, screen_width/8*6-1, screen_height-1, 0x83e0);
LCD_FilledRectangle(screen_width/8*6, 0, screen_width/8*7-1, screen_height-1, 0x801f);
LCD_FilledRectangle(screen_width/8*7, 0, screen_width-1, screen_height-1, 0xffff);
lprintf(0,100,0x7fff,"Window 1");
lprintf(0,120,0x7fff,"non blending area");
lprintf(screen_width/2,100,0xffff,"Window 1");
lprintf(screen_width/2,120,0xffff,"blending area");
*WINCONx_Reg_Addr[1] &= ~((1<<6)|(1<<1));
*WINCONx_Reg_Addr[1] |= (1<<6);
*VIDOSDxC_Reg_Addr[1] = (0x0<<20)|(0x0<<16)|(0x0<<12)|(0xf<<8)|(0xf<<4)|(0xf<<0);
Display_Start(LCD_WIN_ALL);
printf("Press any key to start\n");
getchar();
for(i=0;i<16;i++)
{
if(lcd_if==I80_IF)
{
*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|((i^0xf)<<8)|((i^0xf)<<4)|((i^0xf)<<0);
rCPUTRIGCON2 = 1;
}
else
*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|((i^0xf)<<8)|((i^0xf)<<4)|((i^0xf)<<0);
delayLoop(10000000);
}
/* Ending Test */
Display_End(LCD_WIN_ALL);
}
void Test_Blending_Win01(void)
{
int blending;
printf("\nSelect the blending mode which you want to test\n");
printf("(If you want to stop this test, press enter key)\n");
printf(" 0: Per Plane Blending 1: Per Pixel Blending\n");
blending = GetIntNum();
if (blending==0)
PlaneBlendingTest();
else if (blending==1)
PixelBlendingTest();
}
//==========================================
// ColorKey Test
//==========================================
void Test_ColorKey(void)// Figure 22-7. Color key operation
{
int i,j,k=0;
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
pISR_LCD = (unsigned)Display_ISR;
rINTMSK &= ~(1<<16);
if(lcd_if==I80_IF)
{
rVIDINTCON = (0x3f<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<0); //Main & Sub Sending complete
rINTSUBMSK &= ~(1<<17);//i80 I/F
}
else
{
rVIDINTCON = (0x3f<<20)|(3<<5)|(3<<2)|(1<<1)|(1<<0); //Win0/1 FIOF(empty)
rINTSUBMSK &= ~(1<<15);//RGB I/F FIFO int.
}
// Setting Window 0
Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width-1, screen_height-1, 0xfc0);
lprintf(5,10,0xffff,"Window0(Green)");
Display_Start(LCD_WIN_0);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
printf("Winow0(Green), press any key\n");
getchar();
LcdWindowOnOff(LCD_WIN_0,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
// Setting Window 1
Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
for(j=0;j<screen_height;j++)
for(i=0;i<screen_width;i++)
{
if(lcd_type==LANDSCAPE && lcd_size==WVGA)
PutPixel(i,j,pColorkey800_480[k++]);//800*480
else if(lcd_type==LANDSCAPE && lcd_size==QVGA)
PutPixel(i,j,pColorkey320_240[k++]);//320*240
else if(lcd_type==PORTRAIT && lcd_size==QVGA)
PutPixel(i,j,pColorkey240_320[k++]);//240*320
}
lprintf(5,40,0xffff,"Window1(Red)");
lprintf((screen_width-104)/2,screen_height/2,0xffff,"Window1(Blue)");
Display_Start(LCD_WIN_1);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
printf("Winow1(Red & Blue), press any key\n");
getchar();
LcdWindowOnOff(LCD_WIN_1,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
*WxKEYCON0_Reg_Addr[1] = (0<<26)|(1<<25)|(0<<24)|(0x000000);
*WxKEYCON1_Reg_Addr[1] = 0xff0000;
printf("Winow0&1 with Color key=0xff0000(Green & Blue), press any key\n");
Display_Start(LCD_WIN_ALL);
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
/* Ending Test */
Display_End(LCD_WIN_ALL);
rVIDINTCON = (0x3f<<20)|0;
rINTMSK |= (1<<16);
}
#if 0
void Test_ColorKey(void)
{
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
// Setting Window 0
Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,WINCONx_24BPP_888,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xff0000);
LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x00ff00);
LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x0000ff);
LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffffff);
lprintf(50,20,0xffffff,"Window 0");
// Setting Window 1
Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_24BPP_888,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width/4*1-1, screen_height-1, 0xff0000);
LCD_FilledRectangle(screen_width/4*1, 0, screen_width/4*2-1, screen_height-1, 0x00ff00);
LCD_FilledRectangle(screen_width/4*2, 0, screen_width/4*3-1, screen_height-1, 0x0000ff);
LCD_FilledRectangle(screen_width/4*3, 0, screen_width-1, screen_height-1, 0xffffff);
lprintf(50,100,0xffffff,"Window 1");
*WxKEYCON0_Reg_Addr[1] = (0<<26)|(1<<25)|(0<<24)|(0x000000);
*WxKEYCON1_Reg_Addr[1] = 0x000000;
Display_Start(LCD_WIN_ALL);
printf("Press any key to start\n");
getchar();
*WxKEYCON1_Reg_Addr[1] = 0xff0000;
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
delayLoop(30000000);
*WxKEYCON1_Reg_Addr[1] = 0x00ff00;
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
delayLoop(30000000);
*WxKEYCON1_Reg_Addr[1] = 0x0000ff;
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
delayLoop(30000000);
*WxKEYCON1_Reg_Addr[1] = 0xffffff;
if(lcd_if==I80_IF)
rCPUTRIGCON2=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -