?? shell.c
字號:
void (*fp)(void) = (void (*)(void))DFT_DOWNLOAD_ADDR;
if(argc>1)
{
int p = strtoul((unsigned char *)argv[1]);
if(p>0)
fp = (void (*)(void))p;
}
Uart_Printf("Run program from 0x%x, are you sure? [y/n]", fp);
while(1)
{
key = Uart_GetKey();
if(key)
{
if(key=='y'||key=='Y')
{
Uart_SendByte(key);
Uart_SendByte('\n');
break;
}
if(key=='n'||key=='N')
{
Uart_SendByte(key);
Uart_SendByte('\n');
return 0;
}
}
}
(*fp)();
return 0;
}
int ProgFlash(int argc, char *argv[])
{
unsigned char key;
unsigned int size = ~0;
unsigned int data_begin = ~0;
unsigned int prog_begin = ~0;
unsigned int cache_cfg;
if(argc!=4)
{
Uart_Printf("Arguments error!\n");
Uart_Printf("Usage: prog a1 a2 size\na1 = program begin address\na2 = data pointer to ram\nsize = program size(Bytes)\n");
return -1;
}
prog_begin = strtoul((unsigned char *)argv[1]);
data_begin = strtoul((unsigned char *)argv[2]);
size = strtoul((unsigned char *)argv[3]);
if(size==0)
{
Uart_Printf("Write 0 Bytes!\n");
return -1;
}
if(prog_begin==-1||data_begin==-1) //
{
Uart_Printf("Arguments error\n");
return -1;
}
Uart_Printf("program flash begin @0x%x, from ram data @0x%x, size = %dBytes\nAre you sure? [y/n]", prog_begin, data_begin, size);
while(1)
{
key = Uart_GetKey();
if(key)
{
if(key=='y'||key=='Y')
{
Uart_SendByte(key);
Uart_SendByte('\n');
break;
}
if(key=='n'||key=='N')
{
Uart_SendByte(key);
Uart_SendByte('\n');
return 0;
}
}
}
cache_cfg = rNCACHBE0;
rNCACHBE0 = 0x20000000;
SectorProg(prog_begin, (unsigned short *)data_begin, size);
rNCACHBE0 = cache_cfg;
return 0;
}
//*****************************************************************************
/******************************************************************************
【功能說明】通過TFTP軟件,將目標代碼通過以太網下載到SDRAM,然后
將下載的目標代碼原原本本燒寫到Flash中去,不對代碼進行任何修改,適合于燒寫BIOS
******************************************************************************/
int Bios_Auto_Prog_Flash(int argc, char *argv[])
{
unsigned char key;
char ch_tmp[4][10];
char *para_ptr[4];
download_addr = DFT_DOWNLOAD_ADDR;
ResetNic();
Uart_Printf("Now begin address for download, use address 0x%x\n", download_addr);
Uart_Printf("Load image file from host\n");
Uart_Printf("Type tftp -i %d.%d.%d.%d put filename at the host PC\n", (IP_ADDRESS>>24)&0xff, (IP_ADDRESS>>16)&0xff, (IP_ADDRESS>>8)&0xff, IP_ADDRESS&0xff);
Uart_Printf("Press ESC key to exit\n");
download_begin = 1;
download_end = 0;
while (1)
{
NetSever();
if ((key=Uart_GetKey())==ESC_KEY)
{
Uart_SendByte('\n');
download_begin = 0;
return 0 ;
}
if(download_end)
{
download_begin = 0;
download_end = 0;
goto Next_Program_Flash ;
}
}
//*********************************************************************
Next_Program_Flash:
ultostr((unsigned char *)ch_tmp[0], 0);
ultostr((unsigned char *)ch_tmp[1], DFT_DOWNLOAD_ADDR);
ultostr((unsigned char *)ch_tmp[2], download_len);
para_ptr[1] = ch_tmp[0];
para_ptr[2] = ch_tmp[1];
para_ptr[3] = ch_tmp[2];
//將直接將下載的目標代碼原原本本燒寫到Flash中去,不作任何改動
ProgFlash(4, para_ptr);
return 0;
}
//*****************************************************************************
/******************************************************************************
【功能說明】通過TFTP軟件,將目標代碼通過以太網下載的SDRAM,然后將下載的代碼燒寫
到Flash中去,不過在Flash最低地址放置了跳轉到BIOS的跳轉指令,適合于燒寫應用程序
******************************************************************************/
int APP_Auto_Prog_Flash(int argc, char *argv[])
{
unsigned char key;
char ch_tmp[3][10];
char *para_ptr[4];
download_addr = DFT_DOWNLOAD_ADDR;
ResetNic();
Uart_Printf("Now begin address for download, use address 0x%x\n", download_addr);
Uart_Printf("Load image file from host\n");
Uart_Printf("Type tftp -i %d.%d.%d.%d put filename at the host PC\n", (IP_ADDRESS>>24)&0xff, (IP_ADDRESS>>16)&0xff, (IP_ADDRESS>>8)&0xff, IP_ADDRESS&0xff);
Uart_Printf("Press ESC key to exit\n");
download_begin = 1;
download_end = 0;
while (1)
{
NetSever();
if ((key=Uart_GetKey())==ESC_KEY)
{
Uart_SendByte('\n');
download_begin = 0;
return 0 ;
}
if(download_end)
{
download_begin = 0;
download_end = 0;
goto Next_Program_Flash ;
}
}
//*********************************************************************
Next_Program_Flash:
ultostr((unsigned char *)ch_tmp[0], 0x10000);
ultostr((unsigned char *)ch_tmp[1], DFT_DOWNLOAD_ADDR);
ultostr((unsigned char *)ch_tmp[2], download_len);
para_ptr[1] = ch_tmp[0];
para_ptr[2] = ch_tmp[1];
para_ptr[3] = ch_tmp[2];
ProgFlash(4, para_ptr);
return 0;
}
//*****************************************************************************
int CopyFlash(int argc, char *argv[])
{
unsigned int src, dst, size;
unsigned int cache_cfg;
char tmp[10];
if(argc<4)
{
Uart_Printf("Usage : copy a1 a2 size\n");
Uart_Printf("a1 = src address, a2 = dst address, size = copy bytes (all in hex)\n");
return -1;
}
src = strtoul((unsigned char *)argv[1]);
dst = strtoul((unsigned char *)argv[2]);
size = strtoul((unsigned char *)argv[3]);
if(src==-1||dst==-1||size==-1)
{
Uart_Printf("give error address\n");
return -1;
}
cache_cfg = rNCACHBE0;
rNCACHBE0 = 0x20000000;
FlashRead(src, (unsigned short *)DFT_DOWNLOAD_ADDR, size);
rNCACHBE0 = cache_cfg;
argv[1] = argv[2];
argv[2] = tmp;
ultostr((unsigned char *)tmp, DFT_DOWNLOAD_ADDR);
ProgFlash(4, argv);
return 0;
}
//int BootLoader(int argc, char *argv[])
//{
// unsigned char key;
//
// Uart_Printf("boot from flash, are you sure? [y/n]");
// while(1)
// {
// key = Uart_GetKey();
// if(key)
// {
// if(key=='y'||key=='Y')
// {
// void (*fp)(void) =(void (*)(void))BIOS_LOAD;
// Uart_SendByte(key);
// Uart_SendByte('\n');
// (*fp)();
// }
// if(key=='n'||key=='N')
// {
// Uart_SendByte(key);
// Uart_SendByte('\n');
// break;
// }
// }
// }
//
// return 0;
//}
//int BackupBios(int argc, char *argv[])
//{
// unsigned char key;
// unsigned int cache_cfg;
//
// Uart_Printf("move bios to the top of rom,are you sure? [y/n]");
//
// while(1)
// {
// key = Uart_GetKey();
// if(key)
// {
// if(key=='y'||key=='Y')
// {
// Uart_SendByte(key);
// Uart_SendByte('\n');
// break;
// }
// if(key=='n'||key=='N')
// {
// Uart_SendByte(key);
// Uart_SendByte('\n');
// return 0;
// }
// }
// }
//
// cache_cfg = rNCACHBE0;
// rNCACHBE0 = 0x20000000;
// FlashRead(0, (unsigned short *)DFT_DOWNLOAD_ADDR, 0xf000);
// SectorProg(BIOS_BASE, (unsigned short *)DFT_DOWNLOAD_ADDR, 0xf000);
// rNCACHBE0 = cache_cfg;
//
// return 0;
//}
int MemoryDisplay(int argc, char*argv[])
{
unsigned int sys_cfg;
unsigned int src;
unsigned int i, j;
unsigned int *data;
if(argc < 2)
src = 0;
else
{
src = strtoul((unsigned char *)argv[1]);
if(src%4 != 0) src-=src%4;
}
data = (unsigned int *)src;
Uart_Printf("0x%8.8x: ",data);
sys_cfg = rSYSCFG;
rSYSCFG = 0x08;
for(i=0;i<22;i++)
{
for(j=0;j<4;j++)
Uart_Printf("%8.8x ",*data++);
if(i<21)
Uart_Printf("\n0x%8.8x: ",data);
}
Uart_SendByte('\n');
rSYSCFG = sys_cfg;
return 0;
}
int Flash2Mem(int argc, char*argv[])
{
unsigned int src, dst, size, i;
unsigned int cache_cfg;
unsigned int *data_src, *data_dst;
if(argc<4)
{
Uart_Printf("Usage : move a1 a2 size\n");
Uart_Printf("a1 = src address, a2 = dst address, size = copy bytes (all in hex)\n");
return -1;
}
src = strtoul((unsigned char *)argv[1]);
dst = strtoul((unsigned char *)argv[2]);
size = strtoul((unsigned char *)argv[3]);
if(src==-1||dst==-1||size==-1||(dst-size)<src)
{
Uart_Printf("give error address\n");
return -1;
}
data_src = (unsigned int *)src;
data_dst = (unsigned int *)dst;
cache_cfg = rNCACHBE0;
rNCACHBE0 = 0x20000000;
size = size%4 ? size/4+1 : size/4;
for(i=0;i<size;i++)
*data_dst++ = *data_src++;
rNCACHBE0 = cache_cfg;
Uart_Printf("move finished!\n");
return 0;
}
//int SaveEnv(int argc, char*argv[])
//{
// unsigned int * pdata;
// unsigned int cache_cfg;
//
// cache_cfg = rNCACHBE0;
// rNCACHBE0 = 0x20000000;
// pdata = (unsigned int*)(DFT_DOWNLOAD_ADDR+ENV_ADD);
//
// FlashRead(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR), SECTOR_SIZE);
// *pdata++ = IP_ADDRESS;
// *pdata++ = GATE_ADDRESS;
// *pdata++ = MASK_ADDRESS;
// *pdata++ = SERIAL_BAUD;
// *pdata++ = MCLK_M;
// *pdata++ = MCLK_P;
// *pdata++ = MCLK_S;
// SectorProg(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR), SECTOR_SIZE);
//
// rNCACHBE0 = cache_cfg;
//
// return 0;
//}
//
//
//int LoadEnv(int argc, char*argv[])
//{
// unsigned int * pdata;
// unsigned int cache_cfg;
// unsigned int t_ip, t_gate, t_mask, t_baud, t_mclk;
// unsigned char t_m, t_p, t_s, tt_s;
// unsigned char key;
// int i = 1;
//
// cache_cfg = rNCACHBE0;
// rNCACHBE0 = 0x20000000;
// pdata = (unsigned int*)(DFT_DOWNLOAD_ADDR+ENV_ADD);
// FlashRead(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR), SECTOR_SIZE);
// rNCACHBE0 = cache_cfg;
//
// t_ip = *pdata++;
// t_gate = *pdata++;
// t_mask = *pdata++;
// t_baud = *pdata++;
// t_m = *pdata++;
// t_p = *pdata++;
// t_s = *pdata++;
//
// tt_s = t_s;
// while(tt_s--)
// i *= 2;
// t_mclk= (EXT_OSC_CLK*(t_m+8))/((t_p+2)*i);
//
// Uart_Printf("IP address : %u.%u.%u.%u\n", (t_ip>>24)&0xff, (t_ip>>16)&0xff, (t_ip>>8)&0xff, t_ip&0xff);
// Uart_Printf("IP address : %u.%u.%u.%u\n", (t_gate>>24)&0xff, (t_gate>>16)&0xff, (t_gate>>8)&0xff, t_gate&0xff);
// Uart_Printf("IP address : %u.%u.%u.%u\n", (t_mask>>24)&0xff, (t_mask>>16)&0xff, (t_mask>>8)&0xff, t_mask&0xff);
// Uart_Printf("Serial baud : %d\n", t_baud);
// Uart_Printf("Clock : %dHz\n", t_mclk);
//
// Uart_Printf("Load enviroment value from flash [y/n]");
//
// while(1)
// {
// key = Uart_GetKey();
// if(key)
// {
// if(key=='y'||key=='Y')
// {
// Uart_SendByte(key);
// Uart_SendByte('\n');
// break;
// }
// if(key=='n'||key=='N')
// {
// Uart_SendByte(key);
// Uart_SendByte('\n');
// return 0;
// }
// }
// }
//
// locnode.ip = IP_ADDRESS = t_ip;
// locnode.gate = GATE_ADDRESS = t_gate;
// locnode.mask = MASK_ADDRESS = t_mask;
// MCLK_M = t_m; MCLK_P = t_p; MCLK_S = t_s;
// SERIAL_BAUD = t_baud;
//
// i = 8000;
// while(i--);
// ChangePllValue(MCLK_M, MCLK_P, MCLK_S);
//
// i = 8000;
// while(i--);
// Uart_Init(0,SERIAL_BAUD);
// Uart_Getch();
//
// return 0;
//
//}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -