📄 dm642main.c
字号:
/********************************************************************/
/* Copyright 2004 by SEED Incorporated. */
/* All rights reserved. Property of SEED Incorporated. */
/* Restricted rights to use, duplicate or disclose this code are */
/* granted through contract. */
/* */
/********************************************************************/
/*
*---------dm642main.c---------
* This example uses a timer to read and write the ESAM.
*/
#include <csl_emifa.h>
#include <csl_chip.h>
#include "seeddm642.h"
#include "seeddm642_emac.h"
/*SEEDDM642的emifa的设置结构*/
EMIFA_Config Seeddm642ConfigA ={
0x00052078,/*gblctl EMIFA(B)global control register value */
/*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/
0xffffffd3,/*cectl0 CE0 space control register value*/
/*将CE0空间设为SDRAM*/
0x73a28e01,/*cectl1 CE1 space control register value*/
/*Read hold: 1 clock;
MTYPE : 0000,选择8位的异步接口
Read strobe :001110;14个clock宽度
TA:2 clock; Read setup 2 clock;
Write hold :2 clock; Write strobe: 14 clock
Write setup :7 clock
-- ---------------
\ 14c /1c
\----------------/ */
0xac2ab02f, /*cectl2 CE2 space control register value*/
/*Read hold :
*/
0x22a28a42, /*cectl3 CE3 space control register value*/
0x57115000, /*sdctl SDRAM control register value*/
0x0000081b, /*sdtim SDRAM timing register value*/
0x001faf4d, /*sdext SDRAM extension register value*/
0x00000002, /*cesec0 CE0 space secondary control register value*/
0x00000002, /*cesec1 CE1 space secondary control register value*/
0x00000002, /*cesec2 CE2 space secondary control register value*/
0x00000073 /*cesec3 CE3 space secondary control register value*/
};
CHIP_Config SEEDDM642percfg = {
CHIP_VP2+\
CHIP_VP1+\
CHIP_VP0+\
CHIP_I2C+\
CHIP_MCASP0
};
extern far void vectors();
extern Uint8 MacAddr[6];
extern Uint32 Newdataflag;
Handle hApplication = (Handle)0x66;
Handle hMDIO;
Handle hEMAC;
Uint32 ltmp1;
uint phyAddr = 0;
Uint16 retVal1;
EMAC_Pkt EmacPacket,*pEmacPacket;
Uint8 TxBuffer[1024];
uint Valret;
/*此程序可将四个采集口的数据经过Video Port0送出*/
void main()
{
Uint32 i;
/*-------------------------------------------------------*/
/* perform all initializations */
/*-------------------------------------------------------*/
/*Initialise CSL,初始化CSL库*/
CSL_init();
CHIP_config(&SEEDDM642percfg);
/*----------------------------------------------------------*/
/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
注,DM642支持的是EMIFA,而非EMIF*/
EMIFA_config(&Seeddm642ConfigA);
/*----------------------------------------------------------*/
/*中断向量表的初始化*/
//Point to the IRQ vector table
IRQ_setVecs(vectors);
IRQ_nmiEnable();
IRQ_map(IRQ_EVT_MACINT,11);
IRQ_reset(IRQ_EVT_MACINT);
/*----------------------------------------------------------*/
/*配置MAC*/
hMDIO = MDIO_open(MDIO_MODEFLG_FD10 +MDIO_MODEFLG_LOOPBACK );
/*搜索并初始化存在的PHY*/
// Try the next PHY if anything but a MDIOINIT condition
ltmp1 = MDIO_RGET( ALIVE );
for( i=0; i<32; i++ )
{
if( ltmp1 & (1<<phyAddr) )
{
if( MDIO_initPHY( hMDIO,phyAddr ) )
{
//read the phy ID
MDIO_phyRegRead(phyAddr,2, &retVal1 );
MDIO_phyRegRead(phyAddr,3, &retVal1 );
MDIO_phyRegRead(phyAddr,0, &retVal1 );
break; //find a phy device
}
}
if( ++phyAddr == 32 )
{
phyAddr = 0;//no phy device
}
}
MDIO_close(hMDIO);
/*----------------------------------------------------------*/
/*打开EMAC设备*/
hEMAC = seeddm642_EmacOpen();
/*设置接收方式*/
EMAC_setReceiveFilter(hEMAC,EMAC_RXFILTER_DIRECT);
//EMAC_setReceiveFilter(hEMAC,EMAC_RXFILTER_BROADCAST);
/*-----------------------------------------------------------*/
for(;;)
{
/*设置一个数据缓冲区*/
for(i = 0;i<6;i++)//设置源地址
{
TxBuffer[i] = MacAddr[i];
}
for( i = 6;i<12;i++)//设置目的地址
{
TxBuffer[i] = MacAddr[i-6];
}
TxBuffer[12]=4;
TxBuffer[13]=0;
for(i = 14;i<1024;i++)
{
TxBuffer[i] = i;
}
/*初始化一个数据包并发送Packet*/
EmacPacket.pNext = 0;
EmacPacket.pPrev = 0;
EmacPacket.pDataBuffer = TxBuffer;
EmacPacket.BufferLen = 1024;
EmacPacket.Flags = EMAC_PKT_FLAGS_SOP + EMAC_PKT_FLAGS_EOP;
EmacPacket.ValidLen = 1024;
EmacPacket.DataOffset = 0;
EmacPacket.PktChannel = 0;
EmacPacket.PktLength = 1024;
EmacPacket.PktFrags = 1;
pEmacPacket = &EmacPacket;
/*初始化一个数据包*/
Valret = EMAC_sendPacket(hEMAC,pEmacPacket);
// }
if(Valret != 0)
{
for(;;){}//send error
}
for(;;)
{
if(Newdataflag == 1)
{
// for(;;){}//recieve the new packet data
Newdataflag = 0;
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -