微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于DSP的以太网通信接口设计

基于DSP的以太网通信接口设计

时间:06-25 来源:互联网 点击:

tek8029是单功能设备,故这几位全为0,AD〔11〕~AD〔31〕是设备选择位,其中必须有且仅有一位为“1”,如图2所示,这在物理上表现为总线的AD〔11〕~AD〔31〕中有一根为高电平如果输出高电平的这根线与某块PCI卡的PCI IDSEL引脚相连,这块卡就会被激活,这样,在紧接着的数据周期中,它就会将其PCI配置空间相应寄存器中的内容放到总线上以供读龋 (3) PCI_FRAME、PCI_DEVSEL、PCI_IRDY、PCI_TRDY引脚的处理 上述四个引脚均是低电平有效,因此需要接上拉电阻,以保证在设备未驱动该引脚时处于稳定的无效状态,上拉电阻的阻值在1kΩ~10kΩ范围内,阻值越小,则将该信号驱动为有效的时间越短,但太小又会导致电流过大,所以,要权衡考虑,本设计选用4.7kΩ。 上述三点对脱机情况下PCI设备的互连具有较普遍的参考意义,除此之外,本设计还有以下比较特殊的几点: ●应将TM1300的PCI,INTA引脚配置为输入,以便接收Realtek8029的中断; ●PCI时钟由TM1300提供; ●Realtek8029的复位信号也就是TM1300的复位信号,该信号由外部电路提供; ●TM1300的PCI STOP、 PCI SERR引脚悬空,表示Realtek8029不具备相应的附加功能。另外,TM1300的PCI INTB、PCI INTC、PCI INTD引脚可以用作用户中断。

3 软件设计

该接口设计的软件结构框图如图3所示。其中TM1300运行于pSOS,它是一个简单的实时多任务嵌入式操作系统,带有pNA+网络组件,其pNA+相当于TCP/IP协议栈的扩展,它向上可提供应用程序编程的socket接口,向下可定义一个与网络接口层交互的接口,其中包括8个函数,分别是:ni_init(接口芯片初始化)、ni_broad-cast(发送广播分组)、ni_send(发送普通分组)、ni_getpkb(申请发送缓冲区)、ni_retpkb(归还接收缓冲区)、ni_ioctl(I/O控制操作)、ni_pool(统计量查询)、Announce(网络接口驱动调用它把接收到的数据包提交给pSOS)。其中网络接口层在本应用中就是Realtek8029的驱动程序,它通过硬件抽象层来驱动Realtek8029(硬件抽象层是PCI总线的配置读写和I/O读写指令集的总称)。 软件执行的流程大致是:系统首先启动pSOS,并由它加载网络接口驱动程序,然后调用驱动程序的ni_init函数,同时初始化Realtek8029的PCI配置空间并设置Realtek8029的工作参数,之后启动用户任务。在这里,用户任务为H.263编码进程。它对VI口读入的源图像进行压缩编码后,将调用socket的接口函数sendto(sendto是UDP套接口专用的发送函数),然后把码流发送给pSOS由pSOS根据UDP协议进行封装后,再调用ni_send函数,并由ni_send完成数据包从系统主内存到Realtek8029片上RAM的拷贝,然后启动Realtek8029发送数据。在接收情况下,Realtek8029收到一个完整的数据包后会用中断通知CPU,然后由CPU执行中断服务程序。当中断服务程序将数据包从Realtek8029片上RAM中拷贝到系统的主内存后,系统将调用Announce函数并把数据块的指针、数据长度和其它信息提交pSOS,最后由pSOS将数据包沿协议栈一层层上传并作出相应的处理。 软件的设计和pSOS操作系统的关系比较密切,限于篇幅,本文不对pSOS作详细介绍,。本文接下来重点介绍PCI配置空间的配置过程,这部分对于类似的设计有较普遍的参考意义。PCI配置空间有64个字节,PCI片内的这些寄存器存储了该芯片的厂商号、设备号、设备类型等重要代码,还包括命令寄存器、基地址寄存器等控制其总线行为的寄存器,它们必须在设备初始化时正确配置,否则设备不能工作。 对Realtek8029 PCI空间的配置需要三个步骤: 首先是扫描总线,这一步的目的是找到Real-tek8029的配置地址,直观地讲,就是找到它的PCI_IDSEL引脚和哪根AD线相连,因为后续的配置写要根据这个地址来寻址。扫描总线时,要对AD〔11〕到AD〔31〕每根线进行一次扫描,如果哪根AD线连接了一个PCI设备的PCI IDSEL引脚,那么用配置读函数读取PCI配置空间的0号寄存器时,应该返回该设备的设备和厂商代码,如果这根线实际未连接设备,则返回值是0。已知Realtek8029的设备和厂商代码是“0x802910ec”,如果返回值与之相同,说明找到了Realtek8029,这时要记下这根AD线的序号。例如,在硬件上把Realtek8029的PCI IDSEL和AD〔20〕相连,则扫描到的序号就应该是“20”。 其次,用配置写函数配置I/O读写使能,即在command寄存器中写入“0x1”。 最后,用配置写函数配置I/O地址,也就是在I/OBaseAdddress寄存器写入分配给该设备的I/O地址(例如“0xe400”)。具体程序流程图如图4所示。

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

网站地图

Top