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.

AWR1843BOOST: HWA configuration for Doppler Proc DPU

Part Number: AWR1843BOOST
Other Parts Discussed in Thread: AWR1843

Hi, I'm trying to run the mmwave object detection Doppler DPU on the AWR1843 HWA (mmwave_sdk_03_03_00_03). I've configured the EDMA as follows in DPC_ObjDet_dopplerConfig() which thereafter calls DPU_DopplerProcHWA_config()

  // EDMA handle
  edmaCfg->edmaHandle = edmaHandle;

  /* edmaIn - ping */
  edmaCfg->edmaIn.ping.channel = DPC_OBJDET_DPU_DOPPLERPROC_EDMAIN_PING_CH;
  edmaCfg->edmaIn.ping.channelShadow =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAIN_PING_SHADOW;
  edmaCfg->edmaIn.ping.eventQueue =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAIN_PING_EVENT_QUE;

  /* edmaIn - pong */
  edmaCfg->edmaIn.pong.channel = DPC_OBJDET_DPU_DOPPLERPROC_EDMAIN_PONG_CH;
  edmaCfg->edmaIn.pong.channelShadow =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAIN_PONG_SHADOW;
  edmaCfg->edmaIn.pong.eventQueue =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAIN_PONG_EVENT_QUE;

  /* edmaOut - ping */
  edmaCfg->edmaOut.ping.channel = DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PING_CH;
  edmaCfg->edmaOut.ping.channelShadow =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PING_SHADOW;
  edmaCfg->edmaOut.ping.eventQueue =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PING_EVENT_QUE;

  /* edmaOut - pong */
  edmaCfg->edmaOut.pong.channel = DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PONG_CH;
  edmaCfg->edmaOut.pong.channelShadow =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PONG_SHADOW;
  edmaCfg->edmaOut.pong.eventQueue =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PONG_EVENT_QUE;

  /* edmaHotSig - ping */
  edmaCfg->edmaHotSig.ping.channel =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMA_PING_SIG_CH;
  edmaCfg->edmaHotSig.ping.channelShadow =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMA_PING_SIG_SHADOW;
  edmaCfg->edmaHotSig.ping.eventQueue =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMA_PING_SIG_EVENT_QUE;

  /* edmaHotSig - pong */
  edmaCfg->edmaHotSig.pong.channel =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMA_PONG_SIG_CH;
  edmaCfg->edmaHotSig.pong.channelShadow =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMA_PONG_SIG_SHADOW;
  edmaCfg->edmaHotSig.pong.eventQueue =
      DPC_OBJDET_DPU_DOPPLERPROC_EDMA_PONG_SIG_EVENT_QUE;

  /* hwaCfg */
  hwaCfg->numParamSets = 2 * staticCfg->numTxAntennas + 2;
  hwaCfg->paramSetStartIdx = DPC_OBJDET_DPU_DOPPLERPROC_PARAMSET_START_IDX;
However during the configuration, in DPU_DopplerProcHWA_configHwa(), it fails when calling HWA_getDMAChanIndex() by returning a HWA_EINVAL as it cannot find a DMA destination index with the given EDMA channel number:
retVal = HWA_getDMAChanIndex(
      obj->hwaHandle, cfg->hwRes.edmaCfg.edmaOut.ping.channel, &destChan);
  if (retVal != 0) {
    goto exit;
  }
After debugging, it seems it's because edmaOut.ping.channel = DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PING_CH, which resolves to a value of EDMA_TPCC0_REQ_FREE_6 (15U) whereas gHwaEDMAChanMapping uses EDMA channels beginning from EDMA_TPCC0_REQ_HWACC_0 (17U) onwards. Thus a legitimate mapping doesn't seem to exist in the provided TI code.
uint8_t gHwaEDMAChanMapping [16] =
{
EDMA_TPCC0_REQ_HWACC_0,
EDMA_TPCC0_REQ_HWACC_1,
EDMA_TPCC0_REQ_HWACC_2,
EDMA_TPCC0_REQ_HWACC_3,
EDMA_TPCC0_REQ_HWACC_4,
EDMA_TPCC0_REQ_HWACC_5,
EDMA_TPCC0_REQ_HWACC_6,
EDMA_TPCC0_REQ_HWACC_7,
EDMA_TPCC0_REQ_HWACC_8,
EDMA_TPCC0_REQ_HWACC_9,
EDMA_TPCC0_REQ_HWACC_10,
EDMA_TPCC0_REQ_HWACC_11,
EDMA_TPCC0_REQ_HWACC_12,
EDMA_TPCC0_REQ_HWACC_13,
EDMA_TPCC0_REQ_HWACC_14,
EDMA_TPCC0_REQ_HWACC_15
};
Could you please clarify if there's a mistake in my configuration or shed some light on why the call to HWA_getDMAChanIndex() is failing?
Thanks,
Saeejith
  • Hi Saeejith,

    This is not a bug. The HWA can only trigger one of the 16 channels: EDMA_TPCC0_REQ_HWACC_<0-15> that you mentioned above.

     

    I can see in the mmw_res.h file for the OOB demo that DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PING_CH is set to EDMA_TPCC0_REQ_HWACC_2 (=19), which will work fine.

    The dopplerprochwa testcase also sets DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PING_CH to the same.

    The next step would be for you to find out why DPC_OBJDET_DPU_DOPPLERPROC_EDMAOUT_PING_CH is set to EDMA_TPCC0_REQ_FREE_6 in your case. If you have made some modifications, you would need to ensure that this channel is EDMA_TPCC0_REQ_HWACC_<0-15>.

    Regards,

    Aayush