今天看一下固件程序,最好与上一篇的操作对应起来。
CYPRESS公司提供了固件程序框架(可以查看我以前的贴子),用这个模板来开发USB应用还是简单、快捷的。具体的固件程序前一个帖子有下载,你可以打开看一看。首先看初始化函数TD_Init(void),
void TD_Init(void) // Called once at startup
{
int i,j;
// set the CPU clock to 48MHz
CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;
SYNCDELAY;
// set the slave FIFO interface to 48MHz
IFCONFIG |= 0x40;
SYNCDELAY;
// Default interface uses endpoint 2, zero the valid bit on all others
// Just using endpoint 2, zero the valid bit on all others
EP1OUTCFG = (EP1OUTCFG & 0x7F);
SYNCDELAY;
EP1INCFG = (EP1INCFG & 0x7F);
SYNCDELAY;
EP4CFG = (EP4CFG & 0x7F);
SYNCDELAY;
EP6CFG = (EP6CFG & 0x7F);
SYNCDELAY;
EP8CFG = (EP8CFG & 0x7F);
SYNCDELAY;
EP2CFG = 0xE0; // EP2 is DIR=IN, TYPE=BULK, SIZE=512, BUF=4x
// We want to get SOF interrupts
USBIE |= bmSOF;
mycount = 0;
// Prepare data
for (i=1;i<5;i++)
{
EP2FIFOBUF[0] = LSB(mycount);
EP2FIFOBUF[1] = MSB(mycount);
EP2FIFOBUF[2] = USBFRAMEL;
EP2FIFOBUF[3] = USBFRAMEH;
EP2FIFOBUF[4] = MICROFRAME;
for (j=5;j<1024;j++)
{
EP2FIFOBUF[j] = i;
}
EP2BCH = 0x02;
EP2BCL = 0x00;
}
Rwuen = TRUE; // Enable remote-wakeup
}
程序中的注释很清楚了,相信你能够看懂。这里主要对大端点EP2进行一下说明,EP2CFG = 0xE0,含义是:DIR=IN, TYPE=BULK, SIZE=512, BUF=4倍缓冲,端点EP2是包含在接口0中的唯一一个端点,其它接口中可能有两个端点,具体的要看那个汇编语言的文件了。还需要说明一下USB协议是这样规定的:设备—>配置—>接口—>端点。初始化程序接下来是USBIE |= bmSOF,使能帧开始中断。再接下来是对点EP2的数据缓冲区EP2FIFOBUF填冲数据,是一个for循环。
Mycount变量初始化为0,这个变量用来记录调用函数TD_Poll()的次数。
再看一下另一个函数TD_Poll(void),代码结构如下,
void TD_Poll(void) // Called repeatedly while the device is idle
{
// ...FX2 in high speed mode
if( EZUSB_HIGHSPEED( ) )
{
// Perform USB activity based upon the Alt. Interface selected
switch (AlternateSetting)
{
case Alt0_BulkIN:
// Send data on EP2
while(!(EP2468STAT & bmEP2FULL))
{
EP2FIFOBUF[0] = LSB(mycount);
EP2FIFOBUF[1] = MSB(mycount);
EP2FIFOBUF[2] = USBFRAMEL;
EP2FIFOBUF[3] = USBFRAMEH;
EP2FIFOBUF[4] = MICROFRAME;
EP2BCH = 0x02;
EP2BCL = 0x00;
mycount++;
}
break;
case Alt2_BulkINOUT:
case Alt3_IsocIN:
case Alt5_IsocIN:
case Alt1_BulkOUT:
case Alt4_IsocOUT:
case Alt6_IsocINOUT:
程序里共有7个接口,对应上面7个case语句。上面的代码仅显示了接口1的代码,是对端点EP2进行操作的,其实也就是准备数据。
下面开始用上位机程序对开发板进行通信。将固件程序下载到LZ3684开发板上,开发板上的数码管显示数字0,不要显示其它数字。打开上位机程序Streamer.exe,选择BULK IN端点,开始数据传输,如下,
数据传输率轻松地达到了43MB/s,还是非常快的,但这里要注意两个问题,你的电脑只能插入一个USB设备,也不要开启其它的应用程序,要不然速度会降下来。
上面的测试应用到自己的项目时,还有两个问题需要解决,所以实际的传输速度肯定没有43MB/s这么快。一是固件程序的数据准备没有上面的理想情况快(当然这一点也可以通过SLAVE FIFO来解决,并且要用同步传输,而不能用异步传输),二是上位机程序的数据传输方式(是同步还是异步,一次发起多少个传输)。
下面的几个帖子要解决这两个问题,目的是实现数据的高速传输。待续,,,,。。。。
更多文章请访问我的博客http://blog.ednchina.com/liangziusb/
LZ3684 USB开发板 请访问我的淘宝http://shop64171919.taobao.com
良子.2011年
沈阳市东陵区白塔街龙盛家园
欢迎交流:liangziusb@163.com
QQ:392425239
文章评论(0条评论)
登录后参与讨论