/****************************************************************************
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++)
{
}
}
评论0