完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好:
我最近在做关于USB CPPI DMA,实现传输大容量的数据,根据TMS3320C6748的芯片手册了解到USB CPPI DMA可以实现单条数据长度最大可以达到4M的数据缓存,我现在可以实现第一条数据长度为4M数据缓存时,可以直接进行发送,当第二次在发送4M数据时就会出现死机的现象,主要是卡在USB控制状态寄存器中的位判断,在判断FIFO是否为空时没有判断通过导致代码死机。 问题:大家有遇到和我一样的或相似的问题吗?大家是如何解决的??? 代码如下: 初始化CDC设备总线函数 void tpl_u***_cdc_init(void) { CacheEnableMAR((unsigned int)0xC0001000, (unsigned int)0x08000000); CacheEnableMAR(L1DCFG_L1DMODE_32K | L1PCFG_L1PMODE_32K | L2CFG_L2MODE_256K); USBBufferInit((tUSBBuffer *)&g_sRxBuffer); USBDCDInit(USB_INSTANCE, (tUSBDCDCDevice *)*g_sCDCDevice); Cppi41DmaInit(USB_INSTANCE, epInfo, NUMBER_OF_ENDPOINTS); } 上面的函数时注册CDC设备总线的初始化函数,里面有DMA初始化操作,注册的DMA模式为Linux CDC,这里不贴出此部分配置。 下面的内容主要是在USB中断中处理的一些操作流程,只有部分代码内容: for(j = 0; j < 16;j ++) { dataBuf = (unsigned char *)cppiDmaAllocnBuffer(2048);//申请DMA缓存 for(i = 0; i < 2048*1024; i++) { dataBuf [i] = (i + 1)%256; } doDmaTxTransfer(USB_INSTANCE, dataBuf , 2048*1024, g_sCDCDevice.psPrivateCDCSerData->ucBulkINEndpoint); enableCoreTxDMA(USB_INSTANCE, g_sCDCDevice.psPrivateCDCSerData->ucBulkINEndpoint);//打开DMA通道 delay(0xFFFFFFFF);//加入延时让DMA数据发送完成 cppiDmaFreenBuffer((unsigned int *)dataBuf);//释放DMA缓存 disableCoreTxDMA(USB_INSTANCE, g_sCDCDevice.psPrivateCDCSerData->ucBulkINEndpoint);//关闭DMA通道 dmaTxCompletion(USB_INSTANCE, g_sCDCDevice.psPrivateCDCSerData->ucBulkINEndpoint);//队列发送完成,退出中断 } 上面的代码是实现的部分程序,主要是使用DMA发送超过4M的数据,目前在测试中发现使用DMA发送超过2M的数据就会出现崩溃的现象,如果使用循环的方式进行发送超过4M的数据,例如8M的数据缓存时,就会出现上述描述的死机现象!!!! 以上代码是基于TMS320C6748 DEMO源码STRATWARE中的USB_DEV_SERIAL!!!! 祝好! |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
3315 浏览 0 评论
804 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
3745 浏览 0 评论
4502 浏览 1 评论
1399 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 15:45 , Processed in 0.609931 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号