各位专家好:
刚开始学DSP,最近学习了EDMA。有两个问题
问题一:想一次初始化EDMA就可以多次完成传输我在一次EDMA传输后再次使用
CSL_edma3HwControl(hModule,CSL_EDMA3_CMD_INTRPEND_CLEAR,®ionIntr); CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL);
regionIntr.region = CSL_EDMA3_REGION_GLOBAL;
regionIntr.intr = 0;
regionIntr.intrh = 0;
(假设源地址数据或者是目标地址数据改变了)
但是第二次触发后
do {
CSL_edma3GetHwStatus(hModule,CSL_EDMA3_QUERY_INTRPEND,®ionIntr);
} while (!(regionIntr.intr & 0x1));
就通过不了了,请问这里是哪里错了呢。
问题二:
想实现多核EDMA传输,想法是通过如下语句让每个核使用不同的channel和PaRAM
chAttr.regionNum = CSL_EDMA3_REGION_GLOBAL;
chAttr.chaNum = coreNum;
hChannel = CSL_edma3ChannelOpen(&chObj, instNum, &chAttr, &status);
/* Map the DMA Channel to PARAM Block (coreNum). */
CSL_edma3MapDMAChannelToParamBlock (hModule, channelNum, coreNum);
/* Obtain a handle to parameter set (coreNum)*/
hParamPing = CSL_edma3GetParamHandle(hChannel, coreNum, &status);
再分别设置每个核对应的PaRAM进行输出,请问这么做可以吗
谢谢!
jiaozi tianzhi:
我是来学习的,大神们来帮他看看,解决问题,互帮互助!!
da qin zheng sheng:
第二个问题多核传输需要协调配合和分工,没用过多核的,目前不会;
第一个可以仔细阅读官方手册和例程,估计每次DMA传输完成后要清除标记位然后重新启动传输位?
user4187796:
回复 da qin zheng sheng:
第一个问题 可能是regionIntr.intr 这个参数看你其他地方修改了没 不通过看看传输完后的标志是否清零
多核传输问题比较难,
haiguo li:
DMA是有促发源的,你可以设置一次促发是发送一个数据还是发送你设置的字节数个数据。同时还需要设置源地址、目标地址是不是增加,以及以多大程度的增加。这样来一次DMA促发,就进行一次数据搬移,直到完成了你设置的字节数的搬移,这时可以产生中断,用户进行处理。
YI LIU10:
学习一个~~
Ziming Zhang:
回复 YI LIU10:
我们学习dsp也有一点,基本没掌握什么东西,求大神指点
user2000895:
设置好后,使用多核协同工作,一起处理DMA就可以了。第二次没过 ,是不是有哪些标志变量你没有清掉造成的呢。
可以这么做的,协调好久行了
liang liang2:
应该是可以的,好好看一下操作手册,应该会有说明的
qian cui:
回复 Andy Yin1:
多核dma传输数据,每个核申请dma
资源时候,主要那些资源不同,有没有相关的例子?