微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > 基于Spartan-6的高速数据采集、处理和实时传输研究

基于Spartan-6的高速数据采集、处理和实时传输研究

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

  3.2.4 AD6620工作模式寄存器编程

  对频率变换单元、固定系数的CIC2和CIC5以及RCF滤波器变化进行编程设置后,要使AD6620正常工作还需要对其工作方式和相关寄存器进行配置。AD6620的工作方式主要由地址0x300H的寄存器中低四位决定,其中,bit0=1时系统处于软复位状态,bit0=0则处于正常状态;bit1=1时系统处于双通道实数输入模式;bit2=1时系统处于单通道复数输入模式;如果bit0~bit2都是0,那么系统处于单通道实数输入模式;bit3=1/0为时钟主从工作模式。因此,当各寄存器配置完成后需要将寄存器bit0拉低,也即置为0状态使其脱离软复位状态,进入正常工作模式。另外,在本文中AD6620读写内部寄存器是采用的异步读写时序,数据输出是并行16位输出模式。  总的来说,采用FPGA实现AD6620初始化的过程如下:

  1)首先判断AD6620有没有经过硬件复位,如果没有经过硬件复位而又要实现系统复位,那么可以通过程序去编程地址0x300H的寄存器的bit0位置为1,使得AD6620处于软件复位状态,这样就可以对非动态的寄存器进行相关编程;

  2)对NCO单元、CIC2、CIC5滤波器的抽取倍数和系数进行编程,将相应的控制系数写入相对应的地址寄存器中;

  3)对RCF滤波器系数进行编程,分别向地址0x000H~0xFF中写入这150个抽头系数,剩下的写入0。

  4)对AD6620所有配置工作完成后,必须向地址0x300H的bit0写入0,使其脱离软复位状态,这样AD6620才可以在所配置工作方式下对输入的数据进行处理。  

  4.实时数据传输模块

  基于USB2.0的数据传输设计主要包括以下几个部分:(1)基于EZ-USB FX2的硬件电路设计(2)EZ-USB FX2系列器件CY7C68013A的固件程序(设置CY7C68013A工作模式、传输方式等,需要对其内部寄存器进行相关配置),主要通过Keil C51软件进行开发。

  4.1 实时数据传输部分的硬件设计

  实时数据传输部分(USB2.0的数据传输)的硬件设计方案如图10所示,USB模块与FPGA间的连线如图11所示。

  在高速数据传输部分采用了Cypress公司的EZ-USB FX2 CY7C68013A芯片,采用单片USB 2.0外设可以避免用FPGA直接实现USB通信协议时可靠性低的问题。在数据采集、传输以及测试过程中,CY7C68013A作为从机,负责将FPGA发送给它的基带数据,利用其16位SLAVE FIFO(关于SLAVE FIFO的传输示意图如图所示)将数据缓冲发送给上位机。在SLAVE FIFO数据传输中,上位机应用程序、固件程序和FPGA程序都非常关键,要配合好才能完成数据的高速数据传输。在这个系统中,FPGA起着主控制器作用,CY7C68013A则相当于一个从设备。具体的工作流程是:FPGA把接收过来的16位数字基带信号发送给CY7C68013A,CY7C68013A以SLAVE FIFO的方式将这些数据缓冲,并以批量数据传输的方式发送给上位机,上位机接收到这些数据后加以存储和显示。

  4.2 CY7C68013A的固件程序设计

  固件程序是指运行在设备CPU中的程序,只有在该程序运行时,外设才能称之为具有给定功能的外部设备。固件程序负责初始化单元,重新设置设备。主要包括设备描述符信息、设备功能代码。设备描述信息描述USB设备的一半特性和配置,如设备类别、接口配置、VID和PID等。主机在设备列举时要获取USB设备的描述符,从而获得设备的配置信息和相关驱动信息。用户可以通过修改固件中的描述符来改变设备的特性。设备功能代码有设备的功能需求决定。通信控制功能代码执行主机请求分析处理和数据交换处理功能。

  采用ARM公司的Keil C51 uVision4.02开发CY7C68013A的固件程序。为了简化固件编程,CYPRESS提供了固件编程框架,在此基础上添加我们所需要的配置代码即可完成软件编程。  

  复位上电时,固件先初始化一些全局变量,然后调用初始化函数ID_Init(),初始化设备一直到没有配置的状态和打开中断,循环1s后枚举,直到端点0接收到SETUP包退出循环,进入循环语句while,执行任务函数,函数包括:

  (a)TD_POLL()用户任务调度函数;

  (b)如果发现USB设备请求,则执行对应的USB请求;

  (c)如果发现USB空闲置位,则调用TD_Suspend()这个挂起函数,调用成功后则内核挂起,直到出现USB远程唤醒信号,调用TD_Resume(),内核唤醒后重新进入while循环。

  固件框架程序需要以下几个文件:

  (1)FX2.h:库函数申明,以及变量、宏定义、数据类型定义;

  (2)Fxregs.h:FX2LP寄存器头文件;

  (3)Fw.c:固件框架源文件;

  (4)Periph.c:用户调度函数、用户可以修改,在不同的应用中文件名不一样;

  (5)Dscr.a51:USB描述符列表,用户可以修改;

  (6)Ezusb.lib:EZUSB库文件;

  (7)USBJmpTb.OBJ:中断跳转函数目标文件

这种情况下,需要在固件程序中,进行相应的修改。在SLAVE FI

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

网站地图

Top