首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   基于USB2.0总线的高速数据采集系统设计      ★★★ 【字体: 】  
基于USB2.0总线的高速数据采集系统设计
收集整理:佚名    来源:本站整理  时间:2009-01-10 22:34:42   点击数:[]    

道开始进行数据采集并向FIFO写数据。

系统前端的调理电路采用的是AD公司的AD8138,该放大器具有较宽的模拟带宽(320MHz,-3dB,增益1),而且可以实现将单端输入变成差分输出的功能。此项功能在现代高速模数变换电路中非常有用,因为几乎所有的高速A/D芯片都要求模拟信号为差分输入,虽然部分芯片的手册中提到对于单端输入信号也可使用,但这样一来会使A/D转换结果的二次谐波增大,降低信噪比(SNR)。AD8138很好的解决了这个问题,用户可以很容易的将单端信号转换成差分输出而不必使用变压器,并且它的输入阻抗高达6MΩ,可以直接与输入信号相连而省略隔离放大器,大大精简了电路结构。图4为AD8138的典型应用电路。

图4  AD8138典型应用电路

3    软件设计
3.1 Windows驱动程序设计
USB设备驱动程序基于WDM。WDM型驱动程序是内核程序,与标准的Win32用户态程序不同。采用了分层处理的方法。通过它,用户不需要直接与硬件打它道(在USB驱动程序中尤为明显),只需通过下层驱动程序提供的接口号访问硬件。因此,USB设备驱动程序不必具体对硬件编程,所有的USB命令、读写操作通过总线驱动程序转给USB设备。但是,USB设备驱动程序必须定义与外部设备的通讯接口和通讯的数据格式,也必须定义与应用程序的接口。
Cypress公司提供了完整的CY7C68013驱动程序源码、控制面板程序及固件的框架,这大大提高了用户开发的进度。用户只需稍加修改或不需任何修改即可使用所带驱动程序,软件开发者大量的时间主要集中在应用程序和固件的开发。本文所述的数据采集系统驱动程序就在原来的基础上进行了简单的修改来满足我们的需要。根据我们自己的需求,一般只需修改DeviceIoControl例程,如我们主要增加了控制数据传输函数、启动和停止AD、复位FIFO等,即IOCTL_START_AD、IOCTL_STOP_AD、IOCTL_RESET_FIFO。

3.2 底层固件设计
要实现USB2.0的高带宽数据传输,必须使用它特有的GPIF特性,在开发固件前,首先必须根据实际需要对GPIF waveform进行编辑。CY7C68013开发工具中带有一个GPIF Designer,如图5所示,编辑完waveform后,选择Tools->Export to GPIF.c File来输出GPIF.c文件,然后将该文件加入keil c工程进行编译。
由于CY7C68013的EP2、EP4、EP6、EP8四个端点共享4K FIFO缓冲区,所以在该系统中,我们将EP2配置成4K的缓冲区,并设置为IN。用EP1OUT作为AD的控制参数传递,如启动和停止AD数据输出、复位FIFO等。在固件程序中,最重要的就是TD_Init()和TD_Poll()两个函数。

图5 GPIF Designer

在TD_Init()中主要完成GPIF相应寄存器的初始化,如下:
void TD_Init(void)             // Called once at startup
{
// set the CPU clock to 48MHz
  CPUCS = ((CPUCS & ~bmCLKSPD)  bmCLKSPD1);
  SYNCDELAY; 

  EP2CFG = 0XE8;     // EP2IN, bulk, size 1024, 4x buffered
  SYNCDELAY;                         
  EP4CFG = 0x00;     // EP4 not valid
  SYNCDELAY;              
  EP6CFG = 0x00;     // EP6 not valid     
  SYNCDELAY;
  EP8CFG = 0x00;     // EP8 not valid
  SYNCDELAY;
  
  
  FIFORESET = 0x80;  // set NAKALL bit to NAK all transfers from host
  SYNCDELAY;
  FIFORESET = 0x02;  // reset EP2 FIFO
  SYNCDELAY;
  FIFORESET = 0x00;  // clear NAKALL bit to resume normal operation
  SYNCDELAY;

  EP2FIFOCFG = 0x01; // allow core to see zero to one transition of auto out bit
  SYNCDELAY;
  EP2FIFOCFG = 0x11; // auto out mode, disable PKTEND zero length send, word ops
  SYNCDELAY;
  EP6FIFOCFG = 0x09; // auto in mode, disable PKTEND zero length send, word ops
  SYNCDELAY; 
  
  GpifInit (); // initialize GPIF registers
  
  SYNCDELAY;
  EP2GPIFFLGSEL = 0x02; // For EP2IN, GPIF uses FF flag
  SYNCDELAY;
  
  // global flowstate register initializations

FLOWLOGIC = FlowStates[19];      // 0011 0110b - LFUNC[1:0] = 00 (A AND B), //TERMA/B[2:0]=110 (FIFO Flag)
  SYNCDELAY;
  FLOWSTB = FlowStates[23];        // 0000 0100b - MSTB[2:0] = 100 (CTL4), not //used as strobe
  SYNCDELAY;
  GPIFHOLDAMOUNT = FlowStates[26]; // hold data for one half clock (10ns) assuming //48MHz IFCLK
  SYNCDELAY;
  FLOWSTBEDGE = FlowStates[24];    // move data on both edges of clock
  SYNCDELAY;
  FLOWSTBHPERIOD = FlowStates[25]; // 20.83ns half period
  SYNCDELAY;  

  // reset the external FIFO
  OEA = 0x07;     // turn on PA0、 PA1、 PA2 as output pin
  IOA = 0x07;     // pull PA0、 PA1、 PA2 high initially
  IOA &= 0xFB;     // bring PA2 low
  EZUSB_Delay (1); // keep PA2 low for ~1ms, more than enough time
  IOA = 0x04;     // bring PA2 high and exit reset
IOA &= 0xFC;     // bring PA0、 PA1 low and enable AD
  
}
在TD_Poll()中主要完成外部FIFO状态的检测和数据的传输,主要程序部分如下:
void TD_Poll(void)
{
    if ( GPIFTRIG & 0x80 )                  // if GPIF interface IDLE
    { 
      if ( EXTFIFONOTEMPTY )                // if external FIFO is not empty
      {
        if ( !( EP24FIFOFLGS & 0x01 ) )     // if EP2 FIFO is not full
        {      
          if(enum_high_speed)
          {
            SYNCDELAY;    
            GPIFTCB1 = 0x02;                // setup transaction count (1024 //bytes/2 for word wide -> 0x0100)
            SYNCDELAY;
            GPIFTCB0 = 0x00;
            SYNCDELAY;
          }
          else
          {
            SYNCDELAY;
            GPIFTCB1 = 0x00;                // setup transa

上一页  [1] [2] [3]  下一页


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:用NCP1200代换脉宽调制控制UC3842的应用电路

  • 下一篇文章:存储器类型综述及DDR接口设计的实现
  • 返回上一页】【打 印】【关闭窗口
    中查找“基于USB2.0总线的高速数据采集系统设计”更多相关内容 5VAR论文频道
    中查找“基于USB2.0总线的高速数据采集系统设计”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››基于USB2.0的高速同步数据采集系统...
  • ››基于USB2.0的同步高速数据采集器的...
  • ››基于USB接口的心电信号数据采集系统...
  • ››基于USB总线的实时数据采集系统设计...
  • ››基于USB2.0的MPEG视频卡的设计与实...
  • ››基于USB总线的高速数据采集系统
  • ››基于USB2.0的高速无线数传接收设备...
  • ››基于USB的CAN总线适配器设计
  • ››基于USB与DSP的指纹识别系统的设计...
  • ››基于USB总线的机器人上下位机通信
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .