新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > CY7C68001与TMS320VC5416的接口设计

CY7C68001与TMS320VC5416的接口设计

——
作者:时间:2007-01-26来源:《现代电子技术》收藏

近年来,随着数字信号技术的发展,需要处理的数据量越来越大,处理的速度也越来越快,因此具有高速性能dsp芯片的应用得到了广泛重视。而通过dsp处理的数据往往要传输给pc机进行存储和再处理,那么就必须研究dsp与pc机之间的高速通信问题,所以今年发展起来的usb 2.0技术及其高速易扩展等特点得到越来越广泛的应用,本文就是使用usb 2.0芯片cy7c68001和dsp芯片tms320vc5416来实现dsp与pc机通信的。

1 cy7c68001芯片特点描述

cy7c68001是用来连接微处理器或dsp的dma从装置,其内部不含微处理器;集成有usb2.0收发器(物理层)、usb2.0串行接口引擎sie(链路层、实现底层通信协议)、4kb的fifo和电压调节器、锁相环;支持高速(480mb/s)或全速(12mb/s)传输;3.3v操作电压,24mhz外部振荡频率;可以选择8位或16位总线方式;具有同步与异步的fifo接口;他可以向用户提供足够的端口,缓冲区和传输速度,提供usb2.0协议要求的全部4种传输方式(控制传输、中断传输、批量传输和同步传输),可以满足用户对各种类型数据传输的需求。片上的串行接口处理器(sie)能完成大部分的usb协议操作,使用户可以摆脱复杂的协议细节,简化了用户配置代码,加快了程序开发过程。但是由于采用的是不带mcu内核的usb接口芯片,usb的应用层协议应该由tms320vc5416编程实现,usb固件的加载必须靠dsp控制cy7c68001完成。

2 cy7c68001芯片寄存器

2.1 cy7c68001配置寄存器

usb的配置寄存器主要有ifconfig,flagsab,flagscd,polar,revid。ifconfig配置usb的接口方式;flagsab与flagscd确定flagx所代表的状态;polar确定fifo接口信号的极性;revid读版本号。

2.2 endpoint配置寄存器

配置usb四个节点,主要有epxcfg,epxpktlenh与epxpktlenl,epxpeh与epxpel,epxisoinpkts几类寄存器(x的值为2,4,6,8):epxcfg配置每一个endpoint的类型;epxpktlenh与epxpktlen设置每个节点包的大小;epxpfh与epxpfl确定每个节点的可编程的标志位;epxisoinpkts确定等时同步传输时,每一帧的数据包个数。

2.3 状态寄存器

状态寄存器有ep24flags与ep68flags;ep24flags确定节点2与4的fifo的状态;ep68flags确定节点6与8的fifo的状态。

2.4 usb帧状态寄存器

usb总线配置寄存器主要有usbframeh、usbframel、microframe、fnaddr来确定usb每一帧的状态,usbframeeh/l寄存器确定每一帧的数据长度;microframe寄存器确定每一个微帧的数据个数;fnaddr寄存器保存自举时的7位地址。

2.5 节点0(endpoint0)操作寄存器

节点0(endpoint0)操作寄存器主要包括fp0buf,setup,ep0bc三个寄存器:ep0buf寄存器是节点0的缓冲寄存器,通过他可以完成对节点0数据的访问;setup寄存器从计算机接收set-up数据包;ep0bc,节点0中的数据的个数。

2.6 其他寄存器

inpktend/flush寄存器强制数据包结束或清空fifo;interrupts寄存器为中断使能寄存器;desc寄存器可以完成对描述表的操作。

3 tms320vc5416与cy7c68001的硬件接口

本设计将cy7c68001配置在tms320vc5416的i/o空间,采用cy7c68001的并行异步读写方式完成二者之间数据和命令的交换。其原理框图如图1所示。

本文引用地址:http://www.eepw.com.cn/article/21014.htm

cy7c68001除了存储器接口外,还有1个中断信号usbint反和4个状态信号(ready,flaga,flagb和flagc),中断信号usbint反,扩展总线的xint2反,操作复用tms320vc5416的外部中断int2反被配置在系统状态寄存(sysstat1)中,可由tms320vc5416查询,以确定真正的中断源,状态信号ready,flaga,flagb和flagc配置在本系统状态寄存器0(sysstat0)中,可由tms320vc5416查询,由于采用了cpld,增强了系统的灵活性和可扩充性。在实际操作中,由于通信速度达到了480mb/s,所以采用4层板设计,而且对电源要进行很好的退耦处理,对dsp所需的16mhz有源晶振和cy7c68001用到的24mhz有源晶振要进行铺铜处理。

4 tms320vc5416对cy7c68001的操作

cy7c68001有2个外部接口:

(1)命令接口:用来访问cy7c68001寄存器、endpoint0缓冲器及描述表;
(2)fifo数据接口:用来访问4个1kb的fifo中的数据。
这两个外部接口均可以通过同步或异步的方式进行访问。在本系统中均采用异步的方式进行访问的,命令口的命令字:


ad:地址/数据选择,为0时表示本操作为数据读或写,为1时表示本操作为地址写;
r/w:读/写操作选择,为0时进行写,为1时进行读;
d[5:0]:地址/数据,当ad=0时,d[3:0]为数据半字节,d[5:4]未用,命令字为8位,故命令字数据分二次读出或写入;当ad=1时,d[5:0]包含将要寻址的命令寄存器的地址。

4.1 命令口的读/写操作

系统中cy7c68001作为tms320vc5416的外设,占用tms320vc5416的i/o空间,地质为0x0007-0x0000。地址分配如下:fifo2,fifo4,fifo6,fifo8和命令口的地址分别为000,001,010,011,100,而地址101,110,111则保留。cy7c68001的地址线fifoadr[2:0]为100b时,选中cy7c68001的命令口。通过cy7c68001的命令口,可以访问37个寄存器、endpoint0缓冲器(64个字节fifo)和描述表(500个字节fifo)等,如果将endpoint0缓冲器和描述表也看成是寄存器,那么单个命令口下内含了众多的寄存器,对这些寄存器进行读/写访问采用二次寻址方式,即首先通过命令口将要寻址寄存器子地址和操作类型(读操作还是写操作)写入,然后再通过命令口将数据读出或写入相应的寄存器,写入命令口的内容称为命令字,命令字包含要寻址的寄存器的子地址,或是要写入寄存器数据的高位4位或低4位,读命令口必须在给命令口写入命令字之后,所读出的为相应寄存器的8位数据。在这里,对寄存器的操作均以8位数据宽度进行。

4.1.1 tms320vc5416对cy7c68001寄存器的写操作过程

(1)将tms320vc5416对i/o空间访问的等待周期设为7;
(2)通过检查系统状态寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready线变高;

(3)寻址cy7c68001命令口(最低3位地址必须为100b),将10xx,xxxxb写命令字写入命令寄存器(xx,xxxxb代表需寻址的寄存器的子地址);
(4)通过检查系统状态寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready线变高;
(5)寻址cy7c68001命令口(最低3位地址必须为100b),将0xxx,d7d6d5d4b数据高4位命令字写入命令寄存器(d7d6d5d4b代表要写入的数据的高4位);
(6)通过检查系统状态寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready线变高;
(7)寻址cy7c68001命令(最低3位地址必须为100b),将0xxx,d3d2d1d0b数据低4位命令字写入命令寄存器(d3d2d1d0b代表要写入的数据的低4位)。

4.1.2 tms320vc5416对cy7c68001寄存器的读操作过程

(1)tms320vc5416对i/o空间访问的等待周期设为7;
(2)通过检查系统状态寄存器0(sysstat0)位2(usbrdy)等待cy7c68001的ready线变高;
(3)寻址cy7c68001命令口(最低3位地址必须为100b),将11xx,xxxxb读命令字写入命令寄存器(xx,xxxxb代表需寻址的寄存器的子地址);
(4)等cy7c68001申请tms320vc5416的外部中断xint2反;
(5)寻址cy7c68001命令口(最低3位地址必须为100b),读cy7c68001命令口。
4.2 fifo数据接口的操作

对数据接口的写操作用到了sx2_fifowritesingle()函数,负责向usb的数据缓冲区中写数据,由于这个写程序是在主频为160mhz时的设置,为了满足数据保持时间最小为10ns,需要清空流水线,加入3个空操作nop,i/o系统的等待周期为2个;对数据接口读操作用到了函数sx2_fiforeadsingle(),例如从端口4读一个字节
popm ah popm al pshm al pshm ah sub#1,a bc fifo_r3rd,aneq portr usbfifo4,*ar0 popm ah popm al b fiforeadexit
另外,程序中用到了中断函数int2_isr(),在读周期,主机申请读寄存器的值,此时产生中断,从sx2读进数据;

5 usb的编程

5.1 usb的初始化

cy7c68001有e2prom自举和通过dsp自举2种自举方式,在本系统中这两种方式均可以,一般采用e2prom来进行usb的初始化,在e2prom中初始化的顺序如下:
0xc4通知ez_usb sx2有一个有效的e2prom存在;
ifconfig 设置ifconfig寄存器,其函数为write_sx2reg();
polar设置各个信号的极性,其中slow,slrd,slwr只能由e2prom来配置;
descriptor 是否从e2prom中装入初始化表。当值为0xc4时装入,反之等待master装入;
descriptor length 这是两个字节的空间,指示e2prom中descriptor的长度;
descriptor data 描述表的内容,其函数为load_descriptors()。
usb的编程主要分为2个部分,一是host方面驱动程序的编写,一是有关dsp与usb数据与命令的交换,

5.2 host端程序

host端需要编写usb设备驱动程序和应用程序。

usb设备驱动程序主要是通过调用微软的usbd.sys来实现pc机与usb总线的数据交换。因而usb设备驱动程序主要完成的功能如下:

(1)对相应的usb设备建立设备驱动对象并完成对usb设备的初始化;
(2)完成usb设备的即插即用功能;
(3)完成usb设备电源的管理;
(4)实现对usbd.sys的调用,完成对usb设备的控制与数据的交换;
(5)实现对usb通讯措施的处理。

usb设备应用程序主要用到以下几个函数:

opendriver()打开驱动程序;
closedriver()关闭驱动程序;
sx2getdevicedesc()获取描述表;
sx2getconfigdesc()获取配置说明;
sx2getpipeinfo()获取接口信息;
sx2sendvendorreq()向usb发送请求;
sx2bulkdatatrans()在pc和usb间传递数据。

5.3 tms320vc5416端程序

tms320vc5416是通过其i/o口来完成cy7c68001的数据交换的,在这部分程序中主要完成以下功能:

(1)完成对命令接口的读与写;
(2)完成对fifo接口的读与写;
(3)完成tms320vc5416对usb的自举;
(4)完成tms320vc5416与usb的控制命令的传输;
(5)完成tms320vc5416与usb的各种方式的数据传输。

6 结语

本文以tms320vc5416为核心,利用cy7c68001实现了usb2.0设备接口协议,试验证明该系统可以满足高速信号处理的要求,并具有速度快和可靠性高等优点。




关键词:

评论


相关推荐

技术专区

关闭