项目场景:
读取
IWR1642
采集到的adc数据,可以用matlab做后续处理加深对原理理解
CCS版本12.4.0
SDK版本2.0.0.4
Toolbox版本1.20.00.11
本次使用的例程是NonOS OOB 16xx,无操作系统版本
解决方案:
1.首先导入上面的代码,在dss_data_path.c里面找到MmwDemo_interChirpProcessing函数
我们只需要在这个函数中添加一个数组adc_din_test
来存储adcDataIn的数据
void MmwDemo_interChirpProcessing(MmwDemo_DSS_DataPathObj *obj, uint8_t chirpPingPongId)
{
uint32_t antIndx, waitingTime;
volatile uint32_t startTime;
volatile uint32_t startTime1;
short ii;
cmplx16ReIm_t adc_din_test[256];
MmwDemo_DSS_dataPathContext_t *context = obj->context;
waitingTime = 0;
startTime = Cycleprofiler_getTimeStamp();
/* Kick off DMA to fetch data from ADC buffer for first channel */
EDMA_startDmaTransfer(context->edmaHandle[MMW_DATA_PATH_EDMA_INSTANCE],
MMW_EDMA_CH_1D_IN_PING);
/* 1d fft for first antenna, followed by kicking off the DMA of fft output */
for (antIndx = 0; antIndx < obj->numRxAntennas; antIndx++)
{
/* kick off DMA to fetch data for next antenna */
if (antIndx < (obj->numRxAntennas - 1))
{
if (isPong(antIndx))
{
EDMA_startDmaTransfer(context->edmaHandle[MMW_DATA_PATH_EDMA_INSTANCE],
MMW_EDMA_CH_1D_IN_PING);
}
else
{
EDMA_startDmaTransfer(context->edmaHandle[MMW_DATA_PATH_EDMA_INSTANCE],
MMW_EDMA_CH_1D_IN_PONG);
}
}
/* verify if DMA has completed for current antenna */
startTime1 = Cycleprofiler_getTimeStamp();
MmwDemo_dataPathWait1DInputData(obj, pingPongId(antIndx));
waitingTime += Cycleprofiler_getTimeStamp() - startTime1;
mmwavelib_windowing16x16_evenlen(
(int16_t *)&obj->adcDataIn[pingPongId(antIndx) * obj->numRangeBins],
(int16_t *)obj->window1D,
obj->numAdcSamples);
memset((void *)&obj->adcDataIn[pingPongId(antIndx) * obj->numRangeBins + obj->numAdcSamples],
0,
(obj->numRangeBins - obj->numAdcSamples) * sizeof(cmplx16ReIm_t));
for(ii = 0;ii < 256;ii++){
adc_din_test[ii] = obj->adcDataIn[ii];
}
DSP_fft16x16(
(int16_t *)obj->twiddle16x16_1D,
obj->numRangeBins,
(int16_t *)&obj->adcDataIn[pingPongId(antIndx) * obj->numRangeBins],
(int16_t *)&obj->fftOut1D[chirpPingPongId * (obj->numRxAntennas * obj->numRangeBins) +
(obj->numRangeBins * antIndx)]);
}
if (obj->cliCfg->calibDcRangeSigCfg.enabled)
{
MmwDemo_dcRangeSignatureCompensation(obj, chirpPingPongId);
}
gCycleLog.interChirpProcessingTime += Cycleprofiler_getTimeStamp() - startTime - waitingTime;
gCycleLog.interChirpWaitTime += waitingTime;
}
2.编译代码后点击
Launch Selected Configuration
将程序烧录进去
程序烧录完成后
console
会显示下面内容
3.在TI提供的可视化界面(mmWave_Demo_Visualizer)进行测试,点击
SEND CONFIG TO MMWAVE DEVICE
可视化界面发送数据后CCS的
console
会收到回显
这个时候回到可视化界面,打开
Plots
会有一些散点,这些散点就对应了目前雷达采集到的物体
4.返回CCS进入刚才修改的程序界面,在
adc_din_test
处双击插入断点
之后查看Variables中的
adc_din_test
数组就是我们要的数据
如果找不到Variables可以点击windows下的
Reset Perspective
5.提取数据我们点击
Memory Browser
来查看SARAM中对应地址的数值
点击
Save Memory
,之后选择文件保存路径
下一步选择数组起始地址,数据是
short类型
,所以选16位,实部和虚部各256个一共512个,设置好后点击finish就可以了
最后可以把提取出来的数据和
Variables
中数组对比下,后续就可以进行MATLAB距离仿真了