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

📄 main_entry.c.bak

📁 一个比较好的三星s3c4510的启动代码
💻 BAK
📖 第 1 页 / 共 3 页
字号:
/************************************************************************/
//Bootloader for 4510b
//chaisc97
/***********************************************************************/

#include"s3c4510b_add.h"
#include "uart.h"
#include "isr.h"
#include "ether.h"
#define AM_SECTOR_ADDR_01      0x1000000
#define AM_SECTOR_ADDR_02      0x1004000
#define AM_SECTOR_ADDR_03      0x1006000
#define AM_SECTOR_ADDR_04      0x1008000
#define AM_SECTOR_ADDR_1      0x1010000
#define AM_SECTOR_ADDR_2      0x1020000
#define AM_SECTOR_ADDR_3      0x1030000
#define AM_SECTOR_ADDR_4      0x1040000
#define AM_SECTOR_ADDR_5      0x1050000
#define AM_SECTOR_ADDR_6      0x1060000
#define AM_SECTOR_ADDR_7      0x1070000
#define AM_SECTOR_ADDR_8      0x1080000
#define AM_SECTOR_ADDR_9      0x1090000
#define AM_SECTOR_ADDR_10      0x10a0000
#define AM_SECTOR_ADDR_11      0x10b0000
#define AM_SECTOR_ADDR_12      0x10c0000
#define AM_SECTOR_ADDR_13      0x10d0000
#define AM_SECTOR_ADDR_14      0x10e0000
#define AM_SECTOR_ADDR_15      0x10f0000
#define AM_SECTOR_ADDR_16      0x1100000
#define AM_SECTOR_ADDR_17      0x1110000
#define AM_SECTOR_ADDR_18      0x1120000
#define AM_SECTOR_ADDR_19      0x1130000
#define AM_SECTOR_ADDR_20      0x1140000
#define AM_SECTOR_ADDR_21      0x1150000
#define AM_SECTOR_ADDR_22      0x1160000
#define AM_SECTOR_ADDR_23      0x1170000
#define AM_SECTOR_ADDR_24      0x1180000
#define AM_SECTOR_ADDR_25      0x1190000
#define AM_SECTOR_ADDR_26      0x11a0000
#define AM_SECTOR_ADDR_27      0x11b0000
#define AM_SECTOR_ADDR_28      0x11c0000
#define AM_SECTOR_ADDR_29      0x11d0000
#define AM_SECTOR_ADDR_30      0x11c0000

#define AM_START_ADDR          0x1000000	    
#define AM_ADDR_UNLOCK1        0x555
#define AM_ADDR_UNLOCK2        0x2aa
#define AM_DATA_UNLOCK1        0xaaaa
#define AM_DATA_UNLOCK2        0x5555
#define AM_SETUP_WRITE         0xa0a0
#define AM_SETUP_ERASE         0x8080
#define AM_CHIP_ERASE          0x1010
#define AM_SECTOR_ERASE	       0x3030
#define AM_RESET		    0xf0f0
void InitUART(int Port,int Baudrate);
void PrintUART(int Port,char *s);
void flash_prg(int CNT);
void flash_erase();

#define SYSCFG	0x03ff0000


#define INT_GLOBAL						(21)


#define COUNTDOWN	0x01effff0;
static int counter = 0;
void extern FIQ(void);

unsigned Install_Handle(unsigned routine,unsigned *vector);
void download();

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

void flash_erase(int CNT)

{
	int i;
	
	
	*((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_1) = AM_SECTOR_ERASE;	//0x3030
	
	for(i=0;i<50;i++)
         {
	 Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         }
	i_printf("Erase 64k");

        if(CNT>0x64)
	{

        *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_2) = AM_SECTOR_ERASE;	//0x3030
	
	for(i=0;i<50;i++)
         {
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b 128k");

	}
	
	if(CNT>0x128)
	{
	*((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_3) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 192k");
	}
	if(CNT>0x192)
	{

        *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_4) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 256k");

	}
	
	if(CNT>0x256)
	{
         
        *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_5) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 320k");

	}
         
         if(CNT>0x320)
	{
	*((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_6) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	     Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 384k");

	}
	if(CNT>0x384)
	{
         *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_7) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	     Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 448k");
	}

	if(CNT>0x448)
	{         
         *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_8) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	     Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
		i_printf("\b\b\b\b\b 512k");

	}

         if(CNT>0x512)
	{
         *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_9) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
		i_printf("\b\b\b\b\b 640k");

	}
	
         if(CNT>0x640)
	{
        *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_10) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
	 	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 704k");

	}
	if(CNT>0x704)
	{
         
         *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_11) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
	Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 768k");

	}
         if(CNT>0x768)
	{
         *((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	
  	//*((volatile UINT16 *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_CHIP_ERASE;	//0x1010
	*((volatile unsigned short *)AM_SECTOR_ADDR_12) = AM_SECTOR_ERASE;	//0x3030
	for(i=0;i<50;i++)
         {
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
		Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
         Delay(50000);
          }
	i_printf("\b\b\b\b\b 832k");

	}

         if(CNT>0x832)
	{
         *((volatile unsigned short *)AM_START_ADDR+ AM_ADDR_UNLOCK1) = AM_DATA_UNLOCK1;	//0xaaaa  

⌨️ 快捷键说明

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