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.

[参考译文] AWRL6432BOOST:xWRL6432 的干扰内插示例

Guru**** 2366870 points
Other Parts Discussed in Thread: AWRL6432
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1513745/awrl6432boost-interference-interpolation-example-for-xwrl6432

器件型号:AWRL6432BOOST
Thread 中讨论的其他器件:AWRL6432

工具/软件:

大家好、TI 专家。

xWRL6432 使用 HWA1.2。

HWA1.2 具有针对干扰的零输出功能。 正如我所检查的、HWA2.0 具有更多的干扰特性、例如内插。

是否有任何方法可以对 xWRL6432 应用干扰插值?

或者任何 xWRL6432 示例?

谢谢你。

此致、

JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、JB:

    您是否在寻找 xWRL6432 基于零输出的干扰缓解方法?   

    此致、

    Zigang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Zigang  

    我正在寻找基于线性插值的 xWRL6432 干扰缓解。

    HWA1.2 仅支持归零。

    HWA2.0 支持使用窗口和线性插值进行归零、归零。

    是否可以对 xWRL6432 应用线性插值? 是否有任何示例或参考?

    谢谢你。

    此致、

    JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    JB:

    让我做一些研究,并在下周初回到你身边。

    此致、

    Zigang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Zigang

    请。 感谢你的帮助。

    此致、

    JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、JB:

    我们无法在采用 HWA 1.2 的器件中使用 HWA 2.0。   如果您考虑使用不同的器件、请告诉我。

    我将进行进一步检查、以查看之前是否有任何用于实施干扰缓解的软件示例。  找到答案后、我会立即回复您。

    此致、

    Zigang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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, &param);
    
        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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Zigang

    E2E 已被锁定一段时间。  “回复“按钮似乎已消失。

    可以打开这个 e2e 吗? 还是继续这个 e2e 中的讨论?

    谢谢你。

    此致、

    JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、JB:

    我已经要求 e2e 所有者为您打开它。

    此致、

    Zigang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Zigang

    它还没有打开。 请检查一下。

    谢谢你。

    此致、

    JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、JB:

    我们的 EDMA/HWA 专家即将休假、将在下周结束时回来。  

    此致、

    Zigang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Zigang

    如果专家回来、您可以检查 e2e 是否开放?

    谢谢你。

    此致、

    JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、JB:

    我刚刚给我们的专家发了另一封信。   

    此致、

    Zigang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    线程是否仍然锁定?

    谢谢你
    Cesar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Cesar

    点击了 Resolve(解析)按钮。

    是的。 它仍然被锁定。

    您能否回答我在这个 e2e 中的问题?

    谢谢你。  

    此致、

    JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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, &param);
    
        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.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Zigang

    您能检查该主题的状态吗?

    仍然锁定。

    自从我发布问题以来已经有 3 周了...

    我是否在这个 e2e 中等待 Cesar 的回答?

    感谢你的帮助。

    此致、

    JB.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、JB:

    因为另一个 e2e 线程以某种方式标记为已解决。 Cesar 无法解锁。  我刚刚将这个 e2e 分配给 Cesar、以便他现在看到您的回复并继续讨论。   感谢您的耐心。

    此致、

    Zigang

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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, &param);
    
        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?

    它是否有函数或参数? 我找不到它。

    谢谢你。
    此致、
    JB.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您的观察结果是正确的。 默认的  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.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您是对的。 每次 EDMA 传输都需要一个 EDMA 通道。

    此外、每个 EDMA 通道都必须配置 SyncA 或 SyncAB。

    EDMA3 培训显示、每次 EDMA 传输都可以在传输完成时触发中断。 这与 SyncA 或 SyncAB 配置无关。  

    我将在下周提供更多信息

    谢谢你
    Cesar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我创建了一个系统方框图、以帮助进行讨论。 此时无需实现 ping/pong、我们只考虑一个缓冲器 (ping)

    您可以使用 SyncAB、如图所示

    谢谢你
    Cesar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我想我们应该仅为 EDMA_Interf_IN 使用一个通道。 如果需要、可以将其配置为 SyncAB。

    由于我们一次只执行一个传输、因此我们也可以使用 SyncA 进行配置、因为没有区别。 所执行的转移。

    如您所见、也可以使用“DPEDMA_configSyncA()",“,它、它包括一个 callBackFxn 初始化

    谢谢你
    Cesar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、

    我想不使用 Ping/Pong。 一次传输。 这是更简单的,将帮助您更好地理解 EDMA 传输

    谢谢你
    Cesar