2 、硬件设计

2. 1供电方式

设计中采用了USB总线供电方式。USB接口从PC机能获取的电压为5V,而USB控制芯片CY7C68013的工作电压为3.3V,GPIB控制芯片TMS9914的工作电压为5V,所以本设计中选用了Maxim公司的MAX882进行电压变换。从PC经USB电缆到B端口来的5V电源,经去耦合和滤波电路后直接提供给系统中要求在5V正常工作的芯片,如TMS9914、75LS160、75LSl62等;而经MAX882分压后得到3.3V则提供给USB控制芯片CY7C68013以及LVC245。这样就可保证整个控制器正常工作。电路中的SN7524,是专门为USB接口电路设计的,抑制USB数据线的瞬时电气噪声,如图3所示。

2.2 外接EEPROM电路

系统上电后,USB内核首先检查I2C总线上是否有EEPROM。如果有,并且其第一位数据是0xC2,则EZUSB FX2将EEPROM中的内容全部拷贝到内部RAM中,然后重列举,并开始执行RAM中的固件程序。由于CY68013芯片已经将I2C总线集成,设计转化为对I2C总线上挂接的EEPROM的设计;由于采用的是24LC64的EEPROM,整个串行I2C总线电路实现的原理如图4所示。

3 、固件程序设计

本设计针对的主芯片CY7C68013是以软件为框架的IC。CY7C68013芯片的固件开发所使用的集成开发环境为KEIL μVision2,编程语言为德国Keil公司的C51。把编辑、编译、汇编、连接、调试等各阶段都集成在一个程序内,先用编辑器编写程序,接着调用编译器进行编译、连接后直接运行,因此可以缩短开发周期。

固件程序负责处理PC机发来的各种请求,主要负责设备与外围电路进行数据传输。完成一个完整的事务传输,除了开发环境Keil包括的文件,还需要Fw.c(固件架构原是程序代码)、Dscr.a51(USB描述符表)、Ezusb.lib(EZUSB函数库对象程序代码)、Periph.c(用户函数,也就是设计中实现GPIB功能要编写的函数)以及相关的中断跳转函数USBjmpTB.OBJ。功能函数里的TD_Poll()负责完成用户指定的功能,应该包括一个执行用户外围功能的状态机。从这个函数返回的话,高优先级的任务应该首先执行。

void TD_Poll(void)

if(!(EP2468STAT&bmEP2EMPTY)){

if(!(EP2468STAT&bmEP6FULL))//判断端点2的FIFO缓冲区是否满

{APTRlH=MSB(&EP2FIFOBUF);//自动指针1

APTRlL=LSB(&EP2FIFOBUF):

AUTOPTRH2=MSB(&EP6FIFOBUF);//自动指针2

AUTOPTRL2=LSB(&EP6FIFOBUF);

count=(EP2BCH《《8)+EP2BCL;