📄 display.c
字号:
bpp = GetIntNum();
if( (bpp<0)||(bpp>14) ) break;
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
Basic_Display_Setting(window,LCD_BUF_0,bpp,lcd_horizon_value,lcd_line_value);
LCD_ClearScr(0);
Prepare_Image(window,bpp);
Display_Start(window);
Display_End(window);
}
}
}
//
//==========================================
//==========================================
// Blending(per-plane or per-pixel) Test
//
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);
printf("Press any key to start\n");
getchar();
for(i=0;i<8;i++)
{
*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|((i^0xf)<<8)|((i^0xf)<<4)|((i^0xf)<<0);
//*VIDOSDxC_Reg_Addr[1] = (i<<20)|(i<<16)|(i<<12)|(i<<8)|(i<<4)|(i<<0);
delayLoop(10000000);
}
/* Ending Test */
Display_End(LCD_WIN_ALL);
}
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);
LcdWindowOnOff(LCD_WIN_ALL,LCD_ON);
LcdEnvidOnOff(LCD_ON);
printf("Press any key to start\n");
getchar();
for(i=0;i<16;i++)
{
*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)
{
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;
LcdWindowOnOff(LCD_WIN_ALL,LCD_ON);
LcdEnvidOnOff(LCD_ON);
printf("Press any key to start\n");
getchar();
*WxKEYCON1_Reg_Addr[1] = 0xff0000;
delayLoop(30000000);
*WxKEYCON1_Reg_Addr[1] = 0x00ff00;
delayLoop(30000000);
*WxKEYCON1_Reg_Addr[1] = 0x0000ff;
delayLoop(30000000);
*WxKEYCON1_Reg_Addr[1] = 0xffffff;
delayLoop(30000000);
/* Ending Test */
Display_End(LCD_WIN_ALL);
}
//
//==========================================
//==========================================
// ColorMap Test function
//
void Test_ColorMap(void)
{
int8 window=-1;
uint32 color_map=0;
while(1)
{
printf("\nSelect the window # which you want to test\n");
printf("(If you want to stop this test, press enter key)\n");
printf(" 0: Window 0 1: Window 1 \n");
window = GetIntNum();
if( window==(-1) ) return;
else
{
switch(window)
{
case 0:
color_map = 0xffff00;
break;
case 1:
color_map = 0x00ffff;
break;
default:
color_map = 0;
break;
}
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
Basic_Display_Setting(window,LCD_BUF_0,WINCONx_24BPP_888,lcd_horizon_value,lcd_line_value);
LCD_ClearScr(0);
*WINxMAP_Reg_Addr[window] = (1<<24)|(color_map); //color map enable
Display_Start(window);
Display_End(window);
}
}
}
//
//==========================================
//==========================================
// CPU Interface Test
//
void Test_DisplayFramebufferCpuIf_QVGA_GOM(void)
{
U32 i,data;
U32 *framebuffer;
printf("CPU I/F Display Controller Test!\n");
framebuffer = (U32 *)LCD_FRAME_BUFFER;
for(i=0; i<240*320*2/4; i++) {
//data=cpuiftestimg[i*2+1];
//data |= (cpuiftestimg[i*2] <<16);
data=0x001f;
data |= (0x001f <<16);
*framebuffer ++ = data;
}
rVIDCON0 =0;
rWINCON0 =0;
rWINCON1 =0;
rVIDCON0 = (2<<22)|(0<<19)|(0<<16)|(0x1<<6)|(1<<5)|(1<<4)|(0<<2); // VIDOUT = System I/F for Main LDI, output data format = 16bit mode, Video Clock=HCLK
rVIDTCON2 = (319<<11)|(239);
rWINCON0 = (1<<18)|(2<<9)|(5<<2); // 4word burst, 16bpp,
rWINCON1 = (2<<9)|(5<<2); // 4word burst, 16bpp,
rVIDOSD0A = (0<<11)|(0);
rVIDOSD0B = (239<<11)|(319);
rVIDOSD1A = (0<<11)|(0);
rVIDOSD1B = (239<<11)|(319);
rVIDW00ADD0B0 = LCD_FRAME_BUFFER;
rVIDW00ADD0B1 = LCD_FRAME_BUFFER + 320*240*2;
//rVIDW01ADD0 = LCD_FRAME_BUFFER;
//rVIDW01ADD1 = LCD_FRAME_BUFFER + 320*240*2;
rSYSIFCON0 = (0x1<<16)|(0x1<<12)|(0x5<<8)|(0x1<<4)|(1<<2)|(1<<1)|(1); // CS_SETUP=0x1, WR_SETUP=0x1, WR_ACT=0x2, WR_HOLD=0x1, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
//rSYSIFCON1 = (0xf<<16)|(0xf<<12)|(0xf<<8)|(0xf<<4)|(1<<2)|(1<<1)|(1); // CS_SETUP=0x1, WR_SETUP=0x1, WR_ACT=0x2, WR_HOLD=0x1, RSPOL=HIGH, SUCCEUP=Successive, SYSIFEN=Enable
rWINCON0 |= 1;
//rWINCON0 |= 1;
rVIDCON0 |= 3;
//rCPUTRIGCON1 = 1;
Delay(100);
rCPUTRIGCON2 = 1;
printf("If you want to stop, press any key!\n");
printf("rSYSIFCON0:0x%x\n",rSYSIFCON0);
Uart_getc();
rWINCON1 &= ~1;
rVIDCON0 &= ~3;
}
void Test_DisplayFramebufferCpuIf_OUTPUT_FORMAT(void)
{
U32 i,data;
U32 *framebuffer;
printf("CPU I/F Display Controller Test!\n");
//framebuffer = (U32 *)LCD_FRAME_BUFFER;//window 0
framebuffer = (U32 *)(LCD_FRAME_BUFFER+0x200000);//window 1
/*
for(i=0; i<240*320*2/4; i++) {
//data=cpuiftestimg[i*2+1];
//data |= (cpuiftestimg[i*2] <<16);
data=0x001f;
data |= (0x001f <<16);
}
*/
for(i=0; i<240*320; i++) {
//data=0x00003f;
data=0x0000ff;
*framebuffer ++ = data;
}
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
Basic_Display_Setting_CPUIF_OUTPUT_FORMAT(1,0,WINCONx_18BPP_666,lcd_horizon_value,lcd_line_value);
rVIDCON0 = rVIDCON0 & ~((0x7<<19)|(0x7<<16)) | (0x4<<16);
rWINCON1 = rWINCON1 & ~(0xf<<2) | (0xb<<2);
Display_Start_CPUIF(1);
Display_End(LCD_WIN_ALL);
}
void Test_DisplayFramebufferCpuIf_Bufferchange(void)
{
U32 i,data;
U32 *framebuffer0_0, *framebuffer0_1;
printf("CPU I/F Display Controller Test!\n");
framebuffer0_0 = (U32 *)LCD_FRAME_BUFFER;//window 0
framebuffer0_1 = (U32 *)(LCD_FRAME_BUFFER+0x100000);//window 1
for(i=0; i<240*320*2/4; i++) {
//data=cpuiftestimg[i*2+1];
//data |= (cpuiftestimg[i*2] <<16);
data=0xf800;
data |=(U32) (0xf800 <<16);
*framebuffer0_0 ++ = data;
}
for(i=0; i<240*320*2/4; i++) {
//data=cpuiftestimg[i*2+1];
//data |= (cpuiftestimg[i*2] <<16);
data=0x001f;
data |= (0x001f <<16);
*framebuffer0_1 ++ = data;
}
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
Basic_Display_Setting_CPUIF_OUTPUT_FORMAT(0,1,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
rWINCON0 = rWINCON0 & ~(0x1<<22) | (1<<22);
rVIDW00ADD0B0 = LCD_FRAME_BUFFER;
rVIDW00ADD1B0 = LCD_FRAME_BUFFER + (320*240*2);
rVIDW00ADD0B1 = LCD_FRAME_BUFFER+0x100000;
rVIDW00ADD1B1 = LCD_FRAME_BUFFER+0x100000 + (320*240*2);
Display_Start_CPUIF(0);
//Display_End(LCD_WIN_ALL);
Uart_getc();
Display_Start_CPUIF(0);
//Display_End(LCD_WIN_ALL);
Uart_getc();
Display_Start_CPUIF(0);
//Display_End(LCD_WIN_ALL);
Uart_getc();
Display_Start_CPUIF(0);
//Display_End(LCD_WIN_ALL);
}
void Test_DisplayFramebufferCpuIf_QVGA1(void)
{
int8 image,window,buffer;
uint32 i,j,k=0;
printf("\nSelect the window # which you want to test\n");
printf(" 0: Window 0 1: Window 1\n");
window = GetIntNum();
if( (window<0) || (window>1) ) return;
if (window==0)
{
printf("\nSelect the buffer # which you want to test\n");
printf(" 0: Buffer 0 1: Buffer 1\n");
buffer = GetIntNum();
if( (buffer<0) || (buffer>1) ) return;
} else {
buffer = 0;
}
printf("\nSelect the image which you want to display\n");
printf(" 1: RGBW (16bpp) 2: Snail (16bpp) \n");
image = GetIntNum();
if(image == 1) //RGBW
{
Basic_Display_Setting_CPUIF(window,buffer,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
LCD_FilledRectangle(0, 0, screen_width-1, screen_height/4*1-1, 0xf100);
LCD_FilledRectangle(0, screen_height/4*1, screen_width-1, screen_height/4*2-1, 0x07c0);
LCD_FilledRectangle(0, screen_height/4*2, screen_width-1, screen_height/4*3-1, 0x001f);
LCD_FilledRectangle(0, screen_height/4*3, screen_width-1, screen_height-1, 0xffff);
lprintf(130,80,0xffff,"Hello~");
}
else if(image == 2) //Snail
{
Basic_Display_Setting_CPUIF(window,buffer,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
for(j=0;j<screen_height;j++)
for(i=0;i<screen_width;i++)
PutPixel(i,j,snail16bpp[k++]);
}
else
{
printf("You entered wrong number..\n");
return;
}
rVIDINTCON = (1<<18)|(1<<17);
rVIDINTCON |= (1<<0);
pISR_LCD = (unsigned)Display_ISR0;
rINTMSK &= ~(1<<16);
rINTSUBMSK &= ~(1<<17);
Display_Start_CPUIF(window);
printf("\n >>> display through window %d[%s] is going on...\n",window,lcd_bpp_mode[WINCONx_16BPP_565]);
Display_End(window);
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -