?? 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++)
{
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -