设置函数usbDevDMASetTransLength可以改变接收长度,就是要求事先知道接收的数据长度
问题是10长度是不是很稳定,有时会死掉pc端的程序。
pc端代码:
发送:int ret = zyUSB_WriteData(1,sendbuf,10,1000);
//通过逻辑端点1的OUT端口发送10字节数据
接收: ret = zyUSB_ReadData(0,recbuf,10,1000); //通过逻辑端点1的IN端口接收10字节数据
发送:int ret = zyUSB_WriteData(1,sendbuf,3072,1000);
//通过逻辑端点1的OUT端口发送10字节数据
接收: ret = zyUSB_ReadData(0,recbuf,3072,1000);
//逻辑端点1的IN端口接收10字节数据
arm端代码:
#define DATALENGTH 3072 /* 定义DMA传输的长度 */
#define DATALENGTH2 10
{
ulSetLen = usbDevDMASetTransLength(4, DATALENGTH); /* 配置物理端点4 DMA传输长度 */
ulSetLen = usbDevDMASetTransLength(2, DATALENGTH2); //配置物理端点2 DMA传输长度
while(1) {
usbDevServe(); /* 处理USB事件 */
if (bEPPflags.bits.configuration == 1) {
if (bEPPflags.bits.ep2_rxdma == 1) { /* 物理端点4 DMA接收数据完成 */
USB_ENTER_CRITICAL_SECTION();
bEPPflags.bits.ep2_rxdma = 0;
USB_EXIT_CRITICAL_SECTION();
pucSrc = usbDevDMAGetBuffer(4);
pucDst = usbDevDMAGetBuffer(5);
memcpy(pucDst, pucSrc, DATALENGTH); /* 拷贝数据到目标缓冲区 */
ulSetLen = usbDevDMASetTransLength(5, DATALENGTH);
/* 设置物理端点5缓冲区大小 */
usbDevDMAStartIN(5); /* 启动物理端点5 DMA传输 */
ulSetLen = usbDevDMASetTransLength(4, DATALENGTH);
/* 设置物理端点4缓冲区大小 */
}
if (bEPPflags.bits.ep1_rxdma == 1) { /* 物理端点4 DMA接收数据完成 */
USB_ENTER_CRITICAL_SECTION();
bEPPflags.bits.ep1_rxdma = 0;
USB_EXIT_CRITICAL_SECTION();
pucSrc = usbDevDMAGetBuffer(2);
pucDst = usbDevDMAGetBuffer(3);
memcpy(pucDst, pucSrc, DATALENGTH2); /* 拷贝数据到目标缓冲区 */
ulSetLen = usbDevDMASetTransLength(3, DATALENGTH2);
/* 设置物理端点3缓冲区大小 */
usbDevDMAStartIN(3); /* 启动物理端点3 DMA传输 */
ulSetLen = usbDevDMASetTransLength(2, DATALENGTH2);
/* 设置物理端点2缓冲区大小 */
}
}
|