EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在图像处理、瞬态信号测量等一些高速、高精度的应用中,需要进行高速数据采集。USB 2.0接口以其高速率等优点渐有取代传统ISA及PCI数据总线的趋势,热插拔特性也使其成为各种PC外设的首选接口。EZ-USB FX2是Cypress公司推出的集成USB 2.0的微处理器,它集成了USB 2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。本文将介绍基于EZ-USB FX2系列CY7C68013芯片的高速数据采集系统的设计,该系统具有限幅保护功能,固件和驱动程序的编写简便,能够完成对数据的高速采集和传送。 数据采集系统方案设计 数据采集系统的框图如图1所示,硬件电路如图2所示。其中,AD1674是l2位模数转换芯片,采用逐次比较方式工作。cpld主要用于控制ADC以及FIFO的时序、控制ADC的启动与停止和查询ADC的状态等。FIFO主要起着高速数据缓冲的作用。
CY7C68013和AD1674之间通过CPLD连接,实现相关控制线和数据线的译码。在CY7C68013的控制下,首先对AD1674进行间隔采样,然后把结果传送到FIFO中,当采集到一定量的数据后,CY7C68013将数据打包通过USB总线传到PC,由高级应用程序进行数据处理。扩展的RS232接口可以和外部设备进行通信。上电时,CY7C68013从外部的E2PROM中通过I2C总线自动装载到内部的RAM中,便于固件的修改和升级。 数据采集前端的调理电路如图3所示,本设计采用了限幅、降压、滤波和增加输入阻抗的措施来保护后端的转换芯片。 驱动程序和固件设计 USB设备驱动程序基于WDM。WDM型驱动程序是内核程序,与标准的Win32用户态程序不同,采用了分层处理的方法。通过它用户无须直接与硬件打交道,只需通过下层驱动程序提供的接口访问硬件。因此,USB设备驱动程序不必具体对硬件编程,所有的USB命令、读写操作通过总线驱动程序转给USB设备。但是,USB设备驱动程序必须定义与外部设备的通信接口和通信的数据格式,也必须定义与应用程序的接口。Cypress公司提供了完整的CY7C68013驱动程序源码、控制面板程序及固件的框架,这大大加快了用户开发的进度。用户只需稍加修改或无须任何修改即可使用现有驱动程序,软件开发者大量的时间主要集中在应用程序和固件的开发。根据用户自己的需求,一般只需修改DeviceIoControl例程。本设计主要增加了控制数据传输函数、启动和停止ADC、复位FIFO等。Cypress为CY7C68013提供了开发框架,其中两个程序如下。
" x- N: f7 u4 s) t7 s1 d) |
. N2 z/ J. ^" @; O& L FW.C:FW.C中包含了程序框架的MAIN函数,管理整个51内核的运行,因为这部分的功能已经进行了精心划分,一般是不用改动的。
! F2 x) [( T) `. u3 S" [ T5 ~: Z5 K1 y4 E图3 调理电路 PERIPH.C:用户必须将PERIPH.C实例化,它负责系统周边器件的互联。固件的设计主要针对这个文件,用户必须根据自己系统的需要,实例化这个文件,以实现所需的功能。在固件程序中,最重要的是TD_init()和TD_poll()这两个函数。以TD_poll()函数为例,在TD_poll()中主要完成外部FIFO状态的检测和数据的传输,程序主体部分如下。固件调试时,可以使用Cypress提供的EZ-USB control panel。$ {( x9 i" u9 h
Void TD_Poll(void)
& G- t3 [6 N9 W) m, _" Y{
: _' R& k4 \$ FIf(GPIFTRIG & 0x80) //判断GPIF是否空闲
' U1 @/ S$ O2 H8 x{
7 C3 w% Z- q8 |. U: y3 ]' VIf(EXTFIFONOTEMPTY ) //判断外部FIFO是否非空 ~, B5 ]: S6 Q4 K" c( Y# X
{
% Z; t) M7 q) {4 D3 nIf(!(EP24FIFOFLGS & 0x01)) //判断FIFO是否不满
& @& T& j* Q7 P1 T( e{* I) [1 Y. S) a) S7 M+ }
IF(enum_high_speed)# G* j1 c$ b% x) ]$ c
{/ N; h; W! K# v4 J8 `# R2 z; J
SYNCDELAY;1 `9 Q( j K0 \! c6 ^( Z
GPIFTCB1=0x02; //设置处理计数! T: S: g& T* c( A% t' {
SYNCDELAY;
- T5 B) ]! d" J- y2 {) AGPIFTCB0=0x00;6 b3 k2 V9 j) i+ c6 I7 a
SYNCDELAY;5 y: y" g+ F/ d1 U; g
}
7 \# J- Q3 j% o+ u, `$ V; NElse
6 x( ~4 B6 i7 p: f{
! r$ J7 u2 J2 |SYNCDELAY;: ]9 Y' M1 r5 v" _% h
GPIFTCB1=0x00;
+ o( j9 _7 B- d" m# I+ J0 E4 LSYNCDELAY;
0 b6 y' A/ W# YGPIFTCB0=0x20;
& a5 \; g, k& c3 o( b) _! I/ V/ KSYNCDELAY;
$ e9 I* S! t O0 \- t. C}; Q% E R! J' m9 l, l3 f; a
Setup_FLOWSTATE_Read();
" F8 \7 G9 r& C7 h5 D X0 CSYNCDELAY;7 U( l3 P) N6 X
GPIFTRIG=GPIFTRIGRD|GPIF_EP2;" c9 |3 [! J# ?( u: g
SYNCDELAY;- @1 _% r \: R8 Y
While(!(GPIFTRIG & 0x80))7 g# N" n9 I& E) U" ^: \
{;}
2 r1 N8 r6 E: {SYNCDELAY;0 ^# n; v j9 T; c9 n
}
0 e- S; C* b; Y& T, j) u6 P% L}! N- \1 u2 X9 W9 U6 }( |# L
}) z a5 T8 F; m' @# T
}
; v+ w9 W6 ?& {, E3 O0 z |