📄 flcd.c
字号:
result = getchar(); switch(result) { case '1': panel_width= 640; panel_height = 480; panel_type = 0; LCD_IO_Base = 0x90600000; int_num = 20; break; case '2': panel_width= 320; panel_height = 240; panel_type = 1; LCD_IO_Base = 0x90600000; int_num =20; break; case '3': panel_width= 640; panel_height = 480; panel_type = 0; LCD_IO_Base = 0x90600000; int_num = 20; break; case '4': panel_width= 320; panel_height = 240; panel_type = 1; LCD_IO_Base = 0x90600000; int_num = 20; break; case '5': panel_width= 640; panel_height = 480; panel_type = 0; LCD_IO_Base = 0x96500000; int_num = 2; break; case '6': panel_width= 320; panel_height = 240; panel_type = 1; LCD_IO_Base = 0x96500000; int_num=0; break; } pFrameBuffer = malloc( (panel_width* panel_height * 2 * 10 ) + 0x3f); // Maximum 16bpp 10 Frame for motion piture if(pFrameBuffer == NULL ) printf("memory allocate fail\n"); pFrameBuffer += 0x3F; pFrameBuffer = (unsigned char *) ((unsigned int ) pFrameBuffer & 0xffffffc0) ; SetFrameBase( pFrameBuffer ); Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16); saving_mode_burnning(); // *****************RGB 16/32 BPP vs Endian vs OSD ************** ColorBar_RGB( 1, LBLP, pFrameBuffer, panel_width, panel_height,0); OSD_Test(1, "RGB LBLP 1BPP"); //3/19 Τ拜肈 palette_ram_test(LCD_IO_Base); Vertical_Int_Test(int_num); ColorBar_RGB( 1, BBBP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB BBP 1BPP"); ColorBar_RGB( 1, LBBP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB LBBP 1BPP"); ColorBar_RGB( 2, LBLP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB LBLP 2BPP"); ColorBar_RGB( 2, BBBP, pFrameBuffer, panel_width, panel_height,0); OSD_Test(1, "RGB BBP 2BPP"); ColorBar_RGB( 2, LBBP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB LBBP 2BPP"); ColorBar_RGB( 4, LBLP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB LBLP 4BPP"); ColorBar_RGB( 4, BBBP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB BBP 4BPP"); ColorBar_RGB( 4, LBBP, pFrameBuffer, panel_width, panel_height,0); OSD_Test(1, "RGB LBBP 4BPP"); ColorBar_RGB( 8, LBLP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB LBLP 8BPP"); ColorBar_RGB( 8, BBBP, pFrameBuffer, panel_width, panel_height,0);// OSD_Test(1, "RGB BBP 8BPP"); ColorBar_RGB( 8, LBBP, pFrameBuffer, panel_width, panel_height,0); OSD_Test(1, "RGB LBBP 8BPP"); Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16); ColorBar_YCbCr_420( BBBP, pFrameBuffer, panel_width, panel_height, 0); OSD_Test(2, "YCBCR 420 BBBP"); ColorBar_YCbCr_420( LBBP, pFrameBuffer, panel_width, panel_height, 0);// OSD_Test(2, "YCBCR 420 LBBP"); ColorBar_YCbCr_420( LBLP, pFrameBuffer, panel_width, panel_height, 0);// OSD_Test(2, "YCBCR 420 LBLP"); SetYCbCr(422); ColorBar_YCbCr_422( BBBP, pFrameBuffer, panel_width, panel_height, 0); OSD_Test(2, "YCBCR 422 BBBP"); ColorBar_YCbCr_422( LBBP, pFrameBuffer, panel_width, panel_height, 0); // OSD_Test(2, "YCBCR 422 LBBP"); ColorBar_YCbCr_422( LBLP, pFrameBuffer, panel_width, panel_height, 0); // OSD_Test(2, "YCBCR 422 LBLP"); if( panel_type == 1 ) { Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16); SetEndian(LBBP); OSD_Off(LCD_IO_Base); Load_Image( "D:\\FTLCDc100\\Script\\ship565_320x240.bin", 153600, pFrameBuffer, LBBP); OSD_Test(1, "RGB LBBP 16 BPP"); SetEndian( BBBP); OSD_Off(LCD_IO_Base); Load_Image( "D:\\FTLCDc100\\Script\\ship565_320x240.bin", 153600, pFrameBuffer, BBBP); // OSD_Test(1, "RGB BBBP 16 BPP"); SetEndian( LBLP); Load_Image( "D:\\FTLCDc100\\Script\\ship565_320x240.bin", 153600, pFrameBuffer, LBLP);// OSD_Test(1, "RGB LBLP 16 BPP"); Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 24); SetEndian( BBBP); Set_DivNo(0xf); Load_Image( "D:\\FTLCDc100\\Script\\ship888_320x240.bin", 307200 , pFrameBuffer, BBBP);// OSD_Test(1, "RGB 24BPP"); Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16); animation_test( pFrameBuffer, "D:\\FTLCDc100\\Script\\mov3224\\mov3224.bin", 1536000, int_num ); } else { Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16); OSD_Off(LCD_IO_Base); SetEndian(LBBP); Load_Image( "D:\\FTLCDc100\\Script\\castle64565.bin", 614400, pFrameBuffer, LBBP);// OSD_Test(1, "RGB LBBP 16 BPP"); SetEndian( BBBP); OSD_Off(LCD_IO_Base); Load_Image( "D:\\FTLCDc100\\Script\\castle64565.bin", 614400, pFrameBuffer, BBBP);// OSD_Test(1, "RGB BBBP 16 BPP"); SetEndian( LBLP); OSD_Off(LCD_IO_Base); Load_Image( "D:\\FTLCDc100\\Script\\castle64565.bin", 614400, pFrameBuffer, LBLP); OSD_Test(1, "RGB LBLP 16 BPP"); Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 24); OSD_Off(LCD_IO_Base); Set_DivNo(0xf); Load_Image( "D:\\FTLCDc100\\Script\\samuel64888.bin", 1228800, pFrameBuffer, BBBP); OSD_Test(1, "RGB 32 BPP"); OSD_Off(LCD_IO_Base); Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16); animation_test(pFrameBuffer, "D:\\FTLCDc100\\Script\\animation565.bin", 6144000, int_num ); } ColorBar_RGB( 8, LBBP, pFrameBuffer, panel_width, panel_height,1); //***************************** 1bpp ******************************************* Init_LCD( LCD_IO_Base, FLcdModule, panel_type, 16); ColorBar_YCbCr_422( LBBP, pFrameBuffer, panel_width , panel_height, 1); ColorBar_YCbCr_422( BBBP, pFrameBuffer, panel_width , panel_height, 1); }/*Show_Picture( char *file, unsigned char *pFrameBuffer, int width, int height){ FILE *fptr; unsigned int bytes; fptr = fopen( file , "rb"); pFrameBuffer = malloc( (width *height *4 ) + 0x3f); pFrameBuffer += 0x3F; pFrameBuffer = (unsigned char *) ((unsigned int ) pFrameBuffer & 0xffffffc0) ; SetFrameBase( pFrameBuffer ); if( (bytes = fread(pFrameBuffer, sizeof(unsigned int) *640 *480 , 1 , fptr)) == NULL) { printf("File open error, read %d bytes \n", bytes); } }*/void SetFrameBase( unsigned char *pFrameBuffer ){ *(unsigned int *)(LCD_IO_Base + 0x10) = (unsigned int) pFrameBuffer;} void Init_LCD( volatile unsigned int LCD_Base, volatile LCDMTYPE_T *pLCDC, unsigned int lcd_type, unsigned char bpp){ *(volatile unsigned int *) (LCD_Base + 0x0 )= pLCDC[lcd_type].Timing0; *(volatile unsigned int *) (LCD_Base + 0x4 )= pLCDC[lcd_type].Timing1; *(volatile unsigned int *) (LCD_Base + 0x8 )= pLCDC[lcd_type].Timing2; // *(volatile unsigned int *) (LCD_Base + 0x10 )= 0x10000020;// *(volatile unsigned int *) (LCD_Base + 0x1c )= 0x00053a29; //YCbCR *(volatile unsigned int *) (LCD_Base + 0x1c ) = 0x00013a21; // Turn on LCD SetBPP( bpp ); Set_DivNo(6); }void SetBPP( unsigned char bpp){ *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xFFFFFFF1; switch( bpp) { case 1: *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xFFFFFFF1; *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000000; break; case 2: *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000002; break; case 4: *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000004; break; case 8: *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000006; break; case 16: *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000008; break; case 24: *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x0000000a; break; } } void SetEndian( unsigned char endian ){ *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xFFFFF9FF; switch( endian ) { case LBLP: break; case BBBP: *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000200; break; case LBBP: *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00000400; break; } }void SetYCbCr( int type ){ *(unsigned int *)(LCD_IO_Base + 0x1c) &= 0xfff9ffff; if( type == 422) { *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00040000; } else if( type == 420) *(unsigned int *)(LCD_IO_Base + 0x1c) |= 0x00060000; }void ColorBar_YCbCr_420( unsigned char endian, unsigned char *pFrameBuffer, int width, int height, int int_test){ unsigned char *CbPtr, *CrPtr, r, g, b; int i,j; OSD_Off(LCD_IO_Base); SetYCbCr(420); Set_DivNo(6); // SetBPP(8); r=0, g=0; b=255; rgb2ycbcr( &r, &g, &b ); *(unsigned int *)(LCD_IO_Base + 0x10) |= 0x20; CbPtr = pFrameBuffer + 0x80000; CrPtr = pFrameBuffer + 0xa0000; SetEndian( endian ); if(endian == BBBP) { for(i=0; i<height; i++) //*********** draw pattern { r=255, g=0; b=0; rgb2ycbcr( &r, &g, &b ); for(j=0; j<(width * 1/3 ); j++) { *(unsigned char *) (pFrameBuffer + i * width + (j & 0xFFFFFFFC ) + 3-(j%4) ) = r; if( ((i%2) == 0) && ((j%2) == 0) ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + ((j>>1) & 0xFFFFFFFC) + (3 - ((j>>1) %4) ) ) = g; if( ((i%2) == 0) && ((j%2) == 0) ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + ((j>>1) & 0xFFFFFFFC) + (3 - ((j>>1) %4)) )= b; } r=0, g=255; b=0; rgb2ycbcr( &r, &g, &b ); for( ; j<(width * 2/3 ); j++) { *(unsigned char *) (pFrameBuffer + i * width + (j & 0xFFFFFFFC ) + 3-(j%4) ) = r; if( ((i%2) == 0) && ((j%2) == 0) ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + ((j>>1) & 0xFFFFFFFC) + (3 - ((j>>1) %4) )) = g; if( ((i%2) == 0) && ((j%2) == 0) ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + ((j>>1) & 0xFFFFFFFC) + (3 - ((j>>1) %4))) = b; } r=0, g=0; b=255; rgb2ycbcr( &r, &g, &b ); for( ; j<width; j++) { *(unsigned char *) (pFrameBuffer + i * width + (j & 0xFFFFFFFC ) + 3-(j%4) ) = r; if( ((i%2) == 0) && ((j%2) == 0) ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + ((j>>1) & 0xFFFFFFFC) + (3 - ((j>>1) %4) ) )= g; if( ((i%2) == 0) && ((j%2) == 0) ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + ((j>>1) & 0xFFFFFFFC) + (3 - ((j>>1) %4)) )= b; } } // end of i loop } //end of if(BBBP) else { for(i=0; i<height; i++) //*********** draw pattern { r=255, g=0; b=0; rgb2ycbcr( &r, &g, &b ); for(j=0; j<(width * 1/3 ); j++) { *(unsigned char *) (pFrameBuffer + i * width + j ) = r; if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g; if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b; } r=0, g=255; b=0; rgb2ycbcr( &r, &g, &b ); for( ; j<(width * 2/3 ); j++) { *(unsigned char *) (pFrameBuffer + i * width + j) = r; if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g; if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b; } r=0, g=0; b=255; rgb2ycbcr( &r, &g, &b ); for( ; j<width; j++) { *(unsigned char *) (pFrameBuffer + i * width + j) = r; if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g; if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b; } } } /* for(i=0; i<height; i++) //*********** draw pattern { r=255, g=0; b=0; rgb2ycbcr( &r, &g, &b ); for(j=0; j<(width * 1/3 ); j++) { *(unsigned char *) (pFrameBuffer + i * width + (j>>2) + 3-(j%4) ) = r; if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g; if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b; } r=0, g=255; b=0; rgb2ycbcr( &r, &g, &b ); for( ; j<(width * 2/3 ); j++) { *(unsigned char *) (pFrameBuffer + i * width + j) = r; if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g; if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b; } r=0, g=0; b=255; rgb2ycbcr( &r, &g, &b ); for( ; j<width; j++) { *(unsigned char *) (pFrameBuffer + i * width + j) = r; if( (i%2) == 0 ) *(unsigned char *) (CbPtr + (width>>1) * (i>> 1) + (j>>1) ) = g; if( (i%2) == 0 ) *(unsigned char *) (CrPtr + (width>>1) * (i>> 1) + (j>>1) ) = b; } } */}void ColorBar_YCbCr_422( unsigned char endian, unsigned char *pFrameBuffer, int width, int height, int int_test){ int i,j; unsigned char r,g,b, result; OSD_Off(LCD_IO_Base); (volatile) FIFO_Under_Run=0; fLib_ConnectInt(34, UnderRun_Handler ); //it only can be UnmaskFIQ(2); SetFIQmode(2,LEVEL); SetBPP(16); SetEndian(endian); SetYCbCr(422); Set_DivNo(6); switch(endian) { case BBBP: printf("YCbCr BBBP Testing\n"); break; case LBLP: printf("YCbCr LBLP Testing\n"); break; case LBBP: printf("YCbCr LBBP Testing\n"); break; } for(i=0; i<height; i++) //*********** draw pattern { r=255, g=0; b=0; // Draw red Bar rgb2ycbcr( &r, &g, &b ); for(j=0; j< ( width * 1/3) *2 ; j=j+4) { if( endian == BBBP) { *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r; *(unsigned char *) (pFrameBuffer + i * width*2 + j+2 ) = g; *(unsigned char *) (pFrameBuffer + i * width*2 + j+1 ) = r; *(unsigned char *) (pFrameBuffer + i * width*2 + j ) = b; } else { *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r; *(unsigned char *) (pFrameBuffer + i * width*2 + j+2 ) = b; *(unsigned char *) (pFrameBuffer + i * width*2 + j+1 ) = r; *(unsigned char *) (pFrameBuffer + i * width*2 + j ) = g; } } r=0, g=255; b=0; // Draw green bar rgb2ycbcr( &r, &g, &b ); for( ; j< (width * 2/3 )*2 ; j=j+4) { if( endian == BBBP) { *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r; *(unsigned char *) (pFrameBuffer + i * width*2 + j+2 ) = g; *(unsigned char *) (pFrameBuffer + i * width*2 + j+1 ) = r; *(unsigned char *) (pFrameBuffer + i * width*2 + j ) = b; } else { *(unsigned char *) (pFrameBuffer + i * width*2 + j+3 ) = r;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -