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

📄 main.c

📁 S3C2440 bootloader nboot1
💻 C
字号:
#include <stdlib.h>
#include <string.h>

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h" // 03.11.27 junon
#include "mmu.h" // 03.11.27 junon
//#include "MemoryTest.h"
#include "Nand.h"
//#include "YC2440_umon.h"

#if USE_MAIN
#include <stdio.h>
#endif

void Set_Pre(void);


void Isr_Init(void);


/*-----------------------------------------*/

/******************SDRAM Addr map***************
	Debug 128KB  0x30000000~0x30020000	//128KB
	USB   32KB   0x33e0000~0x33e10000  //32KB
	WINCE 32MB   0x30200000~0x32200000  //32MB

************************************************/


#define WINCEADDR 0x30200000 
#define NBOOT2ADDR 0x30100000




//void Run_USBMON(void);
/*void Start_system(U32 Addr)
{
	
    //Uart_Printf("Start System\n\n\n");
	((void (*)(void))Addr)();
	
	// Uart_Printf("Start Fail\n");

	return;
}

*/
void Isr_Init(void);


///void Copyfiles(U32 startblock,U32 blocknum,U32 copyaddr);


extern U32 Mdiv, Pdiv, Sdiv, Fclk, Hclk, Pclk, Hdivn, Pdivn, Hclk_Ratio, Pclk_Ratio, Ref_Cnt;
//static int NF8_IsBadBlock(U32 block)




void xmain(void)
{
	//int i,j;
	int len = 0;
	U8 *buffer;
	int page = 0;
	int block =0;
	//char *pt;
	
	buffer = (U8*)NBOOT2ADDR;
	
	//char a[]= "WINCE NBOOT1\n\n";
	//pt = "WINCE NAND BOOT1\n\n";
	Led_Display(0xf);
	Port_Init();

	Led_Display(0x1);
 

    MMU_EnableICache();
	Led_Display(0x2);
	NF8_Init();
	
	//Uart_Init(0, 115200);
	//Uart_Select(0);
	//Uart_TxEmpty(0);

	Led_Display(0x4);
	
	Isr_Init();
	Led_Display(0x8);
	//Uart_SendString(pt);
	
	while(len<192)
	{
		block = 2+len/32;
		page = len%32;
		NF8_ReadPage(block,page,buffer);
		len++;
		buffer+=512;
	}
	//Copyfiles(0x00000040,0x00000120,NBOOT2ADDR);                     //1920  block = 30 * 64 * 16 =30MB 
	Led_Display(0xf);
	Set_Pre();
	Led_Display(0x2);
	((void (*)(void))NBOOT2ADDR)();

 

}	

 /*  
void Copyfiles(U32 startpage,U32 pagenum,U32 copyaddr)
{	
	U32 block;
    U32 page ;
    U32 i;
    int n = 1;
  
    U8 *buffer;
    
   
  
    buffer = (U8 *)copyaddr;
  
    for(i=0;i<pagenum;)
    {	
    	block = (i+startpage)/32;
    	
    	
    	if(NF8_IsBadBlock(block)==OK)
    	{   
    		page  = (i+startpage)%32;
    	for(;page<32;page++)
    	{
    		 	//buffer = (U8 *)COPY_BUFFER_ADDR;
    		 	NF8_ReadPage(block,page,buffer);              //???page
    		 	buffer +=512;                                 //1page 
    		 	//Uart_Printf("*");
    		 	i++;
    		 	
    	}	
    	
		}
	}	
	
}*/

	//===================================================================
void Isr_Init(void)
{
   /* pISR_UNDEF  = (unsigned)HaltUndef;
    pISR_SWI    = (unsigned)HaltSwi;
    pISR_PABORT = (unsigned)HaltPabort;
    pISR_DABORT = (unsigned)HaltDabort;
	*/
    rINTMOD     = 0x0;					 //All=IRQ mode
//    rINTCON=0x5;						   //Non-vectored,IRQ enable,FIQ disable    
    rINTMSK     = BIT_ALLMSK;			  //All interrupt is masked.
    rINTSUBMSK  = BIT_SUB_ALLMSK;		  //All sub-interrupt is masked. <- April 01, 2002 SOP

//    rINTSUBMSK  = ~(BIT_SUB_RXD0);		 //Enable Rx0 Default value=0x7ff
//    rINTMSK     = ~(BIT_UART0);			//Enable UART0 Default value=0xffffffff    
	
//    pISR_UART0=(unsigned)RxInt;			//pISR_FIQ,pISR_IRQ must be initialized
}
/*
//===================================================================
void HaltUndef(void)
{
    //Uart_Printf("Undefined instruction exception.\n");
    //while(1);
}

//===================================================================
void HaltSwi(void)
{
//#if !SEMIHOSTING	
		//Uart_Printf("SWI exception!!!\n");
		//while(1);
//#endif	
}

//===================================================================
void HaltPabort(void)
{
    //Uart_Printf("Pabort exception.\n");
   // while(1);
}

//===================================================================
void HaltDabort(void)
{
    //Uart_Printf("Dabort exception.\n");
  //  while(1);
}


*/
void Set_Pre(void)
{

	int i;

	i = rGPDCON; 

	rGPDCON = (rGPFCON & ~(3<<4)) | (0<<4);
	if((rGPFDAT&(1<<2))==0) {    // If EINT2 key is pressed.
		//Uart_SendString("I/O Strength Max\n");
		// Set I/O strength control.
		rDSC0 = (0<<31)|(0<<8)|(0<<0);
		rDSC1 = (0<<28)|(0<<26)|(0x000000<<0);
	} else {
		//Uart_SendString("I/O Strength Min\n");
		// Set I/O strength control.
		rDSC0 = (0<<31)|(3<<8)|(3<<0);
		// nEN_DSC  [31]    : 0:I/O drive strength enable, 1:Disable
		// DSC_ADR  [9:8]   : Addr drive strength, 0:10mA, 1:8mA, 2:6mA, 3:4mA
		// DSC_DATA [7:0]   : DATA drive strength, 0:12mA, 1:10mA, 2:8mA, 3:6mA
		
		rDSC1 = (3<<28)|(3<<26)|(0xffffff<<0);
		// DSC_SCK1 [29:28] : SCLK1, 0:16mA, 1:12mA, 2:8mA, 3:6mA 
		// DSC_SCK0 [27:26] : SCLK0, 0:16mA, 1:12mA, 2:8mA, 3:6mA 
		// DSC_SCKE [25:24] : SCLKE, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_SDR  [23:22] : nRAS/nCAS, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_NFC  [21:20] : Nand flash(nFCE,nFRE,nFWE,CLE,ALE), 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_BE   [19:18] : nBE[3:0], 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_WOE  [17:16] : nBE[3:0], 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS7  [15:14] : nGCS7, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS6  [13:12] : nGCS6, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS5  [11:10] : nGCS5, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS4  [9:8]   : nGCS4, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS3  [7:6]   : nGCS3, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS2  [5:4]   : nGCS2, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS1  [3:2]   : nGCS1, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
		// DSC_CS0  [1:0]   : nGCS0, 0:10mA, 1:8mA, 2:6mA, 3:4mA 
	
		}
	rGPDCON = i;
}

⌨️ 快捷键说明

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