1. 开发平台:TI TMS320C6678evm板,仿真器Blackhawk XDS560v2-USB Mezzanine Emulator
2. 软件环境:CCS 5.4.0,mcsdk为2_01_02_06
3. 由于项目需要,需要同时使用3个EDMA3通道进行数据传输,其中两个通道完成从DDR3向L2SRAM传输,一个通道完成从L2SRAM向DDR3传输。使用以下程序可以打开两个通道,第三个会报EDMA3_DRV_E_DMA_CHANNEL_UNAVAIL的错误。在网上查阅资料说同sample_c6678_cfg.c文件中sampleInstInitConfig有关,更改其中的值可以改变保留的通道数和可使用通道数。我按照1bit对应一个通道的原则对ownPaRAMSets、ownDmaChannels和ownTccs进行了修改。然后编译工程,发现问题仍然无法解决。网上还有说修改完sampleInstInitConfig后,还要对edma3_lld_rm_sample.ae66进行重新编译,这一步我不知道怎么做然后没有做。
4. 还有在“C:\ti\edma3_lld_02_11_05_02\packages\ti\sdo\edma3\rm\sample\src\platforms\”和"C:\ti\edma3_lld_02_11_05_02\packages\ti\sdo\edma3\drv\sample\src\platforms\"目录下面各有一个sample_c6678_cfg.c文件,请问它们作用一样么,在做修改时只修改一个就可以还是要全部修改。
5. 参考其他解决多通道问题的方案,可以使用两个EDMA3 Instance,我使用了,使用后EDMA3_DRV_requestChannel()编译通过,但是在使用EDMA3_DRV_waitAndClearTcc()函数等待传输完成时,无法完成。
6. 问题比较紧急,希望相关方面的大牛可以给予快速回复。非常感谢!!!
/* ownPaRAMSets */
/* 31 0 63 32 95 64 127 96 */
{0x3FFF0003u, 0x00000000u, 0x00000000u, 0x00000000u,
/* 159 128 191 160 223 192 255 224 */
0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
/* 287 256 319 288 351 320 383 352 */
0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u,
/* 415 384 447 416 479 448 511 480 */
0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u},
/* ownDmaChannels */
/* 31 0 63 32 */
{0x00000003u, 0x00000000u},
/* ownQdmaChannels */
/* 31 0 */
{0x00000001u},
/* ownTccs */
/* 31 0 63 32 */
{0x00000003u, 0x00000000u},
hEdma = edma3init(edmaInstance, &edmaResult);if (edmaResult1 == EDMA3_DRV_SOK) {printf("hEdma1 edma3init success!\n");}elseprintf("hEdma1 edma3init failed!\n");/* Setup for Channel 1*/tcc0 = EDMA3_DRV_TCC_ANY;chId0= EDMA3_DRV_DMA_CHANNEL_ANY;/* Request any DMA channel and any TCC */result = EDMA3_DRV_requestChannel (hEdma, &chId0, &tcc0, (EDMA3_RM_EventQueue)0, NULL, NULL);if (result == EDMA3_DRV_SOK)printf("DMA channel 0: %d\n", chId0);elseprintf("DMA channel 0 request failed!\n");tcc1= EDMA3_DRV_TCC_ANY;chId1= EDMA3_DRV_DMA_CHANNEL_ANY;result1= EDMA3_DRV_requestChannel (hEdma, &chId1, &tcc1, (EDMA3_RM_EventQueue)0, NULL, NULL);if (result1== EDMA3_DRV_SOK)printf("DMA channel 1: %d\n", chId0);elseprintf("DMA channel 1 request failed!\n");tcc2= EDMA3_DRV_TCC_ANY;chId2= EDMA3_DRV_DMA_CHANNEL_ANY;result2= EDMA3_DRV_requestChannel (hEdma, &chId2, &tcc2, (EDMA3_RM_EventQueue)0, NULL, NULL);if (result2 == EDMA3_DRV_SOK)printf("DMA channel 2: %d\n", chId2);elseprintf("DMA channel 2 request failed! error code : %d\n", result2);
Andy Yin1:
ownDmaChannels=0x3,只有channel0/1两个通道可用,可以修改ownDmaChannels增加可用通道。
qian cui:
你好,你点用这些edma函数的工程是基于bios的吗?
TI中文支持网


