Thread 中讨论的其他器件:AWRL6432
工具/软件:
大家好、TI 专家。
xWRL6432 使用 HWA1.2。
HWA1.2 具有针对干扰的零输出功能。 正如我所检查的、HWA2.0 具有更多的干扰特性、例如内插。
是否有任何方法可以对 xWRL6432 应用干扰插值?
或者任何 xWRL6432 示例?
谢谢你。
此致、
JB.
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
大家好、TI 专家。
xWRL6432 使用 HWA1.2。
HWA1.2 具有针对干扰的零输出功能。 正如我所检查的、HWA2.0 具有更多的干扰特性、例如内插。
是否有任何方法可以对 xWRL6432 应用干扰插值?
或者任何 xWRL6432 示例?
谢谢你。
此致、
JB.
您好、JB:
雷达工具箱中有一个基于软件的实现、该实现位于: https://dev.ti.com/tirex/explore/node?node=A__AbYPV7C2tpFJ0YJLq--B2A__radar_toolbox__1AslXXD__LATEST
不过、这是一种基于 DSP 的实现。
此致、
Zigang
嗨、Zigang
感谢您的 调查结果。
。
我参考上述示例开始实施。
我对添加 transferCompletionCallbackFxn 有疑问。
使用 DPEDMA_syncABCfg 参数和 DPEDMA_configSyncAB 函数时、
transferCompletionCallbackFxn 可如此使用。(工具箱中的干扰缓解示例代码)
。
以下代码是 xWRL6432 mmw_demo、即从 ADC 缓冲器到 HWA 存储器的 ADC 数据输入代码。
/** * @b Description * @n * EDMA configuration for rangeProc data in when EDMA is used to copy data from * ADCBuf to HWA memory * * @param[in] rangeProcObj Pointer to rangeProc object handle * @param[in] pHwConfig Pointer to rangeProc hardware resources * * \ingroup DPU_RANGEPROC_INTERNAL_FUNCTION * * @retval * Success - 0 * @retval * Error - <0 */ static int32_t rangeProcHWA_ConfigEDMA_DataIn ( rangeProcHWAObj *rangeProcObj, DPU_RangeProcHWA_HW_Resources *pHwConfig ) { int32_t errorCode = SystemP_SUCCESS; bool retVal; EDMA_Handle handle = rangeProcObj->edmaHandle; uint16_t bytePerRxChan; rangeProc_dpParams *DPParams= &rangeProcObj->params; uint32_t dmaCh, tcc, param, chType; bool isEventTriggered; int32_t idx, numParamSets; uint32_t hwaInpBuff[2]; uint32_t baseAddr, regionId; EDMACCPaRAMEntry shadowParam; //paramCfg uint32_t linkChId0, linkChId1; baseAddr = EDMA_getBaseAddr(handle); DebugP_assert(baseAddr != 0); regionId = EDMA_getRegionId(handle); DebugP_assert(regionId < SOC_EDMA_NUM_REGIONS); /* Get rangeProc Configuration */ handle = rangeProcObj->edmaHandle; chType = EDMA_CHANNEL_TYPE_DMA; dmaCh = pHwConfig->edmaInCfg.dataIn.channel; param = pHwConfig->edmaInCfg.dataIn.channel; tcc = pHwConfig->edmaInCfg.dataInSignature.channel; isEventTriggered = true; /* Config Dummy channel and paramset */ errorCode = DPEDMA_configDummyChannel(handle, chType, &dmaCh, &tcc, ¶m); if (errorCode != SystemP_SUCCESS) { goto exit; } //real ADC samples only supported bytePerRxChan = DPParams->numAdcSamples * DPParams->numRxAntennas * sizeof(uint16_t); numParamSets = 2; /* ping and pong path */ hwaInpBuff[0] = rangeProcObj->hwaMemBankAddr[0]; hwaInpBuff[1] = rangeProcObj->hwaMemBankAddr[1]; /* Get LinkChan from configuraiton */ linkChId0 = pHwConfig->edmaInCfg.dataIn.channelShadow[0]; allocateEDMAShadowChannel(handle, &linkChId0); linkChId1 = pHwConfig->edmaInCfg.dataIn.channelShadow[1]; allocateEDMAShadowChannel(handle, &linkChId1); /* Program Shadow Param Sets */ EDMACCPaRAMEntry_init(&shadowParam); for (idx = 0; idx < numParamSets; idx++) { memset(&shadowParam, 0, sizeof(EDMACCPaRAMEntry)); shadowParam.srcAddr = (uint32_t) SOC_virtToPhy(rangeProcObj->ADCdataBuf); if (rangeProcObj->params.numDopplerChirpsPerFrame > 1) { shadowParam.destAddr = (uint32_t) hwaInpBuff[idx]; } else { shadowParam.destAddr = (uint32_t) hwaInpBuff[0]; } shadowParam.aCnt = bytePerRxChan; shadowParam.bCnt = 1; shadowParam.cCnt = DPParams->numTxAntennas; /* ADC ping/pong, (two chirps) */ shadowParam.bCntReload = shadowParam.bCnt; shadowParam.srcBIdx = 0; shadowParam.destBIdx = 0; shadowParam.srcCIdx = 0; shadowParam.destCIdx = (uint32_t)rangeProcObj->rxChanOffset * DPParams->numRxAntennas; shadowParam.opt |= (EDMA_OPT_TCCHEN_MASK | ((((uint32_t)tcc) << EDMA_OPT_TCC_SHIFT) & EDMA_OPT_TCC_MASK) | ((((uint32_t)EDMA_SYNC_AB) << EDMA_OPT_SYNCDIM_SHIFT) & EDMA_OPT_SYNCDIM_MASK)); EDMASetPaRAM(baseAddr, pHwConfig->edmaInCfg.dataIn.channelShadow[idx], &shadowParam); } /* Link 2 shadow Param sets */ if ((errorCode = DPEDMA_linkParamSets(handle, param, linkChId0)) != SystemP_SUCCESS) { goto exit; } if ((errorCode = DPEDMA_linkParamSets(handle, linkChId0, linkChId1)) != SystemP_SUCCESS) { goto exit; } if ((errorCode = DPEDMA_linkParamSets(handle, linkChId1, linkChId0)) != SystemP_SUCCESS) { goto exit; } /* Bring in the first shadow param set */ retVal = EDMAEnableTransferRegion(baseAddr, regionId, dmaCh, EDMA_TRIG_MODE_MANUAL); if(isEventTriggered) { retVal = EDMAEnableTransferRegion(baseAddr, regionId, dmaCh, EDMA_TRIG_MODE_EVENT); } if (retVal != TRUE) { errorCode = DPU_RANGEPROCHWA_EINTERNAL; goto exit; } /*************************************************/ /* Generate Hot Signature to trigger Ping/Pong paramset */ /*************************************************/ if (rangeProcObj->params.numDopplerChirpsPerFrame > 1) { errorCode = DPEDMAHWA_configTwoHotSignature(handle, &pHwConfig->edmaInCfg.dataInSignature, rangeProcObj->initParms.hwaHandle, rangeProcObj->dataInTrigger[0], rangeProcObj->dataInTrigger[1], false); } else { errorCode = DPEDMAHWA_configTwoHotSignature(handle, &pHwConfig->edmaInCfg.dataInSignature, rangeProcObj->initParms.hwaHandle, rangeProcObj->dataInTrigger[0], rangeProcObj->dataInTrigger[0], false); } if (errorCode != SystemP_SUCCESS) { goto exit; } exit: return(errorCode); }
如何在此 EDMA 传输结构中添加 transferCompletionCallbackFxn?
如果我需要使用 transferCompletionCallbackFxn、是否应该将结构更改为使用 DPEDMA_syncABCfg、DPEDMA_configSyncAB 函数?
谢谢你。
此致、
JB.
嗨、Zigang
。
我有一些执行问题。
1.是否可以在 xWRL6432 中实现该示例的结构?
例如、
ADC 缓冲器 (Ping 和 Pong)->(中的 EDMA)->本地存储器中的 ADC 数据->(EDMA 管道)-> HWA 存储器
mmw_demo (xWRL6432)、
ADC 缓冲器 (Ping 和 Pong) x 2 ->(EDMA)-> HWA 存储器
将 用于循环的“ADC 缓冲器 (Ping 和 Pong) x 2“表示 为我设置 EDMA 通道、函数、链接等、这会引起混淆。
。
如何 在 xWRL6432 ADC 数据源 EDMA 结构中使用 transfertionCallbackFxn?
它有什么函数或 API 吗?
请查看几天前的上述问题。
。
3.关于 EDMA 通道
为了实现示例的数据管道结构、更需要 EDMA 通道。
我是否使用 mmw_res.h 中已定义但未使用的通道? EDMA_APPSS_TPCC_B_EVT_FREE_XX?
还是应该设置一些内容、以便将通道用于数据管道?
谢谢你。
此致、
JB.
您好、JB:
有关 HWA 和 EDMA 的问题。 请继续对以下 e2e 进行讨论
(6) AWRL6432BOOST:线性调频脉冲间处理 — 传感器论坛-传感器 — TI E2E 支持论坛
此致、
Zigang
您好、Cesar
对于我在这个 e2e 中提出的问题、您能否回复?
或者您能先检查一下我的问题吗? 我会在打开 e2e 后重新上传问题。
。
历史
-我想对 AWRL6432 实施线性干扰缓解插值。
-工具箱中有一个示例,但它适用于 xwr18/16xx 器件 (https://dev.ti.com/tirex/explore/node?node=A__AbYPV7C2tpFJ0YJLq--B2A__radar_toolbox__1AslXXD__LATEST)
-在 AWRL6432 中实现此示例需要添加和更改 EDMA。
。
问题 1: 是否可以在 xWRL6432 中实现该 x18/16xx 示例的结构?
这个 xwr18/16xx 示例
ADC 缓冲器 (Ping 和 Pong)->(中的 EDMA)->本地存储器中的 ADC 数据->(EDMA 管道)-> HWA 存储器
mmw_demo (xWRL6432)、
ADC 缓冲器 (Ping 和 Pong) x 2 ->(EDMA)-> HWA 存储器
将 用于循环的“ADC 缓冲器 (Ping 和 Pong) x 2“表示 为我设置 EDMA 通道、函数、链接等、这会引起混淆。
。
。
问题 2: 如何 在 xWRL6432 ADC 数据源 EDMA 结构中使用 transferCompletionCallbackFxn?
我对添加 transferCompletionCallbackFxn 有疑问。
使用 DPEDMA_syncABCfg 参数和 DPEDMA_configSyncAB 函数时、
transferCompletionCallbackFxn 可如此使用。(工具箱中的 xwr18/16xx 干扰缓解示例代码)
。
以下代码是 xWRL6432 mmw_demo、即从 ADC 缓冲器到 HWA 存储器的 ADC 数据输入代码。
我找不到任何对应的 API。 如何在此 EDMA 传输结构中添加 transferCompletionCallbackFxn?
/** * @b Description * @n * EDMA configuration for rangeProc data in when EDMA is used to copy data from * ADCBuf to HWA memory * * @param[in] rangeProcObj Pointer to rangeProc object handle * @param[in] pHwConfig Pointer to rangeProc hardware resources * * \ingroup DPU_RANGEPROC_INTERNAL_FUNCTION * * @retval * Success - 0 * @retval * Error - <0 */ static int32_t rangeProcHWA_ConfigEDMA_DataIn ( rangeProcHWAObj *rangeProcObj, DPU_RangeProcHWA_HW_Resources *pHwConfig ) { int32_t errorCode = SystemP_SUCCESS; bool retVal; EDMA_Handle handle = rangeProcObj->edmaHandle; uint16_t bytePerRxChan; rangeProc_dpParams *DPParams= &rangeProcObj->params; uint32_t dmaCh, tcc, param, chType; bool isEventTriggered; int32_t idx, numParamSets; uint32_t hwaInpBuff[2]; uint32_t baseAddr, regionId; EDMACCPaRAMEntry shadowParam; //paramCfg uint32_t linkChId0, linkChId1; baseAddr = EDMA_getBaseAddr(handle); DebugP_assert(baseAddr != 0); regionId = EDMA_getRegionId(handle); DebugP_assert(regionId < SOC_EDMA_NUM_REGIONS); /* Get rangeProc Configuration */ handle = rangeProcObj->edmaHandle; chType = EDMA_CHANNEL_TYPE_DMA; dmaCh = pHwConfig->edmaInCfg.dataIn.channel; param = pHwConfig->edmaInCfg.dataIn.channel; tcc = pHwConfig->edmaInCfg.dataInSignature.channel; isEventTriggered = true; /* Config Dummy channel and paramset */ errorCode = DPEDMA_configDummyChannel(handle, chType, &dmaCh, &tcc, ¶m); if (errorCode != SystemP_SUCCESS) { goto exit; } //real ADC samples only supported bytePerRxChan = DPParams->numAdcSamples * DPParams->numRxAntennas * sizeof(uint16_t); numParamSets = 2; /* ping and pong path */ hwaInpBuff[0] = rangeProcObj->hwaMemBankAddr[0]; hwaInpBuff[1] = rangeProcObj->hwaMemBankAddr[1]; /* Get LinkChan from configuraiton */ linkChId0 = pHwConfig->edmaInCfg.dataIn.channelShadow[0]; allocateEDMAShadowChannel(handle, &linkChId0); linkChId1 = pHwConfig->edmaInCfg.dataIn.channelShadow[1]; allocateEDMAShadowChannel(handle, &linkChId1); /* Program Shadow Param Sets */ EDMACCPaRAMEntry_init(&shadowParam); for (idx = 0; idx < numParamSets; idx++) { memset(&shadowParam, 0, sizeof(EDMACCPaRAMEntry)); shadowParam.srcAddr = (uint32_t) SOC_virtToPhy(rangeProcObj->ADCdataBuf); if (rangeProcObj->params.numDopplerChirpsPerFrame > 1) { shadowParam.destAddr = (uint32_t) hwaInpBuff[idx]; } else { shadowParam.destAddr = (uint32_t) hwaInpBuff[0]; } shadowParam.aCnt = bytePerRxChan; shadowParam.bCnt = 1; shadowParam.cCnt = DPParams->numTxAntennas; /* ADC ping/pong, (two chirps) */ shadowParam.bCntReload = shadowParam.bCnt; shadowParam.srcBIdx = 0; shadowParam.destBIdx = 0; shadowParam.srcCIdx = 0; shadowParam.destCIdx = (uint32_t)rangeProcObj->rxChanOffset * DPParams->numRxAntennas; shadowParam.opt |= (EDMA_OPT_TCCHEN_MASK | ((((uint32_t)tcc) << EDMA_OPT_TCC_SHIFT) & EDMA_OPT_TCC_MASK) | ((((uint32_t)EDMA_SYNC_AB) << EDMA_OPT_SYNCDIM_SHIFT) & EDMA_OPT_SYNCDIM_MASK)); EDMASetPaRAM(baseAddr, pHwConfig->edmaInCfg.dataIn.channelShadow[idx], &shadowParam); } /* Link 2 shadow Param sets */ if ((errorCode = DPEDMA_linkParamSets(handle, param, linkChId0)) != SystemP_SUCCESS) { goto exit; } if ((errorCode = DPEDMA_linkParamSets(handle, linkChId0, linkChId1)) != SystemP_SUCCESS) { goto exit; } if ((errorCode = DPEDMA_linkParamSets(handle, linkChId1, linkChId0)) != SystemP_SUCCESS) { goto exit; } /* Bring in the first shadow param set */ retVal = EDMAEnableTransferRegion(baseAddr, regionId, dmaCh, EDMA_TRIG_MODE_MANUAL); if(isEventTriggered) { retVal = EDMAEnableTransferRegion(baseAddr, regionId, dmaCh, EDMA_TRIG_MODE_EVENT); } if (retVal != TRUE) { errorCode = DPU_RANGEPROCHWA_EINTERNAL; goto exit; } /*************************************************/ /* Generate Hot Signature to trigger Ping/Pong paramset */ /*************************************************/ if (rangeProcObj->params.numDopplerChirpsPerFrame > 1) { errorCode = DPEDMAHWA_configTwoHotSignature(handle, &pHwConfig->edmaInCfg.dataInSignature, rangeProcObj->initParms.hwaHandle, rangeProcObj->dataInTrigger[0], rangeProcObj->dataInTrigger[1], false); } else { errorCode = DPEDMAHWA_configTwoHotSignature(handle, &pHwConfig->edmaInCfg.dataInSignature, rangeProcObj->initParms.hwaHandle, rangeProcObj->dataInTrigger[0], rangeProcObj->dataInTrigger[0], false); } if (errorCode != SystemP_SUCCESS) { goto exit; } exit: return(errorCode); }
。
。
问题 3 EDMA 通道
为了实现示例的数据管道结构、更需要 EDMA 通道。
我是否使用 mmw_res.h 中已定义但未使用的通道? EDMA_APPSS_TPCC_B_EVT_FREE_XX?
还是应该设置一些内容、以便将通道用于数据管道?
。
。
很抱歉代码级问题、 我尝试了几种实现方式、但数据未正确传输。
谢谢你。
此致、
JB.
您好、Cesar
因为我们为您分配了这个 E2E、所以我只是再次回答这些问题。
。
历史
-我想对 AWRL6432 实施线性干扰缓解插值。
-工具箱中有一个示例,但它适用于 xwr18/16xx 器件 (https://dev.ti.com/tirex/explore/node?node=A__AbYPV7C2tpFJ0YJLq--B2A__radar_toolbox__1AslXXD__LATEST)
-在 AWRL6432 中实现此示例需要添加和更改 EDMA。
。
问题 1: 是否可以在 xWRL6432 中实现该 x18/16xx 示例的结构?
这个 xwr18/16xx 示例
ADC 缓冲器 (Ping 和 Pong)->(中的 EDMA)->本地存储器中的 ADC 数据->(EDMA 管道)-> HWA 存储器
mmw_demo (xWRL6432)、
ADC 缓冲器 (Ping 和 Pong) x 2 ->(EDMA)-> HWA 存储器
将 用于循环的“ADC 缓冲器 (Ping 和 Pong) x 2“表示 为我设置 EDMA 通道、函数、链接等、这会引起混淆。
。
。
问题 2: 如何 在 xWRL6432 ADC 数据源 EDMA 结构中使用 transferCompletionCallbackFxn?
我对添加 transferCompletionCallbackFxn 有疑问。
使用 DPEDMA_syncABCfg 参数和 DPEDMA_configSyncAB 函数时、
transferCompletionCallbackFxn 可如此使用。(工具箱中的 xwr18/16xx 干扰缓解示例代码)
。
以下代码是 xWRL6432 mmw_demo、即从 ADC 缓冲器到 HWA 存储器的 ADC 数据输入代码。
我找不到任何对应的 API。 如何在此 EDMA 传输结构中添加 transferCompletionCallbackFxn?
/** * @b Description * @n * EDMA configuration for rangeProc data in when EDMA is used to copy data from * ADCBuf to HWA memory * * @param[in] rangeProcObj Pointer to rangeProc object handle * @param[in] pHwConfig Pointer to rangeProc hardware resources * * \ingroup DPU_RANGEPROC_INTERNAL_FUNCTION * * @retval * Success - 0 * @retval * Error - <0 */ static int32_t rangeProcHWA_ConfigEDMA_DataIn ( rangeProcHWAObj *rangeProcObj, DPU_RangeProcHWA_HW_Resources *pHwConfig ) { int32_t errorCode = SystemP_SUCCESS; bool retVal; EDMA_Handle handle = rangeProcObj->edmaHandle; uint16_t bytePerRxChan; rangeProc_dpParams *DPParams= &rangeProcObj->params; uint32_t dmaCh, tcc, param, chType; bool isEventTriggered; int32_t idx, numParamSets; uint32_t hwaInpBuff[2]; uint32_t baseAddr, regionId; EDMACCPaRAMEntry shadowParam; //paramCfg uint32_t linkChId0, linkChId1; baseAddr = EDMA_getBaseAddr(handle); DebugP_assert(baseAddr != 0); regionId = EDMA_getRegionId(handle); DebugP_assert(regionId < SOC_EDMA_NUM_REGIONS); /* Get rangeProc Configuration */ handle = rangeProcObj->edmaHandle; chType = EDMA_CHANNEL_TYPE_DMA; dmaCh = pHwConfig->edmaInCfg.dataIn.channel; param = pHwConfig->edmaInCfg.dataIn.channel; tcc = pHwConfig->edmaInCfg.dataInSignature.channel; isEventTriggered = true; /* Config Dummy channel and paramset */ errorCode = DPEDMA_configDummyChannel(handle, chType, &dmaCh, &tcc, ¶m); if (errorCode != SystemP_SUCCESS) { goto exit; } //real ADC samples only supported bytePerRxChan = DPParams->numAdcSamples * DPParams->numRxAntennas * sizeof(uint16_t); numParamSets = 2; /* ping and pong path */ hwaInpBuff[0] = rangeProcObj->hwaMemBankAddr[0]; hwaInpBuff[1] = rangeProcObj->hwaMemBankAddr[1]; /* Get LinkChan from configuraiton */ linkChId0 = pHwConfig->edmaInCfg.dataIn.channelShadow[0]; allocateEDMAShadowChannel(handle, &linkChId0); linkChId1 = pHwConfig->edmaInCfg.dataIn.channelShadow[1]; allocateEDMAShadowChannel(handle, &linkChId1); /* Program Shadow Param Sets */ EDMACCPaRAMEntry_init(&shadowParam); for (idx = 0; idx < numParamSets; idx++) { memset(&shadowParam, 0, sizeof(EDMACCPaRAMEntry)); shadowParam.srcAddr = (uint32_t) SOC_virtToPhy(rangeProcObj->ADCdataBuf); if (rangeProcObj->params.numDopplerChirpsPerFrame > 1) { shadowParam.destAddr = (uint32_t) hwaInpBuff[idx]; } else { shadowParam.destAddr = (uint32_t) hwaInpBuff[0]; } shadowParam.aCnt = bytePerRxChan; shadowParam.bCnt = 1; shadowParam.cCnt = DPParams->numTxAntennas; /* ADC ping/pong, (two chirps) */ shadowParam.bCntReload = shadowParam.bCnt; shadowParam.srcBIdx = 0; shadowParam.destBIdx = 0; shadowParam.srcCIdx = 0; shadowParam.destCIdx = (uint32_t)rangeProcObj->rxChanOffset * DPParams->numRxAntennas; shadowParam.opt |= (EDMA_OPT_TCCHEN_MASK | ((((uint32_t)tcc) << EDMA_OPT_TCC_SHIFT) & EDMA_OPT_TCC_MASK) | ((((uint32_t)EDMA_SYNC_AB) << EDMA_OPT_SYNCDIM_SHIFT) & EDMA_OPT_SYNCDIM_MASK)); EDMASetPaRAM(baseAddr, pHwConfig->edmaInCfg.dataIn.channelShadow[idx], &shadowParam); } /* Link 2 shadow Param sets */ if ((errorCode = DPEDMA_linkParamSets(handle, param, linkChId0)) != SystemP_SUCCESS) { goto exit; } if ((errorCode = DPEDMA_linkParamSets(handle, linkChId0, linkChId1)) != SystemP_SUCCESS) { goto exit; } if ((errorCode = DPEDMA_linkParamSets(handle, linkChId1, linkChId0)) != SystemP_SUCCESS) { goto exit; } /* Bring in the first shadow param set */ retVal = EDMAEnableTransferRegion(baseAddr, regionId, dmaCh, EDMA_TRIG_MODE_MANUAL); if(isEventTriggered) { retVal = EDMAEnableTransferRegion(baseAddr, regionId, dmaCh, EDMA_TRIG_MODE_EVENT); } if (retVal != TRUE) { errorCode = DPU_RANGEPROCHWA_EINTERNAL; goto exit; } /*************************************************/ /* Generate Hot Signature to trigger Ping/Pong paramset */ /*************************************************/ if (rangeProcObj->params.numDopplerChirpsPerFrame > 1) { errorCode = DPEDMAHWA_configTwoHotSignature(handle, &pHwConfig->edmaInCfg.dataInSignature, rangeProcObj->initParms.hwaHandle, rangeProcObj->dataInTrigger[0], rangeProcObj->dataInTrigger[1], false); } else { errorCode = DPEDMAHWA_configTwoHotSignature(handle, &pHwConfig->edmaInCfg.dataInSignature, rangeProcObj->initParms.hwaHandle, rangeProcObj->dataInTrigger[0], rangeProcObj->dataInTrigger[0], false); } if (errorCode != SystemP_SUCCESS) { goto exit; } exit: return(errorCode); }
。
。
问题 3 EDMA 通道
为了实现示例的数据管道结构、更需要 EDMA 通道。
我是否使用 mmw_res.h 中已定义但未使用的通道? EDMA_APPSS_TPCC_B_EVT_FREE_XX?
还是应该设置一些内容、以便将通道用于数据管道?
。
。
很抱歉代码级问题、 我尝试了几种实现方式、但数据未正确传输。
谢谢你。
此致、
JB.
您好、
Q1. 是否可以在 xWRL6432 中实现这个 x18/16xx 示例的结构?
从理论上讲、这是可能的。 但是、这将增加所需的线性调频脉冲处理时间。
在开始实施此功能之前、您需要确保有足够的时间支持此功能。
使用 HWA 进行 1D FFT 处理的持续时间可根据 ADC 样本数进行估算。 更多信息、请参阅 TRM 中的 HWA 一章。
只有在您确定有足够的时间进行额外处理后、您才应继续执行实施分析。
实现分析的第一步是创建一个显示 EDMA 传输的方框图。 该方框图应显示使用的所有 EDMA 通道(用于乒乓链接,链接...)
对于每次 EDMA 传输、您需要了解使用哪种类型的同步、启用哪些中断、如何触发传输...
只有在详细了解这一点后、您才应继续进行代码实现
Q2. 如何 在 xWRL6432 ADC 数据 EDMA 结构中使用 transferCompletionCallbackFxn?[/quot]此问题与代码实现有关。 如上所述、您只应在完成实施分析后才关注实施情况
您可以查看“rangeProcHWA_ConfigEDMA_DataOut"以“以获取有关如何添加 transferCompletionCallbackFxn 的示例
q3. 关于 EDMA 通道您是对的。 您将需要使用演示未使用的新 EDMA 通道。
谢谢你
Cesar
[/quote]
您好、Cesar
感谢您的答复、我还有其他问题。
。
问题 1: 是否可以在 xWRL6432 中实现这个 xwr18/16xx 示例的结构?
=>我正在检查它。
。
问题 2: 如何 在 xWRL6432 ADC 数据源 EDMA 结构中使用 transferCompletionCallbackFxn?
此问题与代码实现有关。 如上所述、您只应在完成实施分析后才关注实施情况
您可以查看“rangeProcHWA_ConfigEDMA_DataOut"以“以获取有关如何添加 transferCompletionCallbackFxn 的示例
=> xwr18/16xx 的 rangeProcHWA_ConfigEDMA_DATAIN 和 AWRL6432 的 rangeProcHWA_ConfigEDMA_DataOut 使用“DPDMA_configSyncAB"实用“实用程序函数进行传输、它包括 transferCompletionCallbackFxn。
。
但是、 AWRL6432 的 rangeProcHWA_ConfigEDMA_DATAIN 未使用该函数。
如何 在 AWRL6432 EDMA_DATAIN 结构中实现 transferCompletionCallbackFxn?
它是否有函数或参数? 我找不到它。
您好、
您的观察结果是正确的。 默认的 rangeProcHWA_ConfigEDMA_DATAIN 不会初始化 CallbackFxn、因为它不需要它。
因此、您需要编写一个可以调用 rangeProcHWA_ConfigEDMA_Data In_Interference 的新函数。 此函数类似于 rangeProcHWA_ConfigEDMA_DATAIN、但您还将在此函数中添加回调 Fxn 的初始化、方式与在“rangeProcHWA_ConfigEDMA_DataOut"中“中完成的方式相同。
谢谢你
Cesar
您好、Cesar
感谢您的善意答复、 我在执行时有一个问题。
。
问:我是否必须无条件地使用 DPEDMA_configSyncAB 函数才能使用 CallbackFxn?
是否无法 将 CallbackFxn 添加到当前 AWRL6432 _datain 函数的 EDMA 传递结构中? (当前 AWRL6432 _datain 函数未使用 DPEDMA_configSyncAB 函数)
。
如果我的理解有误、请告诉我。
如我所知、每次 EDMA 传输都需要自己的 EDMA 通道。
在 RANGEProcHWA_ConfigEDMA_DataOut 中、
执行两次 EDMA 传输、每个通道从不同的地址传输输入数据。
。
但是、在 rangeProcHWA_ConfigEDMA_DATAIN 函数中、为了使用 DPEDMA_configSyncAB、需要两个不同的通道进行 ADC -> HWA 存储器传输、
但 chip_avail_IRQ 通道应用于 ADC 输入数据。
HWASS TPCC_B 事件映射仅定义一个用于 ADC 传输的 CHIP_AVAY_IRQ 通道。
当我创建两个通道来同时使用 DPEDMA_configSyncAB 功能和输入 chip_avail_IRQ 时、收到错误。
。
谢谢你。
此致、
JB.
您好、Cesar
。
您能检查一下我的理解和问题吗?
。
*在当前的 AWRL6432 和 xwr18xx/16xx 干扰缓解示例中、
- xwr18/16xx : 阈值 ADC 缓冲区传输、 使用 DPEDMA_configSyncAB、Channel - CHIRP_AVAY_IRQ
- AWRL6432 : 二 ADC 缓冲区传输、 不会 使用 DPEDMA_configSyncAB,通道 — CHIRP_AVAY_IRQ(定义的 HWASS TPCC_B 事件映射)
。
要实现以下 xwr18/16xx 示例、
。
AWRL6432 ADC 缓冲器传输结构不使用 DPEDMA_configSyncAB。
如果不使用 DPEDMA_configSyncAB、则无法在其结构中使用 CallbackFxn。
因此、应将其更改为使用 DPEDMA_configSyncAB 函数来使用 CallbackFxn。
问题 1: 是否正确理解?
。
。
2. AWRL6432 中有两次 ADC 缓冲传输。 这与 xwr18/16xx 不同。 因此、应使用 DPEDMA_configSyncAB 函数两次。 和传输通道也应为 2。
但是、对于 ADC 缓冲器传输、应使用 CHIRP_AVAY_IRQ 通道。
在此处、每个通道不能同时设置 CHIRP_AVAY_IRQ。 如果两个通道具有相同的通道、则发生错误。
。
我认为这是 AWRL6432 代码需要更改的阻塞点。
问题 2: 我应该如何在这种状态下实现它? 是否可以更改以使用 DPEDMA_configSyncAB 函数?
。
谢谢你。
此致、
JB.
您好、Cesar
。
非常感谢您花时间创建方框图。
一个 ADC 缓冲器具有 Ping/Pong 引脚。 我认为乒乓球不重要。 Matter 是 AWRL6432 中的两个 ADC 缓冲器传输。
如果您检查 AWRL6432 中的 rangeProcHWA_ConfigEDMA_DATAIN 函数、
这两个 ADC 缓冲器通过一个 for 环路传输。
您能检查一下我的理解和问题吗?
要实现以下 xwr18/16xx 示例、
。
AWRL6432 ADC 缓冲器传输结构不使用 DPEDMA_configSyncAB。
如果不使用 DPEDMA_configSyncAB、则无法在其结构中使用 CallbackFxn。
因此、应将其更改为使用 DPEDMA_configSyncAB 函数来使用 CallbackFxn。
问题 1: 是否正确理解?
。
。
2. AWRL6432 中有两次 ADC 缓冲传输。 这与 xwr18/16xx 不同。 因此、应使用 DPEDMA_configSyncAB 函数两次。 和传输通道也应为 2。
但是、对于 ADC 缓冲器传输、应使用 CHIRP_AVAY_IRQ 通道。
在此处、每个通道不能同时设置 CHIRP_AVAY_IRQ。 如果两个通道具有相同的通道、则发生错误。
。
我认为这是 AWRL6432 代码需要更改的阻塞点。
问题 2: 我应该如何在这种状态下实现它? 是否可以更改以使用 DPEDMA_configSyncAB 函数?
。
。
谢谢你。
此致、
JB.
您好、Cesar
。
两次 ADC 缓冲器传输是 AWRL6432 设计概念。
我认为改变原始架构存在一定的风险。
这就是为什么我问是否可以在当前的 AWRL6432 结构中实现 xwr18/16xx 示例的原因。
。
- AWRL6432 在架构上是两个 ADC 缓冲传输。
-若要使用 CallbackFxn、应更改 EDMA 结构以使用 DPEDMA_configSyncAB 函数。
-但使用 DPEDMA_configSyncAB 功能时,需要两个不同的通道进行两次传输,但 对于 ADC 缓冲器,通道应为 CHIRP_AVAY_IRQ。 发生错误。
该 xwr18/16xx 示例是否适用于 AWRL6432?
。
谢谢你。
此致、
JB.
AWRL6432 在架构上是两个 ADC 缓冲器传输。
是的。 这是为了将 ADC 缓冲器直接连接到 HWA。 但是、如果我们在 HWA 处理之前执行 ARM 处理、例如干扰插值示例中的情况、系统的效率会降低。 因为我们受到 ARM 处理的限制。 因此、使用 PING/Pong 缓冲器只有助于从 ADC 缓冲器传输到 ARM 存储器。
因此、当我建议不使用乒乓时、我正考虑将简化实施作为第一个阶段。 然后、作为第二个阶段、可以添加 Ping/Pong 来稍微提高性能。
xwr18/16xx 示例是否适用于 AWRL6432? [/报价]xwr18/16xx 在概念上适用于 AWRL6432、但需要了解需要进行的更改。 如果我们只是复制代码、这将不起作用。
我们需要先使用 AWRL6432 代码并针对此用例对其进行修改
谢谢你
Cesar
您好、Cesar
。
是的、由于架构不同、只复制是不可能的。
我很困惑。 我认为 ADC 缓冲器的乒乓操作无关紧要。
此事是 AWRL6432 的 ADC 缓冲器的两次传输。
xwr18/16xx 只传输了一个 ADC 缓冲区。
- ADC 缓冲器的 ping/pong 和 HWA 存储器的 ping/pong 是不同的。
。
在 xwr18/16xx 中、
一个 ADC 缓冲器 (PING+Pong) 传输到 HWA 存储器。 和
将 ADC 缓冲区传输到 HWA ping 存储器的 ping、
ADC 缓冲器的 Pong 传输到 HWA 的 Pong 存储器。
。
但在 AWRL6432 中、
两个 ADC 缓冲器传输到 HWA 存储器。 和
一个 ADC 缓冲器 (PING+Pong) 传输到 HWA ping 存储器、
另一个 ADC 缓冲器 (PING+Pong) 传输到 HBAG 存储器。
。
这是主要区别。
因此、对于使用 CallbackFxn、应使用 DPEDMA_configSyncAB 函数。
但对于使用 DPEDMA_configSyncAB 功能、 需要两个不同的通道进行两次传输、但 对于 ADC 缓冲器、通道应为 CHIRP_AVAY_IRQ。 发生错误。
。
你的意思是,我应该改变 2 ADC 缓冲器传输 AWRL6432 架构的全新演示 1 ADC 缓冲器传输 例如 xwr18/16xx。 对吗?
。
谢谢你。
此致、
JB.