佚名通过本文主要向大家介绍了cy7c68001,cy7c68001中文资料,dsp串口通信,dsp串口烧写程序,dsp串口等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:DSP通过CY7C68001实现USB串口的程序看不明白
描述:
下面是写入端点6的程序:
case ENDPOINT6:
for(i = 0;i<0x100;i++)
{
epdataw1[i] = i*2;
}
for(i = 0;i<0x50;i=i+2)
{
epdataw[i/2] = epdataw1[i]+(epdataw1[i+1]<<8);
}
/*如果发送小于整数据包的数据时,设置RecievedDataLongth*/
RecievedDataLongth = 0x3f;
/*读当前FIFO的状态,是否已满*/
regValue = *USB_STS;
FifoWriteCnt = 0;
SX2_FifoWrite(ENDPOINT6,&epdataw[0],Fifolong);
if(hshostlink ==TRUE)//2.0标准,高速模式
{
Write_SX2reg(SX2_INPKTEND, 0x06);
}
setupBuff[1] = 0;
/*写0到EP0的计数寄存器,结束本次控制握手*/
Write_SX2reg(SX2_EP0BC, 0);
break;
我想请教的是:1、在计算epdataw时,程序使用了一个左移八位,那不相当于乘以256啊?我算了前几个数据依次是512,772,12568.很明显这与最后通过上位机读出的数据是不符的。上位机读出的数据是0,2,4,6...
2、我试着将SX2_FifoWrite(ENDPOINT6,&epdataw[0],Fifolong);输出至端口6的数组改为epdataw1.输出的结果是0,0,2,0,4,0,6而实际数组为0,2,4,6,8,10...不符,这是为什么啊?
3、程序中,这两段regValue = *USB_STS;
FifoWriteCnt = 0;有作用吗?
4、下面这段话,我百度到说是让FIFO输出的作用,请问是吗?Write_SX2reg(SX2_INPKTEND, 0x06);
多谢各位指教!
解决方案1:
看程序epdataw[]是16位的数据,epdataw1[]是8位的,那个左移8位操作是把2个8位的数拼成16的数据.你看下报告描述符里的报告数据是不是16位的
根据程序猜测是的,是告诉硬件数据以放入FIFO准备就绪,可以扔出去了
参考1,报告数据是16位的,你扔个0过去它当然会发送0x00,0x00了
仅看这段程序没什么用,不过猜测即使这里没用也是留给DEBUG用的
描述:
DSPUSB串口扩展c程序
我在开发板上使用的USB模块,进行实验,发现有些地方看不明白。求指教!下面是写入端点6的程序:
case ENDPOINT6:
for(i = 0;i<0x100;i++)
{
epdataw1[i] = i*2;
}
for(i = 0;i<0x50;i=i+2)
{
epdataw[i/2] = epdataw1[i]+(epdataw1[i+1]<<8);
}
/*如果发送小于整数据包的数据时,设置RecievedDataLongth*/
RecievedDataLongth = 0x3f;
/*读当前FIFO的状态,是否已满*/
regValue = *USB_STS;
FifoWriteCnt = 0;
SX2_FifoWrite(ENDPOINT6,&epdataw[0],Fifolong);
if(hshostlink ==TRUE)//2.0标准,高速模式
{
Write_SX2reg(SX2_INPKTEND, 0x06);
}
setupBuff[1] = 0;
/*写0到EP0的计数寄存器,结束本次控制握手*/
Write_SX2reg(SX2_EP0BC, 0);
break;
我想请教的是:1、在计算epdataw时,程序使用了一个左移八位,那不相当于乘以256啊?我算了前几个数据依次是512,772,12568.很明显这与最后通过上位机读出的数据是不符的。上位机读出的数据是0,2,4,6...
2、我试着将SX2_FifoWrite(ENDPOINT6,&epdataw[0],Fifolong);输出至端口6的数组改为epdataw1.输出的结果是0,0,2,0,4,0,6而实际数组为0,2,4,6,8,10...不符,这是为什么啊?
3、程序中,这两段regValue = *USB_STS;
FifoWriteCnt = 0;有作用吗?
4、下面这段话,我百度到说是让FIFO输出的作用,请问是吗?Write_SX2reg(SX2_INPKTEND, 0x06);
多谢各位指教!
解决方案1:
看程序epdataw[]是16位的数据,epdataw1[]是8位的,那个左移8位操作是把2个8位的数拼成16的数据.你看下报告描述符里的报告数据是不是16位的
根据程序猜测是的,是告诉硬件数据以放入FIFO准备就绪,可以扔出去了
参考1,报告数据是16位的,你扔个0过去它当然会发送0x00,0x00了
仅看这段程序没什么用,不过猜测即使这里没用也是留给DEBUG用的