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

📄 main_entry.c

📁 用于开发Linux的Bootloader源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
		return;}
	put_char(0, ch);
	i_printf("\r\n>>>Please Send the New Bootloader to Board by Xmodem Protocol...");
	if (XModemReceive((char *)0x900000, 0xfffff) == -1)
		{i_printf("\nTRANSFER FAILURE");	exit(0);}
	i_printf(",...OK!\r\n");	

	flash_erase_Bootloader();

	i_printf(">>>Bootloader Flash Area Program,Please Wait...");
	flash_prg_bootloader(64);
	i_printf(",OK!\r\n");
	i_printf("\n\r>>>Bootloader Update Successfully, Please Reset the System. Thank you!\r\n"); 
}

/************************************************************************/
/*Function Description:	System Information			*/
/*Date:			2003-12-2				*/
/************************************************************************/
void Sys_Info()
{
	 i_printf("\r\n");
	 i_printf("*******************************************************\n\r");
	 i_printf("*            System    Information                    *\n\r");
	 i_printf("*  CPU:       S3C4510B        Speed:        50MHz     *\n\r");
	 i_printf("*  Flash:     4MB             SDRAM:        16MB      *\n\r");
	 i_printf("*  Ethernet:  10M/100M        Working Volt: DC 5V     *\n\r");
	 i_printf("*******************************************************\n\r");
	 i_printf("*                After     Remap                      *\n\r");
	 i_printf("*  SDRAM Address:     0x0000,0000~0x0100,0000-1       *\n\r");
	 i_printf("*  Flash Address:     0x0100,0000~0x0140,0000-1       *\n\r");
	 i_printf("*******************************************************\n\r");
	 i_printf("\n\rPress Any Key to Continue...\r\n");
	 get_char(0);

}

/************************************************************************/
/*Function Description:	Test LED          			*/
/*Date:			2003-12-2				*/
/************************************************************************/
void Test_LED(void)
{
	 int i;
	 int p_de;
	 unsigned int coun=0,co_t=0,pm=21;
	 i_printf("\r\n\r\nLED Testing...,Please Wait...");
	 IOPMOD=0xff;
	 for(i=0;i<2;i++)
		{
		IOPDATA=0x1;
		Delay(500000);
		IOPDATA=0x2;
		Delay(500000);
		IOPDATA=0x0;
		Delay(500000);
		}
	 for(i=0;i<3;i++)
		{
		 
		 for(pm=0;pm<255;pm++)
		    {
			 for(co_t=0;co_t<=22;co_t++)
				{
				 while(coun<254)
					{
					 if(coun==pm) 
						 {IOPDATA=0x03;}
					 coun++;
					}
				 coun=0;
				 IOPDATA=0x00;
				}
		    }
		 
		 for(pm=255;pm>0;pm--)
		    {
			 for(co_t=0;co_t<=22;co_t++)
				{
				 while(coun<254)
					{
					 if(coun==pm) 
						 {IOPDATA=0x03;}
					 coun++;
					}
				 coun=0;
				 IOPDATA=0x00;
				}
		    }
		}
	 i_printf(",OK!\r\n\r\n");
}

void Delay(int i)
{	int j,k;
	for(j=0;j<i;j++)
	{
	k=0;
	}
}


/************************************************************************/
/*Function Description:	Erase bootloader area			*/
/*Date:			2003-12-5				*/
/************************************************************************/
void flash_erase_Bootloader()
{
	int i;
	unsigned short *address;
/************************************************************************/
	i_printf(">>>Erase Bootloader Flash Area S1,Please Wait...");
	Flash_Unlock();
	*((unsigned short *)AM_SECTOR_ADDR_01) = AM_SECTOR_ERASE;	//0x3030
	i_printf(",Blank Check...");
CHKB1:	         	
	Delay(50000);
         for(address=(unsigned short *)AM_SECTOR_ADDR_01;address<(unsigned short *)AM_SECTOR_ADDR_02;address++)
		{
		if(*address!=0xffff)
			{goto CHKB1;}
		}
	i_printf(", OK!\r\n");    

/************************************************************************/
	i_printf(">>>Erase Bootloader Flash Area S2,Please Wait...");
	Flash_Unlock();
  	*((volatile unsigned short *)AM_SECTOR_ADDR_02) = AM_SECTOR_ERASE;	//0x3030
  	i_printf(",Blank Check...");
CHKB2:
       	Delay(50000);
	for(address=(unsigned short *)AM_SECTOR_ADDR_02;address<(unsigned short *)AM_SECTOR_ADDR_03;address++)
		{
		if(*address!=0xffff)
			{goto CHKB2;}
		}
	i_printf(", OK!\r\n");   

/************************************************************************/
	i_printf(">>>Erase Bootloader Flash Area S3,Please Wait...");
	Flash_Unlock();
	*((volatile unsigned short *)AM_SECTOR_ADDR_03) = AM_SECTOR_ERASE;	//0x3030
	i_printf(",Blank Check...");

CHKB3:
       	Delay(50000);
	for(address=(unsigned short *)AM_SECTOR_ADDR_03;address<(unsigned short *)AM_SECTOR_ADDR_04;address++)
		{
		if(*address!=0xffff)
			{goto CHKB3;}
		}
	i_printf(", OK!\r\n");   
	
/************************************************************************/
	i_printf(">>>Erase Bootloader Flash Area S4,Please Wait...");
	Flash_Unlock();
	*((volatile unsigned short *)AM_SECTOR_ADDR_04) = AM_SECTOR_ERASE;	//0x3030
	i_printf(",Blank Check...");
CHKB4:
         Delay(50000);
	for(address=(unsigned short *)AM_SECTOR_ADDR_04;address<(unsigned short *)AM_SECTOR_ADDR_1;address++)
		{
		if(*address!=0xffff)
			{goto CHKB4;}
		}
	i_printf(", OK!\r\n");   
}


/************************************************************************/
/*Function Description:	Flash Sector Unlock.			*/
/*Date:			2003-12-2				*/
/************************************************************************/
void Flash_Unlock(void)
{
	*((volatile unsigned short *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;	//0xaaaa  
	*((volatile unsigned short *)AM_START_ADDR+ AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;	//0x5555	
	*((volatile unsigned short *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_SETUP_ERASE;  //0x8080  
    	*((volatile unsigned short *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1; //0xaaaa    
	*((volatile unsigned short *)AM_START_ADDR+ AM_ADDR_UNLOCK2) = AM_DATA_UNLOCK2;	//0x5555	
}

/************************************************************************/
/*Function Name:		flash_erase()				*/		
/*Function Description:	Flash User Program Areas.			*/
/*Date:			2003-12-5				*/
/************************************************************************/
void flash_erase(int CNT)

{
	int i;
	unsigned short *address;
		 i_printf("\r\n>>>请稍后,擦除用户存储区...\r\n");
		 i_printf(">>>Please Wait,Now Erasing User Flash Area...   ");
/**********************************User Flash S1 *********************************************/
	if(CNT>64*0)
		{
         put_char(0, 0x08);put_char(0, 0x08); i_printf("S 1");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_1) = AM_SECTOR_ERASE;	//0x3030	
EUS1:	
		Delay(8000);		         
		for(address=(unsigned short *)AM_SECTOR_ADDR_1;address<(unsigned short *)AM_SECTOR_ADDR_2;address++)
			{
			if(*address!=0xffff)
				{goto EUS1;}
			}
 		}
/**********************************User Flash S2 *********************************************/
        if(CNT>64*1)
		{
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 2");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_2) = AM_SECTOR_ERASE;	//0x3030
EUS2:
	        	Delay(8000);         
		for(address=(unsigned short *)AM_SECTOR_ADDR_2;address<(unsigned short *)AM_SECTOR_ADDR_3;address++)
			{
			if(*address!=0xffff)
				{goto EUS2;}
			}
 
		}

/**********************************User Flash S3 *********************************************/
        	if(CNT>64*2)
		{
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 3");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_3) = AM_SECTOR_ERASE;	//0x3030
 EUS3:
		Delay(8000);        
		for(address=(unsigned short *)AM_SECTOR_ADDR_3;address<(unsigned short *)AM_SECTOR_ADDR_4;address++)
			{
			if(*address!=0xffff)
				{goto EUS3;}
			}
 

		}

/**********************************User Flash S4 *********************************************/
	if(CNT>64*3)
		{
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 4");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_4) = AM_SECTOR_ERASE;	//0x3030
EUS4:
	         Delay(8000);
		for(address=(unsigned short *)AM_SECTOR_ADDR_4;address<(unsigned short *)AM_SECTOR_ADDR_5;address++)
			{
			if(*address!=0xffff)
				{goto EUS4;}
			}
		}
/**********************************User Flash S5*********************************************/
	
	if(CNT>64*4)
		{
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 5");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_5) = AM_SECTOR_ERASE;	//0x3030
EUS5:
         	Delay(8000);         
		for(address=(unsigned short *)AM_SECTOR_ADDR_5;address<(unsigned short *)AM_SECTOR_ADDR_6;address++)
			{
			if(*address!=0xffff)
				{goto EUS5;}
			}
		}
 /**********************************User Flash S6 *********************************************/        
         if(CNT>64*5)
		{
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 6");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_6) = AM_SECTOR_ERASE;	//0x3030
EUS6:
         	Delay(8000);
		for(address=(unsigned short *)AM_SECTOR_ADDR_6;address<(unsigned short *)AM_SECTOR_ADDR_7;address++)
			{
			if(*address!=0xffff)
				{goto EUS6;}
			}
		}
/**********************************User Flash S7 *********************************************/
	if(CNT>64*6)
		{
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 7");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_7) = AM_SECTOR_ERASE;	//0x3030
 EUS7:
         	Delay(8000);
		for(address=(unsigned short *)AM_SECTOR_ADDR_7;address<(unsigned short *)AM_SECTOR_ADDR_8;address++)
			{
			if(*address!=0xffff)
				{goto EUS7;}
			}
		}
/**********************************User Flash S8 *********************************************/
	if(CNT>64*7)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 8");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_8) = AM_SECTOR_ERASE;	//0x3030
EUS8:
         	Delay(8000);         
		for(address=(unsigned short *)AM_SECTOR_ADDR_8;address<(unsigned short *)AM_SECTOR_ADDR_9;address++)
			{
			if(*address!=0xffff)
				{goto EUS8;}
			}
		}
/**********************************User Flash S9 *********************************************/
 	if(CNT>64*8)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf(" 9");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_9) = AM_SECTOR_ERASE;	//0x3030
EUS9:
         	Delay(8000);
		for(address=(unsigned short *)AM_SECTOR_ADDR_9;address<(unsigned short *)AM_SECTOR_ADDR_10;address++)
			{
			if(*address!=0xffff)
				{goto EUS9;}
			}
		}
/**********************************User Flash S10 *********************************************/	
  	if(CNT>64*9)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf("10");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_10) = AM_SECTOR_ERASE;	//0x3030
EUS10:
         	Delay(8000);
		for(address=(unsigned short *)AM_SECTOR_ADDR_10;address<(unsigned short *)AM_SECTOR_ADDR_11;address++)
			{
			if(*address!=0xffff)
				{goto EUS10;}
			}
		}
/**********************************User Flash S11 *********************************************/
  	if(CNT>64*10)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf("11");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_11) = AM_SECTOR_ERASE;	//0x3030
EUS11:
        		Delay(8000);
		for(address=(unsigned short *)AM_SECTOR_ADDR_11;address<(unsigned short *)AM_SECTOR_ADDR_12;address++)
			{
			if(*address!=0xffff)
				{goto EUS11;}
			}
		}
/**********************************User Flash S12 *********************************************/
  	if(CNT>64*11)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf("12");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_12) = AM_SECTOR_ERASE;	//0x3030
EUS12:
         	Delay(8000);         
		for(address=(unsigned short *)AM_SECTOR_ADDR_12;address<(unsigned short *)AM_SECTOR_ADDR_13;address++)
			{
			if(*address!=0xffff)
				{goto EUS12;}
			}
		}
/**********************************User Flash S13 *********************************************/
   	if(CNT>64*12)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf("13");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_13) = AM_SECTOR_ERASE;	//0x3030
EUS13:
         	Delay(8000);       
		for(address=(unsigned short *)AM_SECTOR_ADDR_13;address<(unsigned short *)AM_SECTOR_ADDR_14;address++)
			{
			if(*address!=0xffff)
				{goto EUS13;}
			}
		}
/**********************************User Flash S14 *********************************************/
  	if(CNT>64*13)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf("14");
		Flash_Unlock();
		*((unsigned short *)AM_SECTOR_ADDR_14) = AM_SECTOR_ERASE;	//0x3030
EUS14:
         	Delay(8000);
		for(address=(unsigned short *)AM_SECTOR_ADDR_14;address<(unsigned short *)AM_SECTOR_ADDR_15;address++)
			{
			if(*address!=0xffff)
				{goto EUS14;}
			}
		}
/**********************************User Flash S15 *********************************************/
  	if(CNT>64*14)
		{         
		 put_char(0, 0x08);put_char(0, 0x08); i_printf("15");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -