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

📄 example_dps2812m_lan.c

📁 代码是北京合众达公司提供的TMS320F2812的例子程序
💻 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 + -