?? library.c
字號:
//////////
// Function Name : LoadFromFile
// Function Description : This function download the file from Host(PC)
// Input : fileName - file name
// uDstAddr - address to download
// Output : file size
// Version :
// added by rb1004
u32 LoadFromFile(const char* fileName, u32 uDstAddr)
{
u32 uFileSize;
#if (SEMIHOSTING)
u32 read;
u32 i, uQuotient, uRemainder, uWriteAddr;
FILE* fp = fopen(fileName, "rb");
Assert(fp);
fseek(fp, 0, SEEK_END);
uFileSize = ftell(fp);
fseek(fp, 0, SEEK_SET);
//rewind(fp);
uWriteAddr = uDstAddr;
uQuotient = uFileSize/10000;
uRemainder = uFileSize%10000;
for(i=0; i<uQuotient ; i++)
{
read = fread((void *)uWriteAddr, sizeof(unsigned char), 10000, fp);
Assert(read==10000);
uWriteAddr += 10000;
}
read = fread((void *)uWriteAddr, sizeof(unsigned char), uRemainder, fp);
Assert(read==uRemainder);
fclose(fp);
#else
printf(" Sorry! It is not ready.\n");
#endif
return uFileSize;
}
void LoadFromFile1(const char* fileName, u32 uDstAddr, u32* uFileSize)
{
#if SEMIHOSTING
u32 i, uQuotient, uRemainder, uWriteAddr;
FILE* fp = fopen(fileName, "rb");
Assert(fp);
fseek(fp, 0, SEEK_END);
*uFileSize = ftell(fp);
rewind(fp);
uWriteAddr = uDstAddr;
uQuotient = *uFileSize/10000;
uRemainder = *uFileSize%10000;
for(i=0; i<uQuotient ; i++)
{
read = fread((void *)uWriteAddr, sizeof(unsigned char), 10000, fp);
Assert(read==10000);
uWriteAddr += 10000;
}
read = fread((void *)uWriteAddr, sizeof(unsigned char), uRemainder, fp);
Assert(read==uRemainder);
fclose(fp);
//read = fread((void *)uDstAddr, sizeof(unsigned char), *uFileSize, fp);
//Assert(read==*uFileSize);
//fclose(fp);
#else
Disp(" Sorry! It is not ready.\n");
#endif
}
//////////
// Function Name : SaveToFile
// Function Description : This function upload the file to Host(PC)
// Input : fileName - file name
// fileSize - upload file size
// uSrcAddr - address to download
// Output : None
// Version :
// added by rb1004
void SaveToFile(const char* fileName, u32 fileSize, u32 uSrcAddr)
{
#if (SEMIHOSTING)
u32 written;
u32 i, uQuotient, uRemainder, uWriteAddr;
FILE* fp = fopen(fileName, "wb");
Assert(fp);
uWriteAddr = uSrcAddr;
uQuotient = fileSize/10000;
uRemainder = fileSize%10000;
//written = fwrite((void *)uSrcAddr, sizeof(unsigned char), fileSize, fp);
//Assert(written == fileSize);
for(i=0; i<uQuotient ; i++)
{
written = fwrite((void *)uWriteAddr, sizeof(unsigned char), 10000, fp);
Assert(written==10000);
uWriteAddr += 10000;
}
written = fwrite((void *)uWriteAddr, sizeof(unsigned char), uRemainder, fp);
Assert(written==uRemainder);
fclose(fp);
#else
UART_Printf(" Sorry! It is not ready.\n");
#endif
}
//////////
// Function Name : ConvertBmpToRgb16bpp
// Function Description : This function converts the BMP format to 16RGB format
// Input : fromAddr - source address
// toAddr - destination address
// xSize - image x size
// ySize - image y size
// Output : file size
// Version :
void ConvertBmpToRgb16bpp(u32 fromAddr, u32 toAddr, u32 xSize, u32 ySize)
{
u32 i,x,y;
u16 *lcdFramePtr;
u16 *tempPtr;
u16 temp[IMAGE_MAXSIZE];
u32 tempBuffer = fromAddr + 0x400000; // up to 1600x1200
u8 b,g,r;
u8 *srcPtr=(u8 *)(fromAddr+54);
lcdFramePtr=(u16 *)(toAddr);
for(y=0;y<ySize;y++) {
for(x=0;x<xSize*3;x++) {
b=*srcPtr++;
g=*srcPtr++;
r=*srcPtr++;
*lcdFramePtr++=(r>>3)<<11|(g>>2)<<5|(b>>3)<<0;
}
}
lcdFramePtr=(u16 *)(toAddr+xSize*ySize*2-2);
tempPtr=(u16 *)(tempBuffer);
for(y=0;y<xSize*ySize;y++) {
*tempPtr++=*lcdFramePtr--;
}
lcdFramePtr=(u16 *)(toAddr);
tempPtr=(u16 *)(tempBuffer);
for(y=0;y<ySize;y++) {
for(x=0;x<xSize;x++) {
temp[(xSize-1)-x]=*tempPtr++;
}
if(x==xSize) {
for(i=0;i<xSize;i++)
*lcdFramePtr++=temp[i];
}
}
}
//////////
// Function Name : ConvertBmpToRgb24bpp
// Function Description : This function converts the BMP format to 24RGB format
// Input : fromAddr - source address
// toAddr - destination address
// xSize - image x size
// ySize - image y size
// Output : file size
// Version :
void ConvertBmpToRgb24bpp(u32 fromAddr, u32 toAddr, u32 xSize, u32 ySize)
{
u32 i,x,y;
u32 *lcdFramePtr,*tempPtr;
u32 temp[IMAGE_MAXSIZE];
u32 tempBuffer = fromAddr + 0x760000; // up to 1600x1200
u8 b,g,r;
u8 *srcPtr=(u8 *)(fromAddr+54);
lcdFramePtr=(u32 *)(toAddr);
for(y=0;y<xSize*ySize;y++) {
b=*srcPtr++;
g=*srcPtr++;
r=*srcPtr++;
*lcdFramePtr++=(r<<16)|(g<<8)|(b<<0);
}
lcdFramePtr=(u32 *)(toAddr+xSize*ySize*4-4);
tempPtr=(u32 *)(tempBuffer);
for(y=0;y<xSize*ySize;y++) {
*tempPtr++=*lcdFramePtr--;
}
lcdFramePtr=(u32 *)(toAddr);
tempPtr=(u32 *)(tempBuffer);
for(y=0;y<ySize;y++) {
for(x=0;x<xSize;x++) {
temp[(xSize-1)-x]=*tempPtr++;
}
if(x==xSize) {
for(i=0;i<xSize;i++)
*lcdFramePtr++=temp[i];
}
}
}
void ConvertImgSzToNumber(IMG_SIZE eSize, u32* uHsz, u32* uVsz)
{
if (eSize == UXGA)
*uHsz = 1600, *uVsz = 1200;
else if (eSize == SXGA)
*uHsz = 1280, *uVsz = 1024;
else if (eSize == SVGA)
*uHsz = 800, *uVsz = 600;
else if (eSize == VGA)
*uHsz = 640, *uVsz = 480;
else if (eSize == QVGA)
*uHsz = 320, *uVsz = 240;
else if (eSize == QQVGA)
*uHsz = 160, *uVsz = 120;
else if (eSize == CIF)
*uHsz = 352, *uVsz = 288;
else if (eSize == QCIF)
*uHsz = 172, *uVsz = 144;
else
Assert(0);
}
REGINFO sRegInfo[] =
{
#if 0
//MFC
{"rCodeRun ", MFC_BASE+0x00, 1 , WO, DPDB, 0, 0},
{"rCodeDownLoad ", MFC_BASE+0x04, 32, WO, DPDB, 0, 0},
{"rHostIntReq ", MFC_BASE+0x08, 1 , WO, DPDB, 0, 0},
{"rBitIntClear ", MFC_BASE+0x0C, 1 , WO, DPDB, 0, 0},
{"rBitIntSts ", MFC_BASE+0x10, 1 , RO, DPDB, 0, 0},
{"rBitCodeReset ", MFC_BASE+0x14, 1 , WO, DPDB, 0, 0},
{"rBitCurPc ", MFC_BASE+0x18, 14, RO, DPDB, 0, 0},
//
{"rCodeBufAddr ", MFC_BASE+0x100, 32, RW, DPDB, 0, 0},
{"rWorkBufAddr ", MFC_BASE+0x104, 32, RW, DPDB, 0, 0},
{"rParaBufAddr ", MFC_BASE+0x108, 32, RW, DPDB, 0, 0},
{"rBitStreamCtrl ", MFC_BASE+0x10C, 4 , RW, DPDB, 0, 0},
{"rFrameMemCtrl ", MFC_BASE+0x110, 1 , RW, DPDB, 0, 0},
{"rDecFuncCtrl ", MFC_BASE+0x114, 1 , RW, DPDB, 0, 0},
{"rBitWorkBufCtrl ", MFC_BASE+0x11C, 1 , RW, DPDB, 0, 0},
{"rBitStreamRdPtr0 ", MFC_BASE+0x120, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr0 ", MFC_BASE+0x124, 32, RW, DPDB, 0, 0},
{"rBitStreamRdPtr1 ", MFC_BASE+0x128, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr1 ", MFC_BASE+0x12C, 32, RW, DPDB, 0, 0},
{"rBitStreamRdPtr2 ", MFC_BASE+0x130, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr2 ", MFC_BASE+0x134, 32, RW, DPDB, 0, 0},
{"rBitStreamRdPtr3 ", MFC_BASE+0x138, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr3 ", MFC_BASE+0x13C, 32, RW, DPDB, 0, 0},
{"rBitStreamRdPtr4 ", MFC_BASE+0x140, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr4 ", MFC_BASE+0x144, 32, RW, DPDB, 0, 0},
{"rBitStreamRdPtr5 ", MFC_BASE+0x148, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr5 ", MFC_BASE+0x14C, 32, RW, DPDB, 0, 0},
{"rBitStreamRdPtr6 ", MFC_BASE+0x150, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr6 ", MFC_BASE+0x154, 32, RW, DPDB, 0, 0},
{"rBitStreamRdPtr7 ", MFC_BASE+0x158, 32, RW, DPDB, 0, 0},
{"rBitStreamWrPtr7 ", MFC_BASE+0x15C, 32, RW, DPDB, 0, 0},
{"rBusyFlag ", MFC_BASE+0x160, 1 , RO, DPDB, 0, 0},
{"rRunCommand ", MFC_BASE+0x164, 3 , RW, DPDB, 0, 0},
{"rRunIndex ", MFC_BASE+0x168, 3 , RW, DPDB, 0, 0},
{"rRunCodStd ", MFC_BASE+0x16C, 3 , RW, DPDB, 0, 0},
{"rIntEnable ", MFC_BASE+0x170, 16, RW, DPDB, 0, 0},
{"rIntReason ", MFC_BASE+0x174, 16, RW, DPDB, 0, 0},
//
{"MFC_BASE+0x180 ", MFC_BASE+0x180, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x184 ", MFC_BASE+0x184, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x188 ", MFC_BASE+0x188, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x18C ", MFC_BASE+0x18C, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x190 ", MFC_BASE+0x190, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x194 ", MFC_BASE+0x194, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x198 ", MFC_BASE+0x198, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x19C ", MFC_BASE+0x19C, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1A0 ", MFC_BASE+0x1A0, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1A4 ", MFC_BASE+0x1A4, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1A8 ", MFC_BASE+0x1A8, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1AC ", MFC_BASE+0x1AC, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1B0 ", MFC_BASE+0x1B0, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1B4 ", MFC_BASE+0x1B4, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1B8 ", MFC_BASE+0x1B8, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1BC ", MFC_BASE+0x1BC, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1C0 ", MFC_BASE+0x1C0, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1C4 ", MFC_BASE+0x1C4, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1C8 ", MFC_BASE+0x1C8, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1CC ", MFC_BASE+0x1CC, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1D0 ", MFC_BASE+0x1D0, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1D4 ", MFC_BASE+0x1D4, 32, RW, DPDB, 0, 0},
{"MFC_BASE+0x1D8 ", MFC_BASE+0x1D8, 32, RW, DPDB, 0, 0},
#endif //MFC
#if 0
//HSI
{"rTX_STATUS_REG ", HSITX_BASE+0x00, 32, RO, DPDB, 0, 0},
{"rTX_CONFIG_REG ", HSITX_BASE+0x04, 32, RW, DPDB, 0, 0},
{"rTX_INTSRC_REG ", HSITX_BASE+0x0C, 5 , RO, DPDB, 0, 0},
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -