📄 example_dps2812m_lan.c
字号:
/*************************************************************************
filename: DPS2812-LAN.C
designer: 戴展波
date: 2004/12/17
*************************************************************************/
#include <string.h>
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "Example_DPS2812M_LAN.H"
void main(void)
{
//初始化系统控制
InitSysCtrl();
//关总中断
DINT;
IER = 0x0000;
IFR = 0x0000;
//初始化PIE控制
InitPieCtrl();
//初始化PIE矢量表
InitPieVectTable();
//初始化外设
InitPeripherals();
//初始化LAN
init_lan();
//
if(transmit_fail() == 0)
{
for(;;);
}
//
//transmit_frame();
//
receive_frame();
//
//EALLOW; // This is needed to write to EALLOW protected registers
//PieVectTable.XINT2 = &LAN_INTERRUPT; //XINT1_ISR;
//EDIS; // This is needed to disable write to EALLOW protected registers
//开启IER
//IER |= M_INT1;
//使能总中断
//EINT;
//使能全局实时中断DBGM
//ERTM;
for(;;)
{
KickDog();
}
}
/***************************************************************************
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++)
{
}
}
void InitECan(void)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -