基于Spartan-6的高速数据采集、处理和实时传输研究
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
Spartan-6高速数 相关文章:
- 电源设计小贴士 1:为您的电源选择正确的工作频率(12-25)
- 用于电压或电流调节的新调节器架构(07-19)
- 超低静态电流电源管理IC延长便携应用工作时间(04-14)
- 电源设计小贴士 2:驾驭噪声电源(01-01)
- 负载点降压稳压器及其稳定性检查方法(07-19)
- 电源设计小贴士 3:阻尼输入滤波器(第一部分)(01-16)