📄 boot_main.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 + -