Ti的工程师们你们好!我在6678评估板上测试C:\ti\edma3_lld_02_11_05_02\examples\CSL2_DAT_DEMO\src下的代码。在使用
EDMA3_DRV_requestChannel(DAT_EDMA3LLD_hEdma,&chaNum, &tccNum,(EDMA3_RM_EventQueue)DAT_EDMA3LLD_HW_EVT_QUEUE_ID,NULL , NULL))申请QDMA传输通道时,在申请第二个QDMA通道式出错,通道没有申请成功,程序无法运行。但在C:\ti\edma3_lld_02_11_05_02\examples\CSL2_DAT_DEMO\src\csl2_dat.c中是申请了四个QDMA通道的,在单独使用EDMA3_DRV_requestChanne申请QDMA通道测试中也只能申请一个通道成功,在申请第二个QDMA通道式返回申请出错。
Shine:
请单步跟进去debug一下看在哪里出错了?
user6005307:
回复 Shine:
通道申请错误是在C:\ti\edma3_lld_02_11_05_02\examples\CSL2_DAT_DEMO\src\csl2_dat.c下的EDMA3_DRV_requestChannel()这个函数,现在只能申请一个QDMA通道,申请第二个QDMA通道时出错。
for(i=0; i < DAT_EDMA3LLD_numAllocatedChannels; i++) {chaNum = EDMA3_DRV_QDMA_CHANNEL_ANY;tccNum = EDMA3_DRV_TCC_ANY;
/** EDMA3 DRV call to request for channel and tcc resources*/if (EDMA3_DRV_SOK != EDMA3_DRV_requestChannel(DAT_EDMA3LLD_hEdma,&chaNum, &tccNum,(EDMA3_RM_EventQueue)DAT_EDMA3LLD_HW_EVT_QUEUE_ID,NULL /*(EDMA3_RM_TccCallback)&_transferComplete*/, NULL)) {
/** Error requesting channels, Clean up all channels requested so far*/for(j = i-1; j >=0; j–) {EDMA3_DRV_freeChannel(DAT_EDMA3LLD_hEdma,DAT_allocatedChannels[j].paramNo);DAT_allocatedChannels[i].paramNo = DAT_INVALID_ID;DAT_allocatedChannels[i].tccNo = DAT_INVALID_ID;}
if (EDMA3_DRV_SOK != EDMA3_DRV_close(DAT_EDMA3LLD_hEdma, NULL)){printf("Error closing DRV instance \n");}else {if (EDMA3_DRV_SOK != EDMA3_DRV_delete(DAT_EDMA3LLD_HW_INST_ID,NULL)){printf("Error deleting EDMA3 DRV\n");}}
DAT_EDMA3LLD_openFlag = 0;return 0;}
代码中DAT_EDMA3LLD_numAllocatedChannels为4,在第二次for循环时 EDMA3_DRV_requestChannel()返回-133,QDMA申请错误,程序进入if循环清除通道和错误位。
user6005307:
现在想确定一下EDMA3_LLD库中的通道申请函数EDMA3_DRV_requestChannel()能不能申请2个及以上的QDMA通道,我现在测试的是QDMA申请第二个申请不成功,DMA通道在申请第三个时不成功。