DIY_DE2之DM9000A网卡调试系列例程(二)——DM9000A测试、自收发、实现UDP 下载本文

内容发布更新时间 : 2024/12/26 1:08:38星期一 下面是文章的全部内容请认真阅读。

DIY_DE2之DM9000A网卡调试系列例程(二)——DM9000A测试、自收发、实现UDP

一、摘要

通过在SOPC中定制软核,在Quartus II中建立硬件工程,然后在NIOS II中建立3个工程,分别实现DM9000A测试、DM9000A自收发和基于DM9000A的UDP协议的例子。3个例子所使用的DM9000A的驱动是一样的。

二、实验平台

软件平台:Quartus II 9.0 + Nios II 9.0 硬件平台:DIY_DE2

三、实验内容1——>DM9000A测试

通过对DM9000A的初始化,测试DM9000A是否能够正常的初始化,能否正常的运行。该内容不需要使用网线。以下为实现步骤。

1、采用SOPC定制软核

定制软核的详细步骤不再赘述,以上为定制的软核。 cpu_0需要设置的地方:

Reset Vector:cfi_flash_0、

Exception Vector:sram_16bit_512k_0

第二个标签页:Data Master处,Data Cache设置为None 之后分配地址,分配中断号,生成即可。

2、硬件电路

采用原理图的形式,创建顶层文件。 (1)添加生成的软核; (2)调用锁相环IP核; (3)连线、分配管脚;

(4)编译、综合,生成配置文件。 最后原理图如下图所示。

需要注意的问题:

(1)软核程序在SDRAM里面运行,为了使软核的速度提升,因此SDRAM的频率和cpu的频率都设置为100M。cpu时钟clk_100和sdram操作时钟clk_50都接PLL的c0,100M,无相位偏移;SDRAM的时钟管脚SDRAM_CLK连接PLL的c1,100M,偏移-3ns。

(2)DM9000A的时钟管脚接50M,直接连接晶振的输入端即可。 (3)复位管脚接高电平VCC即可。

(4)CFI_FLASH的复位管脚FLASH_RESET接高电平VCC即可。

3、软件方面

(1)打开NIOS II,新建工程,调用一个空的工程模板。

(2)添加DM9000A驱动:dm9000a.h和dm9000a.c,将上述两个文件包括basic_io复制到上步建立的工程文件夹下。见附录。

(3)添加一个新的.c文件,命名为main.c。将下列代码复制到main.c内。

main.c文件

1. #include \ 2. #include \ 3. int main() 4. {

5. unsigned int a; 6. a=DM9000_init();

7. DM9000_init(); // initialize DM9000 LAN chip // 8. if(!a) 9. { 10. 11.

printf(\

// TransmitPacket(unsigned char

*data_ptr,unsignedinttx_len);

12.

// ReceivePacket (unsigned char *data_ptr,unsignedint

*rx_len);

13. 14. 15.

} else

printf(\