基于DSP 的USB数据传输系统设计_第1页
基于DSP 的USB数据传输系统设计_第2页
基于DSP 的USB数据传输系统设计_第3页
基于DSP 的USB数据传输系统设计_第4页
基于DSP 的USB数据传输系统设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于DSP 的USB数据传输系统设计摘要:数字信号处理器(DSP) 在高速运算上有着不可比拟的优势,但数字信号处理的数据量庞大,需要一种非常方便、快捷的接口实现与计算机的数据传输。在CT 图像重建系统设计中,提出一种基于DSP 和USB 的高速数据传输方案,该方案采用CYPRESS 的CY7C68001 作为USB 收发控制芯片,并使用TI 的高性能DSP 芯片TMS320C5416 作为微处理器控制芯片,利用两者的速度优势,通过C 语言编写通信程序,实现了DSP 与PC 机之间的高速数据传输,从而使得大量图像数据能够快速、实时的存储、处理。关键词:CT 图像重建;DSP ;USB ;数据传输

2、0 引言由于DSP 芯片的不断发展,以及它处理数据速度快、处理数据量大的优势,已经广泛应用到数字信号处理的许多领域。在CT 图像重建系统中,DSP 处理的数据需要上传到PC 机进行存储、显示或进行数据分析等,这就产生了PC 机和DSP 的数据传输问题。USB总线具有传输速度高,以及即插即用等特点,得到越来越广泛的应用,利用USB 总线实现DSP 和PC 机的通信,从而解决图像信号的实时传输问题。Cypress 公司生产的CY7C68001 通用USB 2. 0 接口控制器是基于应用层编程的接口器件,使用简单,开发方便。在此, 以TMS320C5416 为例, 讨论如何使用CY7C68001 对

3、TMS32OC5416 进行USB 接口设计,实现DSP 和PC 机通信,将DSP 处理过的图像信号实时传到计算机中。1 DSP 与USB接口的硬件设计TMS320C5416 是TI 的高性能32 位定点DSP ,内核采用超长指令字(VL IW) 体系结构,有8 个功能单元、64 个32 b 通用寄存器。一个时钟周期同时执行8 条指令,主频可达1 GHz ,处理性能高达8 000 MIPS ,支持8/ 16/ 32/ 64 b 的数据类型。CY7C68001 用来连接微处理器或DSP 的DMA 从装置,内部不含微处理器;支持高速(480 Mb/ s) 或全速(12 Mb/ s) USB 数据传

4、输;提供USB 2. 0 协议要求的全部4 种传输方式(控制传输、中断传输、批量传输和同步传输) ,可以满足用户对各种类型数据传输的需求。1. 1 接口的硬件设计在该设计方案中, CY7C68001 通过EMIFB 与TMS320C5416 进行异步通信,各个引脚的连接如图1所示。DSP 控制CY7C68001 完成DSP 与PC 之间的异步通信。CY7C68001 的相关引脚在接口中的作用:IN T :表明CY7C68001 有数据将要被读出,或者有中断事件发生; READY: 通知TMS320C5416 可以对CY7C68001 进行读写; FLA GA , FLA GB , FLA GC

5、 : 反应由FAIFOADR2 :0 选择的FIFO 的状态; FLA GD :为片选信号; SLOE 为CY7C68001 驱动数据总线;SL RD :并口读有效信号,在SL RD 有效且同步通信时,FIFO 指针在每个IFCL K的上升沿递增; PKTEND :总是高电平,将当前的缓冲区提交给USB ; FD 15 :0 :数据总线; FIFO 2 : 0 : 提供与TMS320C5416 接口的FIFO 地址选择。图1 TMS320C5416 与CY7C68001 接口1. 2 接口的访问CY7C68001 提供给DSP 两种软件接口:(1) 命令接口:用来访问CY7C68001 寄存器

6、、End2point0 缓冲器及描述表;(2) FIFO 数据接口:用来访问4 个1 KB 的FIFO中的数据。通过编程直接作为FIFO 分配给EP2 ,EP4 ,EP6 ,EP8 。这两个外部接口均可以通过同步或异步方式进行访问 。在此均采用异步的方式进行访问,命令口的命令字如下:在表1 中,A/ D 用于地址/ 数据的选择,当其为0时,表示本操作为数据读或写;当其为1 时,表示本操作为地址写。R/ W 用于读/ 写操作的选择,当其为0 时,进行写,当其为1 时,进行读。A 5 :0 用于地址/ 数据的选择,当Bit7 = 0时,D 3 :0 为数据半字节;D 5 :4 为未用,命令字为8

7、位,故命令字数据分二次读出或写入;当Bit7 = 1 时,D 5 :0 包含将要寻址的命令寄存器地址 。2 USB软件设计USB 的软件设计包括三方面 :固件设计、驱动程序设计和主机端应用程序设计。2. 1 固件设计所有基于微控制器及外围电路功能设备的正常工作都离不开固件的参与,固件的作用就是辅助硬件工作。没有固件的参与和控制,硬件设备无法实现预期的功能。USB 设备也不例外,必须编写固件程序来辅助硬件完成USB 的通信任务 。由于采用不带MCU 内核的USB 接口芯片,USB 的应用层协议应该通过对TMS320C5416 的编程来实现,USB 固件的加载必须靠DSP 的控制CY7C68001

8、 来完成。在CCS 中用C 语言完成固件程序的编写,程序流程图如图2 所示。根据程序流程图,固件设计思路如下:(1) 初始化工作。包括设置一些特殊功能寄存器的初值,以实现所需的设备属性或功能,例如:配置端口、使能端点、开中断。该设计中,使CY7C68001 工作于异步FIFO 模式,将4 KB 的FIFO 对应到两个端点( Endpoint) ,即Endpoint2 和Endpoint6 。(2) 辅助硬件完成设备的重新列举过程。包括模拟设备的断开与重新连接,对接收到的设置包进行分析判断,从而对主机的设备请求做出适当的响应,完成主机对设备的配置任务。(3) 对中断的处理。CY7C68001 有

9、6 个中断源,可以分别通过中断使能对寄存器的各位进行设置。一旦中断事件发生,CY7C68001 的IN T 引脚就被置低,并且置中断使能寄存器的相应位(即中断使能寄存器同时充当中断标志寄存器,中断使能寄存器具有读写属性) 。当中断发生时,中断标志寄存器的状态字映射到FD7 :0 ;中断发生后,DSP 对CY7C68001 简单的一次读操作即可获取中断信息,识别中断源并进行相应处理。相对于中断标志寄存器的读操作, 其他CY7C68001 寄存器的读操作通常要先发送一次请求,并且收到READY响应后,才可以读取数据。(4) 数据的接收与发送。在读数据时,应首先判断CY7C68001 的FIFO2

10、是否为空,如果不为空,才将数据读进来。在写数据时,还要判断要写的数据个数是否为512 B 的整倍数,如果不是,则使用PKTEND 信号来标识数据包的结束。EP2 和EP6 分别对应存放USB需要上传与接收的数据。其中, EP2 为OU T 型,负责从主机接收数据; EP6 为IN 型, 负责向主机发送数据 。EP2 和EP6 均采用批量(BUL K) 传输方式,这种传输方式具有数据可靠,传输速率高等特点,特别适合大批量数据传输。部分关键代码如下:DSP 读端点2 中的数据:if ( ( FifoStatus & SX2_EP2EF) ! = SX2_EP2EF)/ 确定FIFO2 是否

11、为空EP2Data = 3 (unsinged volatile 3 ) USB_FIFO2/ 将端点2 中的数读出DSP 向EP6 中写入数据:if ( ( FifoStatus & SX2_EP2EF) ! = SX2_EP2EF)/确定FIFO6 是否已满unsigned int i ;for (i = 0 ; i < length - 1 ; i + + )/ 先写入length - 1 个数据3 USB_FIFO6 = data i ;if (length %512)/若最后一个包不是512 B 的整数倍使用PKTEND 信号3 ( unsigned volatile

12、int 3 ) USB_ FIFO6 _ END = data num - 1 ;else3 (unsigned volatile int 3 ) USB_ FIFO6 = data num -1 ;2. 2 驱动程序在Windows 平台下,USB 驱动程序由三部分组成:USB 设备驱动程序、USB 总线驱动程序和USB 主控制器驱动程序。它们必须遵循Win32 驱动程序模(WDM) 。其中,Windows 操作系统已经提供了处于驱动程序栈底的USB 主控制器驱动程序和USB 总线驱动程序(USBD. SYS) 。USB 设备的驱动程序主要是通过调用USBD. SYS 来实现PC 机与USB

13、 总线的数据交换 。USB 驱动程序主要完成以下功能:(1) 发现、配置、关闭USB 设备。通过一系列有关即插即用( Plug and Play) 的派遣函数来完成。例如Ezusb _ PnPAddDevice ( ) , Ezusb _ DispatchPnp ( ) 等函数。(2) 驱动程序与应用函数的接口。像Ezusb _Creat () ,Ezusb_Close () 等函数。应用程序调用Ezusb_Create () 后,返回惟一的Windows 句柄后,才能调用驱动程序的其他函数,完成驱动程序对CY7C68001 的一系列操作和数据传送。应用程序通过调用API 函数CreateFi

14、le () 来实现对Ezusb_Create () 的访问。(3) 控制与数据传送接口。这是驱动程序的主要部分。它是Windows 的异步I/ O 操作。应用程序使用标准Win32API 函数Device IoCont rol ( ) 来执行这样的操作。在驱动一方,这个DeviceIoCont rol ( ) 调用被转化成一个带IRP_MJ _DEVICE_CON TROL 功能码的IRP。像读取与写入FIFO 数据、endpoint0 的操作均是通过异步I/ O 的方式来完成的。2. 3 主机应用程序USB 主机应用程序是计算机中完成特定功能的程序,其关键是实现从USB 外设读取或发送特定数

15、量的数据、USB 标准设备请求和特定的命令等。另外,可以对数据做进一步的处理,如:存储、显示、快速傅里叶变换等。主机应用程序的编写使用VC 编译环境中的API 函数实现。应用程序的编程方法与串口编程类似。首先必须查找设备,调用Win32 函数CreateFilea ( ) 打开设备的句柄; 然后调用Win32 函数DeviceloCont rol () 就可以进行数据读写和控制操作;最后关闭设备句柄 。在VC+ + 6. 0 中用C+ + 编写简单的上位机测试程序,得到测试结果如图3 所示。图3 数据传输测试结果3 USB 软件的实现算法#include <stdio.h>#inc

16、lude "epphal.h"#include "d12ci.h"#include "mainloop.h"#include "usb100.h"#include "chap_9.h"#include "protodma.h"/*/ USB protocol function pointer arrays/*code void (*StandardDeviceRequest)(void) =get_status,clear_feature,reserved,set_featu

17、re,reserved,set_address,get_descriptor,reserved,get_configuration,set_configuration,get_interface,set_interface,reserved,reserved,reserved,reserved;code void (*VendorDeviceRequest)(void) =reserved,reserved,reserved,reserved,reserved,reserved,reserved,reserved,reserved,reserved,reserved,reserved,read

18、_write_register,reserved,reserved,reserved;/*/ Public static data/*extern EPPFLAGS bEPPflags;extern unsigned long ClockTicks;extern unsigned char idata GenEpBuf;extern IO_REQUEST idata ioRequest;CONTROL_XFER ControlData;code char * _NAME_USB_REQUEST_DIRECTION ="Host_to_device","Device

19、_to_host"code char * _NAME_USB_REQUEST_RECIPIENT ="Device","Interface","Endpoint(0)","Other"code char * _NAME_USB_REQUEST_TYPE ="Standard","Class","Vendor","Reserved"code char * _NAME_USB_STANDARD_REQUEST ="GET

20、_STATUS","CLEAR_FEATURE","RESERVED","SET_FEATURE","RESERVED","SET_ADDRESS","GET_DESCRIPTOR","SET_DESCRIPTOR","GET_CONFIGURATION","SET_CONFIGURATION","GET_INTERFACE","SET_INTERFACE",&quo

21、t;SYNC_FRAME"void help_devreq(unsigned char typ, unsigned char req)typ >>= 5;if(typ = USB_STANDARD_REQUEST) printf("Request Type = %s, Request = %s.n", _NAME_USB_REQUEST_TYPEtyp,_NAME_USB_STANDARD_REQUESTreq);else printf("Request Type = %s, bRequest = 0x%x.n", _NAME_US

22、B_REQUEST_TYPEtyp,req);extern unsigned long ClockIsr;unsigned char far *privateBuffer;unsigned long dmaBuffer;unsigned long ioBuffer; / V2.1unsigned short ioSize, ioCount; / V2.1void init_timer0(void)/* Interrupt Control Unit */* * Enabled interrupts in Interrupt Enable Register * * GLOBAL INTERRUPT

23、 MUST BE ENABLED FOR ANY OTHER * INTERRUPT TO WORK!*/* GLOBAL INTERRUPT DISABLED ALL INTERRUPTSARE DISABLED */* External interrupt 0 */* Priority Level = 0 */* Timer 0 interrupt */* Priority Level = 0 */void init_special_interrupts(void)ioport unsigned int port3002;void init_port() port3002=0xff; /*

24、Serial Port */*Mode = 1 /8-bit UART Serial Port Interrupt = Disabled */*Receive = Enabled */*Auto Addressing = Disabled */void init_serial(void)void on_exit(void) disconnect_USB();void main(void)BOOL in_loop = TRUE;init_port();init_serial();init_timer0();init_special_interrupts();printf("nPDIUS

25、BD12 evaluation board firmware V2.2.n");printf("Copyright (c) Philips Semiconductors, 1998.n");printf("Re-connect PDIUSBD12 evaluation board to USB.n");reconnect_USB();/* Main program loop */while( in_loop ) fn_usb_isr();DISABLE;ENABLE;printf("Bus reset!n"); / if b

26、us resetDISABLE;ENABLE;suspend_change();printf("Suspend change!n"); / if suspend changeDISABLE;ENABLE;control_handler(); / if setup_packetDISABLE;ENABLE;setup_dma(); / if setup_dma / Main Loopon_exit();void suspend_change(void)void stall_ep0(void)D12_SetEndpointStatus(0, 1);D12_SetEndpoint

27、Status(1, 1);void disconnect_USB(void)/ Initialize D12 configurationD12_SetMode(D12_NOLAZYCLOCK|D12_CLOCKRUNNING, D12_SETTOONE | D12_CLOCK_12M);void connect_USB(void)/ reset event flagsDISABLE;bEPPflags.value = 0;ENABLE;/ V2.1 enable normal+sof interruptD12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTEN

28、ABLE);/ Initialize D12 configurationD12_SetMode(D12_NOLAZYCLOCK|D12_CLOCKRUNNING|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);void reconnect_USB(void)unsigned long clk_cnt;disconnect_USB();printf("Wait for 1 second .n"); for(clk_cnt=0;clk_cnt<0x100;clk_cnt+);connect_USB();void init_un

29、config(void)/unsigned char i;D12_SetEndpointEnable(0);/* Disable all endpoints but EPP0. */void init_config(void)D12_SetEndpointEnable(1);/* Enable generic/iso endpoints. */void single_transmit(unsigned char * buf, unsigned char len)if( len <= EP0_PACKET_SIZE) D12_WriteEndpoint(1, buf, len);void

30、code_transmit(unsigned char code * pRomData, unsigned short len)ControlData.wCount = 0;if(ControlData.wLength > len)ControlData.wLength = len;ControlData.pData = pRomData;if( ControlData.wLength >= EP0_PACKET_SIZE) D12_WriteEndpoint(1, ControlData.pData, EP0_PACKET_SIZE);ControlData.wCount +=

31、EP0_PACKET_SIZE;DISABLE;ENABLE;else D12_WriteEndpoint(1, pRomData, ControlData.wLength);ControlData.wCount += ControlData.wLength;DISABLE;ENABLE;void setup_dma()if(!(ioRequest.bCommand & 0x80) D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE);setup_io();return;/dma_start(&ioRequest);DISABL

32、E;ENABLE;single_transmit(0, 0);if(ioRequest.bCommand & 0x1)D12_SetDMA(D12_BURST_16 | D12_DMAENABLE | D12_DMA_INTOKEN);elseD12_SetDMA(D12_BURST_16 | D12_DMAENABLE);/ setup_io() setup buffer address for I/O mode Main endpoints transfer,/ it only works on PC evaluation kit.void setup_io()unsigned l

33、ong offset;/unsigned char far *fp;/unsigned short seg, off;offset = (unsigned long)ioRequest.bAddressH)<<16)+ ioRequest.uAddressL;ioBuffer = dmaBuffer + offset;ioSize = ioRequest.uSize;ioCount = 0;/seg = (ioBuffer + ioCount)>>4;/off = (ioBuffer + ioCount)&0xf;/fp = MK_FP(seg, off);DISABLE;ENABLE;single_transmit(0, 0);if(ioRequest.bCommand & 0x1) if(ioSize > 64) /D12_WriteEndpoint(5, fp, 64);ioCount += 64;else /D12

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论