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

📄 ge_cam.c

📁 程序是一个vxworks下对PMC公司3386千兆MAC芯片的驱动和配置
💻 C
字号:
/**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-**-
*	GE_CAM.c - Ethernet 1000M code. . 
*
*	Copyright 2001-12 by GDT, Inc
*
*	modification history
*	--------------------
*       2001-12-14,yxy created.
*
*/
#include <msgQlib.h>
#include <errno.h>
#include <taskLib.h>

#include "GE_GlobalP.h"
#include "GE_CAM.h"
#include "GE_Utility.h"

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

STATUS  cam_init()
{
	ULONG flag;  

	cam_hw_reset();
   	flag=outfpgaRead(0x2a);
 
  	if((flag & 0x40000000) == 0x40000000)	/*allow cam option*/
   	{
     		outfpgaWrite(0x68,0x00);	/*write the device ID*/
		outfpgaWrite(0x6C,0x00);	/*write device work mode*/
		outfpgaWrite(0x5C,0xFFFFFFFF);	/*write globe mask*/
		outfpgaWrite(0x60,0x00);
		outfpgaWrite(0x58,0xFFFFFFFF);
   	}
    	if(GE_ARP_DEBUG)
    	        GE_printf(GE_EVENT,"cam_init:cam init succeed!\n");
     	return OK;
}
/******************************************************************/
 STATUS cam_software_reset()
{
	ULONG flag;

	flag=outfpgaRead(0x2a);
 	if((flag & 0x40000000) == 0x40000000)	/*allow cam option*/
 	{ 		
		outfpgaWrite(0x54,0x0);
  		if(GE_ARP_DEBUG)
  		        GE_printf(GE_EVENT,"cam_software_reset:cam reset succeed!\n");
		return  OK;
	}
	
	return ERROR;
}

/*** **************************************************************/
STATUS cam_hw_reset()
{
	outfpgaWrite(0x1e,0x0);
	taskDelay(1);

	return OK;
}
/*** **************************************************************/
STATUS cam_add(ULONG address,ULONG ipaddr,ULONG macHigh,ULONG macLow)
{
 	ULONG flag;
	flag=outfpgaRead(0x2a);	
	if((flag & 0x40000000) == 0x40000000)/*allow cam option*/
   	{	outfpgaWrite(0x40,address);
                outfpgaWrite(0x64,ipaddr);
                outfpgaWrite(0x44,macHigh);
                outfpgaWrite(0x48,macLow);
		if(GE_ARP_DEBUG)
		        GE_printf(GE_EVENT,"cam_add:cam add succeed!\n");
		return OK;
	}

	return ERROR;
}

/*******************************************************************/
STATUS cam_del(ULONG addrCounter)
{
 	ULONG flag;
	flag=outfpgaRead(0x2a); 	
	if((flag & 0x40000000) == 0x40000000)/*allow cam option*/
  	{
 	 	outfpgaWrite(0x4C, addrCounter);
 	 	if(GE_ARP_DEBUG)
 	 	        GE_printf(GE_EVENT,"cam del:cam del succeed!\n");
 		
	}

	return OK;
}
/**************************************************************************/
STATUS  cam_read(ULONG addr)
{
	ULONG flag;
	ULONG macHigh,macLow;
	flag=outfpgaRead(0x2a);

	while((flag & 0x40000000) == 0x40000000)
	{
		outfpgaWrite(0x50,addr);
		flag=outfpgaRead(0x2a);
		if((flag & 0x40000000) == 0x40000000)
		{
			macHigh=outfpgaRead(0x2b);
			macLow=(outfpgaRead(0x2c));
			if(GE_ARP_DEBUG)
			        GE_printf(GE_DATA,"cam_read:macHigh=%4lx,macLow=%4lx",macHigh,macLow);
			
			return  OK;
		}
		
	}
	return  ERROR;
}

/*end of GE_CAM.c*/	

⌨️ 快捷键说明

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