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

📄 boot_main.c

📁 某个ARM9板子的实际bootloader 对裁剪
💻 C
字号:
/***************************************************************************** Copyright  Storlink Corp 2005.  All rights reserved.                *--------------------------------------------------------------------------* Name			: boot_main.c* Description	: *		Main entry of C files for BOOT module** History**	Date		Writer		Description*	-----------	-----------	-------------------------------------------------*	04/18/2005	Gary Chen	Create*****************************************************************************/#include <define.h>#include <board_config.h>#include <sl2312.h>// #define _BOOT_ENABLE_CACHE	1/*----------------------------------------------------------------------*	sl_main*----------------------------------------------------------------------*/void sl_main(void){	int rc;    void (*apps_routine)(void);    unsigned long i, *dest, *srce, size, noob[4];//, len=0;    unsigned int data;    //unsigned char *ndest, *nsrce, nsize, noob[1];#ifdef _BOOT_ENABLE_CACHE    HAL_ICACHE_DISABLE();	HAL_DCACHE_DISABLE();	// {int n=1; while(n!=0) n+=2;}; // debug	hal_mmu_init();	    HAL_ICACHE_INVALIDATE_ALL();    HAL_DCACHE_INVALIDATE_ALL();    HAL_ICACHE_ENABLE();    HAL_DCACHE_ENABLE();	// enable flash	REG32(SL2312_GLOBAL_BASE + GLOBAL_MISC_CTRL) &=  ~GLOBAL_FLASH_EN_BIT; //~0x00000001;#endif	srce=(unsigned long *)(BOARD_FLASH_BOOT2_ADDR);    dest=(unsigned long *)BOARD_DRAM_BOOT2_ADDR;    size = (BOARD_FLASH_BOOT2_SIZE / 4);	//	len = (BOARD_FLASH_BOOT2_SIZE / 4);	#ifndef MIDWAY    for (i = 0; i < size; i++)    	*dest++=*srce++;#else	REG32(SL2312_FLASH_CTRL_BASE + NFLASH_ACCESS) &=  0x4000;	data = REG32(SL2312_FLASH_CTRL_BASE + FLASH_TYPE);		if((data&0x1800)==0x1800)//nand flash 2k page	{		    			while(size>0)		{						for(i=0;i<(N2KPAGE/4);i++)			{				if(i<(N2KDATA/4))				{					if(i < size)						*dest++=*srce++;					else						noob[i%4]=*srce++;										}				else					noob[i%4]=*srce++;			}			srce-=((N2KPAGE-N2KDATA)/4);			size -= (N2KDATA/4);						}	}	else if((data&0x1800)==0x1000)//nand flash 512 page	{				while(size>0)		{						for(i=0;i<(NPAGE/4);i++)			{				if(i<(NDATA/4))				{					if(i < size)						*dest++=*srce++;					else						noob[i%4]=*srce++;										}				else					noob[i%4]=*srce++;			}			srce-=((NPAGE-NDATA)/4);			size -= (NDATA/4);						}	}	else if((data&0x1800)==0x800)//parallel flash 	{		    	    	for (i = 0; i < size; i++)    		*dest++=*srce++;	}	else //serial flash	{		//printf("Serial flash not ready!\n");		for (i = 0; i < size; i++)    		*dest++=*srce++;	}#endif    #ifdef _BOOT_ENABLE_CACHE        HAL_ICACHE_INVALIDATE_ALL();    HAL_DCACHE_INVALIDATE_ALL();    HAL_ICACHE_DISABLE();    HAL_DCACHE_DISABLE();#endif		apps_routine = (void (*))(BOARD_DRAM_BOOT2_ADDR);    apps_routine();}

⌨️ 快捷键说明

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