微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于嵌入式SoPC的以太网接口设备

基于嵌入式SoPC的以太网接口设备

时间:09-14 来源:互联网 点击:
软件开发

嵌入式开发环境EDK(Embedded Development Kit)将软件开发分为两大部分,一是底层系统软件的开发,主要完成BSP(板级支持包)的功能;另一部分则是用户应用软件的开发(包括用户硬件驱动及用户上层应用软件)。由于EDK中带有许多IP核以及相应的驱动软件,因此底层系统软件的开发大部分可以借助EDK集成开发环境来完成的,如操作系统的选择、设备驱动程序的选择、中断/异常处理例程的设置、操作系统参数设置等在内的各种系统级软件参数的设置。而用户应用软件的开发由于有底层驱动的隔离,可移植性好。整个用户软件的开发及调试工作都可以在EDK中完成。

● 底层系统软件开发

在本设计中,没有使用操作系统,使用所谓的standalone模式,即EDK仅提供硬件初始化及引导代码。此外还需要对GPIO、EMC、RS232、中断控制器等一些外设生成底层驱动,这些都可以通过在EDK集成环境XPS中选择菜单Project->Software Platform Settings的对话框进行设置,如图3所示。其实质是自动修改工程的.MSS文件。例如中断函数的处理例程可在如图4所示的界面中加以设置。也可以手工编辑.MSS文件如下设置:

PARAMETER int_handler = CS8900A_INT_HANDLER, int_port = IP2INTC_Irpt



图3 在XPS中设置操作系统和驱动程序



图4 在XPS中设置中断服务例程

设置完成后在XPS中运行Tools->Generate Libraries and BSPs将调用LibGen自动生成驱动库文件,这些CPU和外设驱动库的设置、操作函数实现或定义可在工程项目根目录下的以处理器实例名为名字的目录下的libsrc目录下相应的各模块子目录中找到,参考其实现有助于深刻理解事实上发生的操作。例如中断向量表可在中段向量控制器模块子目录(本例中为intc_v1_00_c\src)下的xintc_g.c文件中找到。

● 用户软件开发

用户软件主要是对网络控制器、GPIO、RS232串口等的操作,其中控制CS8900A的程序是重要部分,它要完成TCP/IP协议。CS8900A所有的控制寄存器和数据寄存器都映射在被称为PacketPage的片上4K地址空间内,这4K空间可映射到主机地址空间中(存储器模式),或通过8个16位I/O口进行存取(I/O模式)。本设计中CS8900A工作于I/O模式,通过EDK的OPB_EMC IP作为OPB总线上的一个设备,并给EMC控制器和所映射的设备分配操作地址空间,在程序中用 Xuint32 XIo_In32(XIo_Address InAddress); void XIo_Out32(XIo_Address OutAddress, Xuint32 Value);

读写映射的设备,这两个I/O函数同*pDestMem = Value(直接读写存储器操作)的差别在于前者做了读写同步(调用eieio汇编指令)。参考芯片手册编写CS8900A的驱动,实现基本I/O操作CS8900A_SendFrame和CS8900A_RecvFrame。EDK中有需付费的以太网IP CORE并附带有一些TCP/IP协议栈,该协议栈实现了大部分常用功能,但也有一些重要功能并未实现,例如TCP包的超时未达重发,收发操作的中断工作方式。通过修改、增加和完善这些软件包,实现了真正面向用户更高层应用软件的网络编程接口。

● 软件开发中的部分问题

软件开发过程中遇到的几个主要问题归纳如下:

(1)IEEE 802.3网络及网络控制器CS8900A采用的均是Little Endian编码,而XC2VP40内含的处理器PowerPC 405D5采用的是Big Endian编码方式,因此在数据I/O过程中需要做一下转换。

(2)可通过编写链接控制脚本文件控制应用程序的链接过程,从而控制程序映像在存储器中的重定位过程。这在FPGA这种存储器资源有限的环境中有时很有用。

(3)要将EDK提供的默认bootloop程序打包到硬件初始化流中,这样做的目的是提供默认的CPU复位后运行程序,保证CPU处在可预知的状态,而不是因为执行了存储器中的随机代码而处于一种未知的状态。  

系统调试方法

由于PowerPC 405处理器核中已包含调试模块,并用JTAG端口引出,只要在系统中添加一个叫做JTAGPPC的IP模块并和PowerPC 405相连便可将其调试端口串入FPGA的JTAG链中,这样只需使用FPGA本身的下载电缆和JTAG接口便可完成系统软件调试而不需要增加额外电路。

EDK提供的软件调试工具主要有XMD和GDB。值得一提的是利用XMD下载可执行程序映像时还会显示各程序段的重定位情况,在发生错误时会报告错误,诸如要求的地址空间大于实际提供的地址空间等错误,而这在EDK集成环境下是看不到的。在存在多种类型存储器资源的情况下,编写链接控制脚本文件控制重定位过程可能能够解决上述某地址空间不够的问题。网络通信部分的调试主要由Sniffer软件辅助完成。

GDB是EDK附带的GNU的主机方图形界面调试工具,它通过和XMD通信完成图形界面调试功能,此时XMD则扮演了一个主机方调试代理的角色,所有的调试通信是由XMD同目标机通信完成的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top