⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 library.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	    	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 + -