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(\