www.pudn.com > DPS2812_EXTAD.rar > lan.C


/**************************************************************************** 
	filename:	lan.c 
	designer:	戴展波 
	date:		2005/01/31 
*****************************************************************************/ 
#include "lan.h" 
 
/*************************************************************************** 
	funcname:	void init_lan(void) 
	说明:		初始化以太网 
	输入:		无 
	输出:		无 
****************************************************************************/ 
void init_lan(void) 
{ 
	unsigned int i; 
	//CS8900A选择16BIT总线模式 
	*LAN_SBHE = 0; 
	for(i = 0; i < SIZE_OF_FRAME; i++) 
	{ 
		receive_buffer[i] = 0; 
	} 
	//IO BASE ADDRESS为0x300 
	*(LAN_IOW + PACK_POINTER) = 0x20; 
	*(LAN_IOW + PACK_DATA0) = 0x300; 
	//中断PIN为INTREQ0 
	*(LAN_IOW + PACK_POINTER) = 0x22; 
	*(LAN_IOW + PACK_DATA0) = 0x0; 
	//设置Receive Control Register 
	*(LAN_IOW + PACK_POINTER) = 0x0104; 
	//RxOKA set,PromiscuousA set 
	*(LAN_IOW + PACK_DATA0) = 0x0180; 
	//设置Receive Control Register 
	*(LAN_IOW + PACK_POINTER) = 0x0106; 
	//RxOKA set,PromiscuousA set 
	*(LAN_IOW + PACK_DATA0) = 0x0107; 
	//设置Receive Control Register 
	*(LAN_IOW + PACK_POINTER) = 0x0102; 
	//RxOKA set,PromiscuousA set 
	*(LAN_IOW + PACK_DATA0) = 0x0103; 
	//设置Test Control Register 
	*(LAN_IOW + PACK_POINTER) = 0x0118; 
	//fdx,endec loop,disablelt is enable 
	*(LAN_IOW + PACK_DATA0) = 0x4280; 
	//设置LINE CONTROL REGISTER 
	*(LAN_IOW + PACK_POINTER) = 0x0112; 
	//RECEIVER、TRANSMITTER IS ENABLE 
	*(LAN_IOW + PACK_DATA0) = 0x00c0; 
} 
 
/*************************************************************************** 
	funcname:	unsigned int transmit_fail(void) 
	说明:		初始化以太网 
	输入:		无 
	输出:		0	错误 
			1	正确 
****************************************************************************/ 
unsigned int transmit_fail(void) 
{ 
	unsigned int i,temp; 
	for(i = 0; i < NO_FRAME_TO_SEND; i++) 
	{ 
		//开发发送在CS8900A中的数据 
		*(LAN_IOW + TXCMD) = 0xc0; 
		//设置发送帧的长度 
		*(LAN_IOW + TXLENGTH) = SIZE_OF_FRAME*2; 
		//设置bus status Register 
		*(LAN_IOW + PACK_POINTER) = 0x0138; 
		//延时 
		//delay(500); 
		//读BUS STATUS,C8900A发送准备好否 
		temp = *(LAN_IOR + PACK_DATA0); 
		if(temp != 0x118) 
		{ 
			return 0; 
		} 
		transmit_frame(); 
	} 
	return 1; 
} 
 
/*************************************************************************** 
	funcname:	void transmit_frame(void) 
	说明:		发送帧 
	输入:		无 
	输出:		无 
****************************************************************************/ 
void transmit_frame(void) 
{ 
	unsigned int i; 
	for(i = 0; i < SIZE_OF_FRAME; i++) 
	{ 
		*(LAN_IOW + PACK_POINTER) = 0x0a00; 
		*(LAN_IOW + PACK_DATA0) = 0x5555 + i; 
	} 
} 
 
/*************************************************************************** 
	funcname:	void receive_frame(void) 
	说明:		接收帧 
	输入:		无 
	输出:		无 
****************************************************************************/ 
void receive_frame(void) 
{ 
	unsigned int i,temp; 
	// 
	delay(500); 
	//设置RECEIVE EVENT REGISTER 
	*(LAN_IOW + PACK_POINTER) = 0x0124; 
	//RECEIVER、TRANSMITTER IS ENABLE 
	temp = *(LAN_IOR + PACK_DATA0); 
	// 
	if(temp != 0x0104) 
	{ 
		for(;;); 
	} 
	// 
	temp = *LAN_IOR; 
	// 
	if(temp != 0x0104) 
	{ 
		for(;;); 
	} 
	// 
	//设置RECEIVE EVENT REGISTER 
	*(LAN_IOW + PACK_POINTER) = 0x0400; 
	receive_frame_size = *(LAN_IOR + PACK_DATA0); 
	*(LAN_IOW + PACK_POINTER) = 0x0402; 
	receive_frame_size = *(LAN_IOR + PACK_DATA0); 
	// 
	for(i = 0; i < SIZE_OF_FRAME; i++) 
	{ 
		*(LAN_IOW + PACK_POINTER) = 0x0404 + i*2; 
		receive_buffer[i] = *(LAN_IOR+ PACK_DATA0); 
	} 
	 
} 
 
/*************************************************************************** 
	funcname:	void delay(unsigned int data) 
	说明:		延时 
	输入:		data	延时 
	输出:		无 
****************************************************************************/ 
void delay(unsigned int data) 
{ 
	unsigned int i; 
	for(i = 0; i < data; i++) 
	{ 
		 
	} 
}