我的EDMA配置设置如下:
numPingOrPongSamples = obj->numRangeBins * obj->numRxAntennas;
aCount = numPingOrPongSamples * BYTES_PER_SAMP_1D;
if (gMrrDSSMCB.subFrameIndx == 2)
{
oneD_destinationBindex = (int16_t)aCount;
oneD_destinationPongAddress = (uint8_t *)(&obj->radarCube[aCount * 2 * obj->numDopplerBins]);
}
else if (gMrrDSSMCB.subFrameIndx == 1)
{
oneD_destinationBindex = (int16_t)aCount;
oneD_destinationPongAddress = (uint8_t *)(&obj->radarCube[aCount * obj->numDopplerBins]);
}
else
{
oneD_destinationBindex = (int16_t)aCount;
oneD_destinationPongAddress = (uint8_t *)(&obj->radarCube[0]);
}
/* MMW_EDMA_CH_1D_OUT – Copies from ping FFT output (even chirp indices) to L3 */
retVal =
EDMAutil_configType1(context->edmaHandle[MMW_DATA_PATH_EDMA_INSTANCE],
(uint8_t *)(SOC_translateAddress((uint32_t)(&obj->fftOut1D[0]),SOC_TranslateAddr_Dir_TO_EDMA,NULL)),
oneD_destinationPongAddress,
MMW_EDMA_CH_1D_OUT,
false,
MMW_EDMA_CH_1D_OUT_SHADOW,
aCount,
obj->numChirpsPerFrame, //bCount
0, //srcBidx
oneD_destinationBindex, // //dstBidx
eventQueue,
NULL,
(uintptr_t) obj);
启动运行后,发现在EDMA数据搬移过程中,只能将一部分数据搬移到我的目标地址oneD_destinationPongAddress中,剩下部分全部为0,如下图所示(numRxAntennas = 4,numRangeBins = 32,numDopplerBins = 64,numTxAntennas = 3, numChirpsPerFrame = 1):
user4162505:
另,,上述得到的edma搬移后的数据结果进一步分析,非0数据中,却只有一组数据在循环(如下图),可以确定adc采集的数据是在不断变化的,但是经过EDMA搬移后的数据为何仅仅都是一次搬移的结果的重复??
Chris Meng:
你好,
请问你的参数配置是如何的?是否使用的是TDM模式,三个TX轮流发射chirp?数据不正确也有可能是RF配置和EDMA配置不匹配。
Chris Meng:
回复 user4162505:
user4162505另,,上述得到的edma搬移后的数据结果进一步分析,非0数据中,却只有一组数据在循环(如下图),可以确定adc采集的数据是在不断变化的,但是经过EDMA搬移后的数据为何仅仅都是一次搬移的结果的重复??
请问你使用的是什么采集代码?会不代码本身就只采集了一次数据,ADCbuf的数据没有变化?
user4162505:
回复 Chris Meng:
ADC采集的数据我有监控过的,每次都是不一样的,虽数据的整体趋势是一致的,但是每组数据都有会有差异的
user4162505:
回复 Chris Meng:
是的,正常的3个TX的轮流发射chirp的,,
"profileCfg 0 77 2 1 30 0 0 6.25 1 32 3062.5 0 0 40","chirpCfg 0 0 0 0 0 0 0 1","chirpCfg 1 1 0 0 0 0 0 2","chirpCfg 2 2 0 0 0 0 0 4","advFrameCfg 3 0 0 1 0","subFrameCfg 0 0 0 1 64 100 0 1 1 100","subFrameCfg 1 0 1 1 64 100 0 1 1 100","subFrameCfg 2 0 2 1 64 100 0 1 1 100",
Chris Meng:
回复 user4162505:
你好,
从你代码看,你搬移的是1D FFT的结果。请问你是如何触发EDMA搬移的?是手动,还是使用event?如果是event,是哪个event?如果手动,是在什么函数里?
输出数据如果循环,有可能是源地址没有正确更新。
user4162505:
回复 Chris Meng:
这个是手动触发的,类似1642的demo处理,采用函数EDMA_startDmaTransfer(context->edmaHandle[MMW_DATA_PATH_EDMA_INSTANCE], channelId);这里channelId = MMW_EDMA_CH_1D_OUT
这一块的这两天反复验证测试的,貌似没有问题的,现在问题的关键集中在adc采集的每一个接收天线的数据 ADCdataBuf 不能正确成功的通过EDMA搬移给1DFFT的输入adcDataIn使用,并且在3个TX发射的周期内,如上述前边所述,最终仅能得到17920个数据,即TX1的64个chirp的接收数据+TX2的6个chirp的接收数据,这是为何??