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