本文绝对原创。这是本人实习经过两个星期艰苦探索,艰苦调错摸索出来的。
鸣谢在Baidu上或多或少提供帮助的网友。
特别感谢一下连接的作者。http://www.cnblogs.com/sunev/archive/2012/03/12/2392510.html#2478302
虽然里面的例子不是很稳定,但是通过调整这个例子,再自己研究硬件驱动,我完成我的实习。
使用软件:
在测试的时候可以使用科来数据包生成器来从电脑发包:方便大家使用,我在网盘里给你们个连接
http://pan.baidu.com/share/link?shareid=2267413508&uk=3372569806
在嗅探的时候如果会使用sniffer最好,不会的话我也给个小软件,叫IpTool。基本够用。
http://pan.baidu.com/share/link?shareid=2291917654&uk=3372569806
还有就是7个可能用到的驱动程序。这是我的板子上有的,驱动来源是官方例子。
SRAM_16Bit_512K.rar http://pan.baidu.com/share/link?shareid=2298119953&uk=3372569806
这是个16Bit 512k的ram。但是由于我的板子上还有个8M的DRAM,我没用这个
Audio_DAC_FIFO.rar http://pan.baidu.com/share/link?shareid=2302455541&uk=3372569806
这是个音频的模块(有个Audio嘛)
Binary_VGA_Controller.rar http://pan.baidu.com/share/link?shareid=2303528870&uk=3372569806
这是个视频的模块(VGA)
DM9000A.rar http://pan.baidu.com/share/link?shareid=2306257136&uk=3372569806
这是个比较强大的网络模块芯片。我的这个实习主要就是这个芯片
ISP1362.rar http://pan.baidu.com/share/link?shareid=2309925263&uk=3372569806
这是个串口芯片。貌似是用来连接USB的
SEG7_LUT_8.rar http://pan.baidu.com/share/link?shareid=2313948234&uk=3372569806
这是七段管。玩过电路的肯定不陌生
由于实习没有结束,所以 我就不把工程给你们了。以后再传。而且在测试的时候发现,如果仅仅使用Import的话,一般是不能运行的
本下面的代码设计运行在Quartus II 9.0上和配套的Nios II 9.0 IDE
一、 实现功能;
- 实现发包:
- 实现收包,获取包的长度
- LCD屏幕和七段管显示收发包信息
- LCD屏幕显示开发相关说明
二、 DM9000A的相关说明
图表 1DM9000A的功能模块分布
下面DM9000的通用初始化函数
我尽最大的可能解释了一下。但是后面还是有些没看懂,保留原始的注释
unsigned int DM9000_init (void)
{
unsigned int i; //这是后面需要用的循环次数控制。用来设置网卡MAC地址
iow(0x1E, 0x01); //0x1E寄存器为1表示允许输出
iow(0x1F, 0x00); //0x1F寄存器为0表示激活芯片功能
msleep(5); //等待2毫秒以上让物理器件上电成功
iow(NCR, 0x03); //NCR为3是调用软件的变量复位
usleep(20); //等待10微秒以上以完成软件的变量复位
iow(NCR, 0x00); //下面一小段代码就是重复执行软件复位。
iow(NCR, 0x03); //这是为了尽可能的保证复位操作成功
usleep(20);
iow(NCR, 0x00);
iow(0x1F, 0x01); //0x1F为1表示暂停芯片功能。
iow(0x1F, 0x00); //这里两行代码是为了重新启动芯片
msleep(10); //等待上电成功
phy_write(0,PHY_reset); //初始化芯片状态
usleep(50); //等待芯片初始化结束
phy_write(16, 0x404); //关闭节能模式
phy_write(4, PHY_txab); /* set PHY TX advertised ability: ALL + Flow_control */
phy_write(0, 0x1200); //开启自动协调,自动嗅探监测功能
msleep(5); //等待功能开启成功
for (i = 0; i < 6; i++) //将预设的MAC地址输入板卡
iow(16 + i, ether_addr[i]);
iow(ISR, 0x3F); //ISR一共有3个寄存器,存储中断信息。全部清空
iow(NSR, 0x2C); //清除阻塞信息
iow(NCR, NCR_set); //启用芯片功能,关闭MAC自环路模式
iow(0x08, BPTR_set); /* BPTR REG.08 (if necessary) RX Back Pressure Threshold in Half duplex moe only: High Water 3KB, 600 us */
iow(0x09, FCTR_set); /* FCTR REG.09 (if necessary) Flow Control Threshold setting High/ Low Water Overflow 5KB/ 10KB */
iow(0x0A, RTFCR_set); /* RTFCR REG.0AH (if necessary) RX/TX Flow Control Register enable TXPEN, BKPM (TX_Half), FLCE (RX) */
iow(0x0F, 0x00); /* Clear the all Event */
iow(0x2D, 0x80); //切换LED模式