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

📄 imgdl.c

📁 (1)本人基于MPC860的vxworks bsp的程序 (2)实现了FEC 100M和 SCC 10M的网口功能 (3)实现了nor flash的TFFS文件系统 (4)实现了系统的自检 (
💻 C
📖 第 1 页 / 共 2 页
字号:
	if(status == OK)
	{
		if(ifAddrSet(INTER_NAME,key)==OK)
		{
			status=OK;
			printf("Set Manager IP Address to %s Success!\r\n",key);
		}
		else
		{
			ifAddrSet(INTER_NAME,"192.168.12.166");
			printf("set manager ip address = 192.168.12.166\r\n");
		}
	}

	memset(key,0,sizeof(key));
	status = ConfigGetKey("/agent/GWM7040.BIN","TDMoIP","GWM7040_MANA_SUB_MASK",key);
	if(status == OK)
	{
		str2SubNet(key, &NetMask);
		if(ifMaskSet(INTER_NAME,NetMask)==OK)
		{
			status=OK;
			printf("Set Manager Subnet Mask to %s Success!\r\n",key);
		}
		else
		{
			ifMaskSet(INTER_NAME,0xffffff00);
			printf("set manager subnet mask  = 255.255.255.0\r\n");
		}
	}

	return status;

}

#endif

void tempForSystemRun(int i)
{
	FILE *fp;
	char buf[5];
	fp=fopen("/agent/tempRun.bin","w");
	sprintf(buf,"%d",i);
	if(fp==NULL)
		printf("Error Get!\r\n");
	else
	{
		fwrite(buf,1,1,fp);
	}
	fclose(fp);
	return 0;
}

void DemoInitInBootRom()
{
	int status;
	
	status = ds21455DeviceInit();
	if(status == OK)
	{
		printf("ds21455 Init complete!\r\n");
	}
	else
	{
		printf("ds21455 init Error!\r\n");
	}

	if(status == OK)
	{
		status = zl50114DeviceLiuInit();
		if(status == OK)
		{
			printf("zl50114 Init complete!\r\n");
		}
		else
		{
			printf("zl50114 Init Error!\r\nErrno Number = %d\r\n",status);
		}
	}

	if(status == OK)
	{
		tempForSystemRun(1);

		printf("Device Init done!\r\n");
	}
	else
	{
		tempForSystemRun(0);
		printf("Device Init Error!\r\n");
	}

	
	/*
	if(status == OK)
	{
		printf("start E1 Interrupt !\r\n");
		 taskSpawn ("tTest", 120, 8,
		20000, (FUNCPTR) DeviceIntrDemo,
		0,0,0,0,0,0,0,0,0,0);
	}*/
}

void wdlf(char * pLine)
{
	char fname[3][20];
	switch(atoi(pLine))
		{
	case 0:
		printf("the TFTP server is :");
		scanf("%s",fname[0]);
		printf("file get is:");
		scanf("%s",fname[1]);
		printf("the name upload:");
		scanf("%s",fname[2]);
		tftpDownLoadFile(fname[0], fname[1], fname[2]);
		break;
	case 1:
		testa();
		break;
	default:
		printf("the result is %d\r\n",zl50114DeviceLiuInit());
		printf("the result of ds21455 is %d\r\n",ds21455DeviceInit());
		}
#if 0
	char usage[]={"w <option number>\r\n
	0   DMA example\r\n
	1   Frame example\r\n
	2   LAN-LAN example\r\n
	3   WAN-WAN example\r\n
	4   WAN-PE-PKT master mode\r\n
	5   WAN-PE-PKT slave mode\r\n
	6   WAN-PE-PKT for single board\r\n
	7   DS21455 Init\r\n
	8   DS21455 Interrupt Test\r\n"};
	int span;
	int par[4];
/*
	 taskSpawn ("tTest", 120, 8,
		20000, (FUNCPTR) test1,
		0,0,0,0,0,0,0,0,0,0);
	 printf("task1 OK\r\n");
*/

if(strlen(pLine)==0)
{
	printf("%s\r\n",usage);
	return;
}
switch(atoi(pLine))
{
case 0:
	kernelTimeSlice(10);
	printf("DMA init\r\n");
	printf("resule is %s\r\n",zl5011xGetErrString2(dmaExample()));
	printf("DMA Init OK\r\n");
	
break;

case 1:
	printf("zl50114 Init\r\n");
	test1();
	printf("zl50114 Init OK\r\n");
	break;

case 2:
	printf("LAN_LAN example\r\n"); 
	printf("resule is %s\r\n",zl5011xGetErrString2(lanlanExample()));
	break;
	
case 3:
	printf("WAN_WAN example\r\n");
	test2(2,par);
	break;
	
case 4:
	printf("WAN_PE_PKT master\r\n");
	test2(0,GetPar(par));
	break;
	
case 5:
	printf("WAN_PE_PKT slave\r\n");
	test2(1,GetPar(par));
	break;
case 6:
	printf("WAN_PE_PKT port 0 connect to port 1\r\n");
	test2(3,GetPar(par));
	break;

case 7:
	printf("which stream you want to init(0,1,2,3):");
	scanf("%d",&span);
	if(span<0 || span>3)
		printf("error stream range!\r\n");
	else
	{
		printf("DS21455 Init start\r\n");
		test3(span);
		printf("DS21455 Init Complete!\r\n");
	}
	break;
case 8:
	printf("DS21455 Interrupt TEST!\r\n");
	test4();
	break;

case 9:
	printf(" lan lan test!\r\n");
	lanlanTest();
	break;
	
default:
	printf("undefined value\r\n");
	printf("%s\r\n",usage);
	break;
}
#endif
/*
	flashdlCpy((Uint32T)pLine,(Uint32T) BOOTROMSTART, 10);
*/
/*
	sscanf(pLine,"%s %s %s %s",&fname[0][0],&fname[1][0],&fname[2][0],ttmp);
	printf("host=%s\r\nname=%s\r\nsize=%s\r\nswitch=%s\r\n",&fname[0][0],&fname[1][0],&fname[2][0],ttmp);
       netw(&fname[0][0],&fname[1][0],atoi(&fname[2][0]));
  */



}

static int ftpGetFile( char* host, char* fileName, void * buff ,int * maxSize)
{
     int  dataFd, total = 0;
     int  ctrlFd;
     int  num;
     int tmp;
     int last=0;
     int status=OK;
     int * buffhead;
     char buf [BUFFERSIZE ];
       printf("Get file from %s,maxsize=%d\r\nPlease wait ...\r\n",host,*maxSize); 
    buffhead=buff;
     if (ftpXfer (host, "power", "power","","RETR %s","",fileName, &ctrlFd, &dataFd) == ERROR)
     {
         printf("Can not establish link to host %s\r\n",host);
		 num=read(ctrlFd,buf,sizeof(buf));
		 printf("error=%s\r\n",buf);
         return (ERROR);
      }
     while ((num = read (dataFd, buf, sizeof (buf))) > 0)
     {
      last=total;
	total += num;
	 if(total>*maxSize)
	 {
		tmp=total-*maxSize;
		num=num-tmp;
		total=total-tmp;
		printf("over flow!total=%d,maxSize=%d,num=%d\r\n",total,*maxSize,num);
		memcpy(buff+last,buf,num);
		break;
	 }
        memcpy(buff+last, buf, num);
	 if(total%10240==0)
	 	printf(".");
	 	

     }
     close (dataFd);
     *maxSize=total;
     printf("\r\n");
     if (ftpReplyGet (ctrlFd, TRUE) != FTP_COMPLETE)
	 status = ERROR;

     if (ftpCommand (ctrlFd, "QUIT", 0, 0, 0, 0, 0, 0) != FTP_COMPLETE)
	 status = ERROR;

     close (ctrlFd);
     if( total >0 && status==OK)
         printf("File Transfered Successfully!\r\nSave %d to %08x\r\n ",total,(Uint32T)buffhead);
     else
     {
     	printf("File Transfered Failed!\r\n ");
	return ERROR;
     }

     return status;
}

/*******************************************************************************
netw
    use tftp net download bootrom image to mm

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

static void netw (char *adrs,char * name,int size)
{
	void * buff;
	/*
	printf("host=%s,name=%s,size=%d\r\n",adrs,name,size);
	*/
	if(size<=0)
	{
		printf("inValid file size!\r\n");
		return;
	}
	buff=malloc(size);
	if(NULL==buff)
	{
		printf("Request memory fail!\r\n");
		return;
	}
	memset(buff,0,size);
	if(atoi(ttmp)==0)
	{
		if(tftpGetFile(adrs,name,buff,&size)==OK)
		{
			printf("tftp download OK!\r\n");
			writeflash((Uint32T)(buff+ADDRESSSTART),(Uint32T) 0x40000100, size-ADDRESSSTART);
			printf("Flash write OK!\r\n");
		}
	}
	else
	{
		if(ftpGetFile(adrs,name,buff,&size)==OK)
		{
			printf("FTP download OK!\r\n");
			writeflash((Uint32T)(buff+ADDRESSSTART),(Uint32T)0x40000100,size-ADDRESSSTART);
			printf("Flash write OK!\r\n");
		}

	}
	free(buff);
}
#ifndef GWM7040
#define MAX_FOR_CYCLE 100
#else
#define MAX_FOR_CYCLE 20
#endif

static int optionIsDownW(Uint32T addr,Uint16T data)
{
/*
	vUint16T pooling;
	*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
	*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
	*((vUint16T *)BOOTROMSTART+0x555) = 0x80;
	*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
	*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
	*((vUint16T *)(BOOTROMSTART+addr)) = 0x30;
*/
	vUint16T polling;
	int n=0;

	/*polling = *((vUint16T *)(addr));
       while(!(polling & 0x0100))			
       {
              polling = *((vUint16T *)(addr));
	       if(polling==data)
		   	break;
       }*/
       
       /*taskDelay(1);*/
	for(n=0;n<MAX_FOR_CYCLE;n++);
	return 1;
}

static int optionIsDown(Uint32T addr)
{
/*
	vUint16T pooling;
	*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
	*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
	*((vUint16T *)BOOTROMSTART+0x555) = 0x80;
	*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
	*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
	*((vUint16T *)(BOOTROMSTART+addr)) = 0x30;
*/
	vUint16T polling;
	int n=0;

	polling = *((vUint16T *)(addr));
       while(!(polling & 0x0100))			
       {
              polling = *((vUint16T *)(addr));
       }
    
       /*taskDelay(1);*/
	/*for(n=0;n<MAX_FOR_CYCLE;n++);*/
	return 1;
}

static Uint32T flashGetSectorAddress(int sector)
{
	Uint32T addr=0;
#ifndef GWM7040
	if ((sector > 34) || (sector < 0))
        {
            printf("Sector Number error!\n");
            return 0xffffffff;
        }   
        else if (sector> 3)
        {
            addr = 0x010000 * (sector - 3);
        }
        else if (sector == 3)
        {
            addr = 0x008000; 
        }
        else if (sector == 2)
        { 
            addr = 0x006000;
        }
        else if (sector == 1)	
        {
            addr = 0x004000;
        }
        else if (sector == 0)					
        {
            addr = 0x000000;
        }
#else
	if(sector<8)
		addr=0x2000*sector;
	else
		addr=0x10000*(sector-7);
#endif /*if define GWM7040*/
	return addr;
}

static int flashdlEarseSector(Uint32T baseadr,int sector)
{
	Uint32T sectoraddr;
	sectoraddr=flashGetSectorAddress(sector);
	if((~sectoraddr)==0)
	{
		return -1;
	}
	*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
	*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
	*((vUint16T *)BOOTROMSTART+0x555) = 0x80;
	*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
	*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
	*((vUint16T *)(BOOTROMSTART+sectoraddr)) = 0x30;
	printf("sector %d address %08x earseing...\r\n",sector,sectoraddr);
	optionIsDown(BOOTROMSTART+sectoraddr);
	printf("sector %d earse complete!\r\n",sector);
	return 1;
}


static int flashGetSectorRange(int size,int * low,int * high)
{
	int temp;
	temp=((size+100)/1024)+1;
	*low=0;
	if(temp>64)
	{
		*high=(temp-64)/64+(((temp-64)%64==0)?0:1)+7;
		return 1;
	}
#ifndef GWM7040
	else if(temp<=16)
		{
			*high=0;
			return 1;
		}
	else if(temp<=24)
		{
			*high=1;
			return 1;
		}
	else if(temp<=32)
		{
			*high=2;
			return 1;
		}
	else if(temp<=64)
		{
			*high=3;
			return 1;
		}
#else
	else
		*high=temp/8-((temp%8==0)?1:0);
#endif  /*#if define GWM7040*/
	return 1;
}

static int flashEarseSectorRange(Uint32T addr,int low,int high)
{
	int n;
	printf("sector %d to %d will be earsed!\r\n",low,high);
	for(n=low;n<=high;n++)
	{
		flashdlEarseSector(addr, n);
	}
	printf("serctor earse complete!\r\n");
	return 1;
}

static int flashdlWrite(Uint32T addr,Uint16T data)
{

	*((vUint16T *)BOOTROMSTART + 0x555) = 0xAA;
	*((vUint16T *)BOOTROMSTART + 0x2AA) = 0x55;
	*((vUint16T *)BOOTROMSTART + 0x555) = 0xA0;	

/*
	*((vUint16T *)(0x20000AAA)) = 0xAAAA;
	*((vUint16T *)(0x20000554)) = 0x5555;
	*((vUint16T *)(0x20000AAA)) = 0xA0A0;	
	*(vUint16T *)( addr) = data;
*/
	/*printf("write %04x to %08x now\r\n",data,addr);*/
	return 1;
}


static int flashdlCpy(Uint32T src,Uint32T dest,int size)
{
	int n=0;
	int low,high;
	int tmp;
	int r;
	printf("start flash copy!\r\n");
	tmp=size/2+(((size%2)==0)?0:1);
	flashGetSectorRange(size, &low, &high);
	flashEarseSectorRange(BOOTROMSTART, 0, 0);
	printf("write to flash now!\r\n");
/*	Led1T(0);*/
	for(n=0;n<tmp;n++)
	{
		flashdlWrite((Uint32T)(2*n+dest), *(Uint16T *)(src+2*n));
		if(n%5120==0)
			printf("#");
/*		Led2T(((n%2)==0?1:0));*/
		taskDelay(sysClkRateGet());
		optionIsDownW(2*n+dest,*(Uint16T *)(src+2*n));
		/*printf("#");*/
	}
/*	Led1T(0);*/
	
	printf("\r\n");
	printf("write %d bytes to flash\r\n",tmp*2);
	return size;
}


int DeviceInit()
{
/*
	if(liuInitExample()==0)
	{
		if(ds21455InitExample()==0)
		{
			printf("system Init OK!\r\n");
		}
		return OK;
	}
	else
	{
		printf("system init error!\r\n");
		return ERROR;
	}
	return ERROR;
*/
}

⌨️ 快捷键说明

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