?? library.c
字號:
tempDownloadAddress=DefaultDownloadAddress;
}
}
Disp("The temporary download address is 0x%x.\n\n",tempDownloadAddress);
Disp("Select a file to download in DNW\n");
Disp("If you want to quit, press 'x' key\n");
i = 0;
do
{
OTGDEV_GetDownFileInfo(&uDownAddr, &uDownFileSize, &pDownPt);
if(GetKey() == 'x')
{
return 0;
}
if(i%0x100000==0)
DisplayLED(0x6);
if(i%0x100000==0x80000)
DisplayLED(0x9);
i++;
}while((uDownAddr == 0) ||(uDownFileSize == 0));
Disp("\n[ADDRESS:%xh,TOTAL:%d(0x%x)]\n", uDownAddr, uDownFileSize, (uDownFileSize-10));
do
{
OTGDEV_GetDownFileInfo(&uDownAddr, &uDownFileSize, &pDownPt);
if(GetKey() == 'x')
{
return 0;
}
}while((pDownPt - uDownAddr)<(uDownFileSize - 8));
OTGDEV_VerifyChecksum();
return (uDownFileSize-10);
}
//////////
// Function Name : UploadImageThruUsbOtg
// Function Description : This function uploads a certain image through usb otg
// Input : NONE
// Output : NONE
// Version :
void UploadImageThruUsbOtg(void)
{
bool first = true;
u32 uUpAddr, uUpFileSize, pUpPt, i;
USB_SPEED eUsbSpeed;
INTC_SetVectAddr(NUM_OTG, Isr_UsbOtg);
INTC_Enable(NUM_OTG);
while(1)
{
if(OTGDEV_IsUsbOtgSetConfiguration()==true)
{
OTGDEV_CheckEnumeratedSpeed(&eUsbSpeed);
if(eUsbSpeed == USB_HIGH)
{
Disp("\n!!! USB host is connected (Speed : High) !!!\n\n");
DisplayLED(0xf);
}
else if(eUsbSpeed == USB_FULL)
{
Disp("\n!!! USB host is connected (Speed : Full) !!!\n\n");
DisplayLED(0x6);
}
break;
}
else if(first == true)
{
OTGDEV_InitOtg(eSpeed);
first = false;
}
}
OTGDEV_ClearDownFileInfo();
OTGDEV_ClearUpFileInfo();
OTGDEV_SetOpMode(eOpMode);
Disp(" Configure the upload address and size in DNW\n");
Disp(" If you want to quit, press 'x' key\n");
i = 0;
do
{
OTGDEV_GetUpFileInfo(&uUpAddr, &uUpFileSize, &pUpPt);
if(GetKey() == 'x')
{
return;
}
if(i%0x100000==0)
DisplayLED(0x6);
if(i%0x100000==0x80000)
DisplayLED(0x9);
i++;
}while((uUpAddr == 0) || (uUpFileSize == 0));
Disp("\n[ADDRESS:%xh,TOTAL:%d]\n", uUpAddr, uUpFileSize);
do
{
OTGDEV_GetUpFileInfo(&uUpAddr, &uUpFileSize, &pUpPt);
if(GetKey() == 'x')
{
return;
}
}while((pUpPt - uUpAddr)<uUpFileSize);
}
//////////
// Function Name : Delay
// Function Description :
// Input : usec, time in 100us unit
// Output : NONE
// Version :
u32 delayLoopCount;
void Delay(u32 usec)
{
u32 i=0;
for(;usec>0;usec--)
{
for(i=0;i<delayLoopCount;i++);
}
}
//////////
// Function Name : Pow
// Function Description : Calculates x raise to the power of y
// Input : x, y
// Output : uResult - result value
// Version :
u32 Pow(u32 x, u32 y)
{
u32 i, uResult = 1;
for(i=0 ; i<y ; i++)
{
uResult = uResult*x;
}
return uResult;
}
//////////
// Function Name : Copy
// Function Description : Copy from src address to dst address by words count
// Input : sa, da, words
// Output : void
// Version :
void Copy(u32 sa, u32 da, u32 words)
{
u32 i;
for (i=0; i<words; i++)
*(u32 *)(da+i*4) = *(u32 *)(sa+i*4);
}
//////////
// Function Name : Copy8
// Function Description : Copy from src address to dst address by bytes count
// Input : sa, da, bytes
// Output : void
// Version :
void Copy8(u32 sa, u32 da, u32 bytes)
{
u32 i;
for (i=0; i<bytes; i++)
*(u8 *)(da+i) = *(u8 *)(sa+i);
}
//////////
// Function Name : Copy16
// Function Description : Copy from src address to dst address by bytes count
// Input : sa, da, bytes
// Output : void
// Version :
void Copy16(u32 sa, u32 da, u32 Hwords)
{
u32 i;
for (i=0; i<Hwords; i++)
*(u16 *)(da+i*2) = *(u16 *)(sa+i*2);
}
//////////
// Function Name : Compare
// Function Description : compare data
// Input : a0, a1, words
// Output : ret
// Version :
bool Compare( u32 a0, u32 a1, u32 words)
{
volatile u32 d0,d1;
volatile u32 *pD0, *pD1;
bool ret = true;
u32 ecnt = 0;
u32 i;
pD0 = (volatile u32 *)(a0);
pD1 = (volatile u32 *)(a1);
printf("\n");
for (i=0; i<words; i++)
{
d0=*pD0;
d1=*pD1;
if (d0!= d1)
{
ret = false;
printf(" %08x=%08x <-> %08x=%08x\n", pD0, d0, pD1, d1);
ecnt++;
}
pD0++;
pD1++;
}
/*
if (ret == false)
{
Assert(0);
printf("\n");
}
*/
return ret;
}
//////////
// Function Name : Dump32
// Function Description : dump data
// Input : addr, words
// Output : ret
// Version :
void Dump32(u32 addr, u32 words)
{
int i, j;
u32 *pMem;
pMem = (u32 *)(addr/4*4);
Disp("\n");
for(i=0; i<words; )
{
Disp(" %04x: ", i);
for(j=0; j<8; j++)
Disp("%08x ", *pMem++),
i++;
Disp("\n");
}
}
//////////
// Function Name : Dump16
// Function Description : dump data
// Input : addr, hwords
// Output : ret
// Version :
void Dump16(u32 addr, u32 hwords)
{
int i, j;
u16 *pMem;
pMem = (u16 *)(addr/2*2);
Disp("\n");
for(i=0; i<hwords; )
{
Disp(" %04x: ", i);
for(j=0; j<16; j++)
Disp("%04x ", *pMem++),
i++;
Disp("\n");
}
}
//////////
// Function Name : Dump8
// Function Description : dump data
// Input : addr, bytes
// Output : ret
// Version :
void Dump8(u32 addr, u32 bytes)
{
int i, j;
u8 *pMem;
pMem = (u8 *)addr;
Disp("\n");
for(i=0; i<bytes; )
{
Disp(" %04x: ", i);
for(j=0; j<16; j++)
Disp("%02x ", *pMem++),
i++;
Disp("\n");
}
}
//////////
// Function Name : Stop
// Function Description : This function is called from "Assert"
// Version :
void Stop(void)
{
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -