TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678 EDMA3 多通道使用问题!!!急

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的吗?

赞(0)
未经允许不得转载:TI中文支持网 » C6678 EDMA3 多通道使用问题!!!急
分享到: 更多 (0)