#include "ctrl_set.h"
#include "console.h"
#include "utils.h"
#include "39vf160.h"
#include "DataType.h"
#define DFT_DOWNLOAD_ADDR 0xc600000
#define MAX_CMD_LEN 128
#define MAX_ARGS MAX_CMD_LEN/4
extern U32 MCLK;
int IP_ADDRESS = 0xc0a80103;
U32 SERIAL_BAUD = 115200;
U32 download_addr;
U32 program_begin;
char table_begin[] = "/***************************************************************/\n";
#define prompt() puts("\\>")
TIME_STRUC SysTime;
char *WeekDay[7] = {"SUN","MON", "TUES", "WED", "THURS","FRI", "SAT"};
/*********************************************************/
int GetParameter(char *str, int cnt)
{
int i, key;
i = 0;
while(1)
{
if(kbhit())
{
key = getkey();
if(key==BACK_KEY)
i -= i?1:0;
else
if(key==ENTER_KEY)
{
str[i] = 0;
return i;
}
else
if(i<cnt)
{
putch(key);
str[i++] = key;
}
}
}
}
/*********************************************************/
int SysClock(int argc, char *argv[])
{
printf("System is running @%dHz\n", MCLK);
return 0;
}
int GetDate(int argc, char *argv[])
{
int i, error = 0;
char tmp[8];
char *str;
U32 year, month, day;
RtcGetTime(&SysTime);
printf("Current date is %d-%x-%x %s\n", SysTime.year, SysTime.month, SysTime.day, WeekDay[SysTime.weekday]);
if(argc<2)
return 0;
str = argv[1];
for(i=0; i<5; i++)
tmp[i] = str[i];
if(tmp[4]!='-')
error = 1;
year = strtodec(str, 4);
if(year<2000||error)
{
puts("year error!\n");
return 0;
}
str += 5;
i = 0;
if(str[++i]!='-')
if(str[++i]!='-')
error = 1;
str[i] = 0;
month = strtobcd(str);
if((month-1)>0x11||error)
{
puts("month error!\n");
return 0;
}
str += i+1;
i = 0;
if(str[++i]!=0)
if(str[++i]!=0)
error = 1;
str[i] = 0;
day = strtobcd(str);
if((day-1)>0x30||error)
{
puts("day error!\n");
return 0;
}
SysTime.year = year-2000;
SysTime.month = month;
SysTime.day = day;
RtcSetDay(&SysTime);
printf("Set date %d-%x-%x %s\n", year, month, day, WeekDay[SysTime.weekday]);
return 1;
}
int SetWeek(int argc, char *argv[])
{
U32 i;
int error = 0;
if(argc<2)
error = 1;
i = strtodec(argv[1], 1);
if((i-1)>5)
error = 1;
if(!error)
{
SysTime.weekday = i;
RtcSetWeek(&SysTime);
printf("Set to %s\n", WeekDay[i]);
}
else
{
puts("Please enter weekday\n");
puts("0 : Sunday\n");
puts("1 : Monday\n");
puts("2 : Tuesday\n");
puts("3 : Wednesday\n");
puts("4 : Thursday\n");
puts("5 : Friday\n");
puts("6 : Satday\n");
}
return 0;
}
int GetTime(int argc, char *argv[])
{
int i, error = 0;
char *str;
U32 hour, min, sec;
RtcGetTime(&SysTime);
printf("Current time is %x:%x:%x\n", SysTime.hour, SysTime.min, SysTime.sec);
if(argc>1)
{
str = argv[1];
i = 0;
if(str[++i]!=':')
if(str[++i]!=':')
error = 1;
str[i] = 0;
hour = strtobcd(str);
if(hour>0x23||error)
{
puts("hour error!\n");
return error;
}
str += i+1;
i = 0;
if(str[++i]!=':')
if(str[++i]!=':')
error = 1;
str[i] = 0;
min = strtobcd(str);
if(min>0x59||error)
{
puts("minute error!\n");
return error;
}
str += i+1;
i = 0;
if(str[++i]!=0)
if(str[++i]!=0)
error = 1;
str[i] = 0;
sec = strtobcd(str);
if(sec>0x59||error)
{
puts("second error!\n");
return error;
}
SysTime.hour = hour;
SysTime.min = min;
SysTime.sec = sec;
RtcSetTime(&SysTime);
printf("Set time %x:%x:%x\n", hour, min, sec);
}
return error;
}
/*********************************************************/
int ChgSysMclk(int argc, char *argv[])
{
int i, mdiv, pdiv, sdiv;
char tmp[4];
puts("This function is for adjust system running clock!!!\n");
printf("Current clock is %dHz\n", MCLK);
puts("Please enter the PLL parameter to use, mdiv[0-255], pdiv[0-63], sdiv[0-3]\n");
puts("mdiv: ");
if((mdiv=strtodec(tmp, GetParameter(tmp, 3)))<0)
{
puts("\nget mdiv Error!\n");
return 0;
}
puts("\npdiv: ");
if((pdiv=strtodec(tmp, GetParameter(tmp, 3)))<0)
{
puts("\nget pdiv Error!\n");
return 0;
}
puts("\nsdiv: ");
if((sdiv=strtodec(tmp, GetParameter(tmp, 3)))<0)
{
puts("\nget sdiv Error!\n");
return 0;
}
printf("\nYou set System clock mdiv = %d, pdiv = %d, sdiv = %d\n", mdiv, pdiv, sdiv);
i = 8000;
while(i--);
ChangePllValue(mdiv, pdiv, sdiv);
i = 8000;
while(i--);
console_init(SERIAL_BAUD);
printf("Current clock is %dHz\n", MCLK);
return 0;
}
int ChgBaudRate(int argc, char *argv[])
{
int i;
U32 BaudSet [6] = {4800, 9600, 19200, 38400, 57600, 115200};
for(i=0; i<6; i++)
printf("%d : %d\n", i, BaudSet[i]);
puts("Please enter choice : ");
while(1)
{
int ch = getch();
if(ch<='6'||ch>='0')
{
SERIAL_BAUD = BaudSet[ch-'0'];
printf("Baud rate set to : %d\nPress any key to continue\n", SERIAL_BAUD);
i = 0x4000;
while(i--); //wait transmit end
console_init(SERIAL_BAUD);
getch();
break;
}
}
return 0;
}
/*********************************************************/
int tftp_main(unsigned long ip, unsigned long addr, int method);
int LoadFile2Mem(int argc, char *argv[])
{
if(argc<2)
{
download_addr = DFT_DOWNLOAD_ADDR;
printf("No begin address for download, use default address 0x%x\n", download_addr);
}
else
download_addr = strtoul(argv[1]);
tftp_main(IP_ADDRESS, download_addr, 0);
return 0;
}
int ProgFlash(int argc, char *argv[])
{
unsigned int size = ~0;
unsigned int data_begin = ~0;
unsigned int prog_begin = ~0;
int overwrite0 = 1;
int modify_a0 = 0;
unsigned int bios_load_addr;
if(argc<4)
{
puts("Arguments error!\n");
puts("Usage: prog a1 a2 size [-no0]\na1 = program begin address\na2 = data pointer to ram\nsize = program size(Bytes)\n-no0 = don't overwrite address 0\n");
return -1;
}
prog_begin = strtoul(argv[1]);
data_begin = strtoul(argv[2]);
size = strtoul(argv[3]);
if(size==0)
{
puts("Write 0 Bytes!\n");
return -1;
}
if(prog_begin==-1||data_begin==-1) //
{
puts("Arguments error\n");
return -1;
}
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)
{
if(kbhit())
{
int key = getkey();
if(key=='y'||key=='Y')
{
putch(key);
next_line();
break;
}
if(key=='n'||key=='N')
{
putch(key);
next_line();
return 0;
}
}
}
#define __ROM_SIZE 0x200000
#define BIOS_BASE (__ROM_SIZE-0x10000)
#define BIOS_LOAD (__ROM_SIZE-4)
if(argc>4)
if(strncmp(argv[4], "-no0", 4)==0)
overwrite0 = 0;
if((prog_begin==0)&&overwrite0)
{
unsigned int ins;
ins = *(unsigned int *)data_begin;
if((ins>>24)==0xea) // instruction: b xxxx, now just support b instruction!!!
bios_load_addr = ((ins&0xffffff)<<2)+8;
else
bios_load_addr = 4; // other instruction, jump to 4
bios_load_addr = (bios_load_addr-BIOS_LOAD-8)/4;
bios_load_addr = (bios_load_addr&0xffffff)|0xea000000;
*(unsigned int *)data_begin = 0xea000000+(BIOS_BASE-8)/4;
modify_a0 = 1;
}
SectorProg(prog_begin, (unsigned short *)data_begin, size);
if(modify_a0)
{
size = FlashSector(size-1)+SECTOR_SIZE;
FlashRead(FlashSector(BIOS_LOAD), (U16 *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);
*(U32 *)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4) = bios_load_addr;
SectorProg(FlashSector(BIOS_LOAD), (U16 *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);
}
re
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
bios44b0.rar (79个子文件)
bios44b0
skbuff.c 1KB
Release
ctrl_set.o 2KB
skbuff.o 1000B
44BINIT.o 4KB
tftpput.o 2KB
icmp.o 940B
system.bin 37KB
ip.o 2KB
udp.o 1020B
arp.o 2KB
eth.o 900B
utils.o 1KB
EuCos.axf 60KB
console.o 2KB
mac.o 2KB
main.o 12KB
39VF160.o 2KB
tftpmain.o 2KB
tftp.o 2KB
arp.c 5KB
ip.c 3KB
44BINIT.S 13KB
main.c 16KB
inc
config.h 362B
tftpput.h 161B
skbuff.h 688B
Rtl8019.h 2KB
44B0X.H 15KB
Option.s 601B
MemCfg.s 3KB
mac.h 252B
ip.h 704B
icmp.h 231B
tftp.h 1KB
utils.h 549B
eth.h 2KB
ctrl_set.h 526B
udp.h 528B
DataType.h 980B
bios.h 7KB
console.h 275B
arp.h 4KB
39vf160.h 525B
tftp.c 2KB
tftpmain.c 2KB
mac.c 8KB
bios.apj 9KB
39VF160.C 3KB
udp.c 1KB
tftpput.c 2KB
utils.c 2KB
console.c 3KB
eth.c 981B
ctrl_set.c 6KB
Option.a 1005B
icmp.c 1KB
bios44b0.mcp 138KB
Debug
ctrl_set.o 18KB
skbuff.o 6KB
44BINIT.o 4KB
tftpput.o 6KB
icmp.o 7KB
system.bin 40KB
ip.o 10KB
udp.o 8KB
boot.o 724B
vector.o 3KB
arp.o 10KB
eth.o 6KB
utils.o 5KB
EuCos.axf 121KB
console.o 20KB
mac.o 11KB
main.o 26KB
39VF160.o 8KB
tftpmain.o 11KB
SysInit.o 2KB
tftp.o 9KB
MEMCFG.A 2KB
共 79 条
- 1
资源评论
- vans882014-03-11正是44b0 BIOS 源码,可以作为研究使用!
- shiwei199020082012-12-04用了真心不错
gwenchill01
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功