📄 main.c
字号:
#define GLOBAL_CLK
#include "base.h"
#include "2440lib.h"
#include "option.h"
extern int s_usbhost_reset(void);//"reset - reset (rescan) USB controller\n"
extern int s_usbhost_start(void);
extern int s_usbhost_stop(void);//"usb stop [f] - stop USB [f]=force stop\n"
extern int s_usbhost_tree(void);//"usb tree - show USB device tree\n"
extern int s_usbhost_scan(void);
//extern int s_usbhost_stor(void);//"usb storage - show details of USB storage devices\n"
extern int s_usbhost_part(void);//"usb part [dev] - print partition table of one or all USB storage devices\n"
extern int s_usbhost_info(int argc, char *argv[]);//"usb info [dev] - show available USB devices\n"
extern int s_usbhost_read(unsigned long rblk,unsigned long rcnt,unsigned char *rbuffer);//usb read addr blk# cnt - read `cnt' blocks starting at block `blk#'
//to memory address `addr'\n"
extern int s_usbhost_dev(int dev);//"usb dev [dev] - show or set current USB storage device\n"
extern void TestWaitMs(void);
/*=======================================
"fatls - list files in a directory (default /)\n",
=======================================*/
extern int do_fat_ls (const char *pathandfilename);
/*=======================================
"fatinfo - print information about filesystem\n",
========================================*/
extern int do_fat_fsinfo (void);
/*========================================
"fatload - load binary file from a dos filesystem\n",
========================================*/
extern int do_fat_fsload (const char *filename,unsigned char *buffer,unsigned long addr,unsigned long count);
static void cal_cpu_bus_clk(void);
void DelayMs(unsigned short ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<51000;j++);//75000=1.4ms 50000=986us
}
static U32 cpu_freq;
static U32 UPLL;
static void cal_cpu_bus_clk(void)
{
U32 val;
U8 m, p, s;
val = rMPLLCON;
m = (val>>12)&0xff;
p = (val>>4)&0x3f;
s = val&3;
//(m+8)*FIN*2 不要超出32位数!
FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<<s))*100;
val = rCLKDIVN;
m = (val>>1)&3;
p = val&1;
val = rCAMDIVN;
s = val>>8;
switch (m) {
case 0:
HCLK = FCLK;
break;
case 1:
HCLK = FCLK>>1;
break;
case 2:
if(s&2)
HCLK = FCLK>>3;
else
HCLK = FCLK>>2;
break;
case 3:
if(s&1)
HCLK = FCLK/6;
else
HCLK = FCLK/3;
break;
}
if(p)
PCLK = HCLK>>1;
else
PCLK = HCLK;
if(s&0x10)
cpu_freq = HCLK;
else
cpu_freq = FCLK;
val = rUPLLCON;
m = (val>>12)&0xff;
p = (val>>4)&0x3f;
s = val&3;
UPLL = ((m+8)*FIN)/((p+2)*(1<<s));
if(UPLL==96*MEGA)
rCLKDIVN |= 8; //UCLK=UPLL/2
UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;
}
void u2440mon_main(void)
{
char *mode;
int i;
U8 key;
U32 mpll_val, divn_upll=0;
/*
#if ADS10
__rt_lib_init(); //for ADS 1.0
#endif
*/
Port_Init();
rGPACON &= ~(1<<11);
rGPADAT |= 1<<11;
// USB device detection control
/* rGPGCON &= ~(3<<24);
rGPGCON |= (1<<24); // output
rGPGUP |= (1<<12); // pullup disable
rGPGDAT |= (1<<12); // output
*/ //masked by hzh
//ChangeUPllValue(60,4,2); // 48MHz
//for(i=0; i<7; i++);
//ChangeClockDivider(13,12);
//ChangeMPllValue(97,1,2); //296Mhz
/*
#if (FCLK==271500000)
ChangeClockDivider(13,12); //hzh
ChangeMPllValue(173,2,2); //271.5Mhz,2440A!
#elif (FCLK==304800000)
ChangeClockDivider(13,12); //hzh
ChangeMPllValue(68,1,1); //304.8MHz,2440A!
#elif (FCLK==200000000)
ChangeMPllValue(92,4,1); //200MHz,2440A!
ChangeClockDivider(12,12); //hzh
#elif (FCLK==240000000)
ChangeClockDivider(13,12); //hzh
ChangeMPllValue(52,1,1); //240MHz,2440A!
#elif (FCLK==300000000)
ChangeClockDivider(14,11); //hzh
ChangeMPllValue(67,1,1); //304.8MHz,2440A!
#elif (FCLK==320000000)
ChangeClockDivider(14,11); //hzh
ChangeMPllValue(72,1,1); //320MHz,2440A!
#elif (FCLK==330000000)
ChangeClockDivider(14,11); //hzh
ChangeMPllValue(157,4,1); //330MHz,2440A!
#elif (FCLK==340000000)
ChangeClockDivider(14,11); //hzh
ChangeMPllValue(77,1,1); //340MHz,2440A!
#elif (FCLK==350000000)
ChangeClockDivider(14,11); //hzh
ChangeMPllValue(167,4,1); //350MHz,2440A!
#elif (FCLK==360000000)
ChangeClockDivider(14,12); //hzh
ChangeMPllValue(82,1,1); //360MHz,2440A!
#elif (FCLK==380000000)
ChangeClockDivider(14,12); //hzh
ChangeMPllValue(87,1,1); //380MHz,2440A!
#elif (FCLK==400000000)
ChangeClockDivider(14,12); //hzh
ChangeMPllValue(92,1,1); //400MHz,2440A!
#endif
*/
//Isr_Init();
//Led_Test();
//i = search_params(); //hzh, don't use 100M!
switch (2) {
// switch(1) {
case 0: //240
key = 14;
mpll_val = (112<<12)|(4<<4)|(1);
break;
case 1: //320
key = 14;
mpll_val = (72<<12)|(1<<4)|(1);
break;
case 2: //400
key = 14;
mpll_val = (92<<12)|(1<<4)|(1);
break;
case 3: //440!!!
key = 14;
mpll_val = (102<<12)|(1<<4)|(1);
break;
default:
key = 14;
mpll_val = (92<<12)|(1<<4)|(1);
break;
}
#if 1
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(key, 12);
cal_cpu_bus_clk();
if(PCLK<(40*MEGA)) {
ChangeClockDivider(key, 11);
cal_cpu_bus_clk();
}
#else
cal_cpu_bus_clk();
#endif
//consoleNum=boot_params.serial_sel.val&0; // Uart 1 select for debug.
Uart_Init(0,112500);//boot_params.serial_baud.val);
//Uart_Select(consoleNum);
}
int Main(void)
{
char cmd;
char tempbuf[10][100];
char temppath[1000];
unsigned char buffer[10000];
int i,ret;
unsigned long len;
// s_UartInit(); //du add 2007.2.10
u2440mon_main();
//Uart_Printf(" S3C2440 Bootloader V2006\n");
s_UartPrint("\nUCLK=%d \n",UCLK);
s_UartPrint("\nUPLL=%d \n",UPLL);
s_UartPrint("\nrUPLLCON=%0x \n",rUPLLCON);
rGPBCON=rGPBCON&(~0x3ff00)|(0x15500);
rGPBDAT&=~(1<<5);
rGPBDAT&=~(1<<8);
rGPBDAT|=(1<<6);
rGPBDAT|=(1<<7);
memset(tempbuf,0,sizeof(tempbuf));
// s_UartInit(); //du add 2007.2.10
//s_UartPrint("P78 welcome you!\n");
//rBWSCON = 0x01022202;//set lcd and sram databus width
//rGPECON &= ~(3<<8);
//rGPECON |= (1<<8);
//rGPEDAT &= ~(1<<4);
//rGPEUP &= ~(1<<4);
//=======du add
s_usbhost_reset();
//===================
s_UartPrint("Usb Host Test!\n");
s_TimerInit();
/*
s_UartPrint("---------------------\n");
s_UartPrint("1-Start 2-Stop 3-Tree \n");
s_UartPrint("4-Scan 5-Stor 6-Part \n");
s_UartPrint("7-Info 8-Read 9-Dev \n");
s_UartPrint("l-List i-fsinfo r-read \n");
s_UartPrint("---------------------\n");
*/
while(1)
{
s_UartPrint("---------------------\n");
s_UartPrint("1-Start 2-Stop 3-Tree \n");
s_UartPrint("4-Scan 5-Stor 6-Part \n");
s_UartPrint("7-Info 8-Read 9-Dev \n");
s_UartPrint("l-List i-fsinfo r-read \n");
s_UartPrint("---------------------\n");
s_UartPrint("\nPlease Select Function Key:\n");
cmd=s_getkey();
s_UartPrint("\n");
switch(cmd)
{
case '1':
s_UartPrint("s_usbhost_start() \n");
s_usbhost_start();
break;
case '2':
//s_UartPrint("s_usbhost_stop() \n");
//s_usbhost_stop();
s_UartPrint("s_usbhost_dev(2, tempbuf) \n");
s_usbhost_read(2,8,buffer);
break;
case '3':
s_UartPrint("s_usbhost_tree() \n");
s_usbhost_tree();
break;
case '4':
s_UartPrint("s_usbhost_scan() \n");
s_usbhost_scan();
break;
case '5':
s_UartPrint("s_usbhost_stor() \n");
//s_usbhost_stor();
break;
case '6':
s_UartPrint("s_usbhost_part() \n");
s_usbhost_part();
break;
case '7':
s_UartPrint("s_usbhost_info(2, tempbuf) \n");
//s_usbhost_info(2, tempbuf);
break;
case '8':
s_UartPrint("s_usbhost_read(5, tempbuf) \n");
s_usbhost_dev(0);
s_usbhost_read(0,1,buffer);
//s_usbhost_read(8,8,buffer);
//s_usbhost_read(16,8,buffer);
//s_usbhost_read(24,8,buffer);
//s_usbhost_read(32,8,buffer);
break;
case '9':
s_UartPrint("s_usbhost_dev(0, tempbuf) \n");
s_usbhost_dev(0);
break;
case '0':
s_UartPrint("s_usbhost_dev(1, tempbuf) \n");
s_usbhost_read(1,8,buffer);
break;
case 'l':
case 'L':
s_UartPrint("do_fat_ls () \n");
memset(temppath,0,sizeof(temppath));
strcpy(temppath,"\\");
do_fat_ls (temppath);
break;
case 'i':
case 'I':
s_UartPrint("do_fat_fsinfo() \n");
do_fat_fsinfo ();
break;
case 'r':
case 'R':
//===========
//===========
s_UartPrint("do_fat_fsload(0,5) \n");
ret=do_fat_fsload ("readme.txt",buffer,0,5);
s_UartPrint("ret=%d \n",ret);
s_UartPrint("do_fat_fsload(5,15) \n");
ret=do_fat_fsload ("readme.txt",buffer,5,15);
s_UartPrint("ret=%d \n",ret);
break;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -