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

📄 lan.c

📁 TI f2812 dsp LAN commucation source code
💻 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++)
	{
		
	}
}

⌨️ 快捷键说明

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