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.

AM2732: Issues with hwa 1dfft hardware triggering

Part Number: AM2732


Tool/software:

I am configured as the above hardware trigger, but the NUMLOOPS DONE INTERRUPT of hwa does not work, I set numloop to 1 to enter the callback function, I use the following version library, is there any way to solve this problem? Or some information on how csi hardware triggers are used, thank you!

  • Hi Toly,

    Where did you get your code? AM273x MCU+ SDK or mmwave SDK?

    Where are the hwaCfg->dataInputMode, hwaCfg->hardwareTrigSrc, DPU_RangeProcHWA_InputMode_HWA_INTERNAL_MEM and DPC_OBJDET_HWA_HARDWARE_TRIGGER_SOURCE defined? I cannot find them in the MCU+ SDK

    If you are looking for the CSI hardware triggers, please check out the C:\ti\mcu_plus_sdk_am273x_09_02_00_52\source\drivers\hw_include\am273x\cslr_soc_defines.h:

    /***********************************************************************
    * HWA Hardware trigger source definitions
    ***********************************************************************/
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_0_LINE_END (0U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_1_LINE_END (1U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_2_LINE_END (2U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_3_LINE_END (3U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_4_LINE_END (4U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_5_LINE_END (5U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_6_LINE_END (6U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_7_LINE_END (7U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_FRAME_START_0 (8U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_FRAME_START_1 (9U)

    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_0_LINE_END (10U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_1_LINE_END (11U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_2_LINE_END (12U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_3_LINE_END (13U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_4_LINE_END (14U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_5_LINE_END (15U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_6_LINE_END (16U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_7_LINE_END (17U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_FRAME_START_0 (18U)
    #define HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_FRAME_START_1 (19U)

    Best regards,

    Ming

  • Hi Ming:

    I got this code from the following path:

    As shown below, I also configured the relevant csi trigger source:


    and the part of hwa configuration is also shown below:

    static int32_t rangeProcHWA_ConfigHWA(MmwDemo_DSS_MCB *DSS_MCB)
    {
    HWA_InterruptConfig paramISRConfig;
    int32_t errCode = 0;
    int32_t retVal = 0;
    uint32_t paramsetIdx = 0;
    uint32_t hwParamsetIdx;
    HWA_ParamConfig hwaParamCfg[DPU_RANGEPROCHWADDMA_NUM_HWA_PARAM_SETS];
    HWA_Handle hwaHandle;
    rangeProcHWACompressionCfg *pDPCompParams;
    rangeProc_dpParams *pDPParams;
    uint8_t index;

    uint8_t destChanPing;
    uint8_t destChanPong;

    hwaHandle = DSS_MCB->dataPathObj.hwaHandle;
    pDPParams = &DSS_MCB->StaticCfg_para.dpParams;
    pDPCompParams = &DSS_MCB->StaticCfg_para.compressionCfg;


    /* In interleave mode, only edmaOutCfgFmt is supported */
    retVal = HWA_getDMAChanIndex(hwaHandle, DPC_OBJDET_DPU_RANGEPROC_EDMAOUT_FMT1_PING_CH, &destChanPing);
    if (retVal != 0)
    {
    goto exit;
    }

    /* In interleave mode, only edmaOutCfgFmt is supported */
    retVal = HWA_getDMAChanIndex(hwaHandle, DPC_OBJDET_DPU_RANGEPROC_EDMAOUT_FMT1_PONG_CH, &destChanPong);
    if (retVal != 0)
    {
    goto exit;
    }


    memset(hwaParamCfg,0,sizeof(hwaParamCfg));

    hwParamsetIdx = DPC_OBJDET_DPU_RANGEPROC_PARAMSET_START_IDX;
    for(index = 0; index < DPU_RANGEPROCHWADDMA_NUM_HWA_PARAM_SETS; index++)
    {
    errCode = HWA_disableParamSetInterrupt(hwaHandle, index + DPC_OBJDET_DPU_RANGEPROC_PARAMSET_START_IDX,
    HWA_PARAMDONE_INTERRUPT_TYPE_CPU_INTR1 |HWA_PARAMDONE_INTERRUPT_TYPE_DMA);
    if (errCode != 0)
    {
    goto exit;
    }
    }

    /*************************/
    /* PING 1 DUMMY PARAMSET */
    /*************************/
    {
    hwaParamCfg[paramsetIdx].triggerMode = HWA_TRIG_MODE_DMA;
    hwaParamCfg[paramsetIdx].triggerSrc = hwParamsetIdx;
    hwaParamCfg[paramsetIdx].accelMode = HWA_ACCELMODE_NONE;

    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }
    }


    /************************************************/
    /* PING 1 INTERFERENCE MITIGATION, FFT PARAMSET */
    /************************************************/
    {{

    paramsetIdx++;
    hwParamsetIdx++;

    hwaParamCfg[paramsetIdx].triggerMode = HWA_TRIG_MODE_HARDWARE;
    hwaParamCfg[paramsetIdx].triggerSrc = HWA_HARDWARE_TRIGGER_SOURCE_CSI2A_CONTEXT_0_LINE_END;
    hwaParamCfg[paramsetIdx].accelMode = HWA_ACCELMODE_FFT;
    // hwaParamCfg[paramsetIdx].contextswitchCfg = HWA_PARAMSET_CONTEXTSWITCH_NONFORCE_ENABLE;

    /* PREPROC CONFIG */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.dcEstResetMode = HWA_DCEST_INTERFSUM_RESET_MODE_NOUPDATE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.dcSubEnable = HWA_FEATURE_BIT_DISABLE; /* Already done in previous paramset */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.complexMultiply.cmultMode = HWA_COMPLEX_MULTIPLY_MODE_DISABLE;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfStat.resetMode = HWA_DCEST_INTERFSUM_RESET_MODE_NOUPDATE;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfLocalize.thresholdEnable = HWA_FEATURE_BIT_DISABLE;//HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfLocalize.thresholdMode = HWA_INTERFTHRESH_MODE_MAGDIFF;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfLocalize.thresholdSelect = HWA_INTERFTHRESH_SELECT_EST_INDIVIDUAL;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.enable = HWA_FEATURE_BIT_DISABLE;//HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.countThreshold = 1;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.pathSelect = HWA_INTERFMITIGATION_PATH_WINDOWZEROOUT;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.leftHystOrder = 3;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.rightHystOrder = 3;

    /* ACCELMODE CONFIG (FFT) */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftEn = HWA_FEATURE_BIT_ENABLE;
    if(pDPParams->numFFTBins % 3 == 0){
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize = mathUtils_ceilLog2(pDPParams->numFFTBins/3);
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize3xEn = HWA_FEATURE_BIT_ENABLE;
    }
    else{
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize = mathUtils_ceilLog2(pDPParams->numFFTBins);
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize3xEn = HWA_FEATURE_BIT_DISABLE;
    }

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.butterflyScaling = 7; /* 1 << 3 - 1 */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.windowEn = HWA_FEATURE_BIT_DISABLE;//HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.windowStart = DSS_MCB->StaticCfg_para.RangeProcHWA_hwaCfg.hwaWinRamOffset;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.winSymm = HWA_FFT_WINDOW_SYMMETRIC;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.magLogEn = HWA_FFT_MODE_MAGNITUDE_LOG2_DISABLED;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.fftOutMode = HWA_FFT_MODE_OUTPUT_DEFAULT;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.complexMultiply.cmultMode = HWA_COMPLEX_MULTIPLY_MODE_DISABLE;

    /* SOURCE CONFIG */
    hwaParamCfg[paramsetIdx].source.srcAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_DCEST_PING_IN]);//DPU_RANGEHWADDMA_MEM_BANK_DCSUB_PING_OUT

    hwaParamCfg[paramsetIdx].source.srcAcnt = pDPParams->numAdcSamples - 1; /* this is samples - 1 */

    hwaParamCfg[paramsetIdx].source.srcAIdx = (pDPParams->numRxAntennas/2) * pDPParams->sizeOfInputSample;
    hwaParamCfg[paramsetIdx].source.srcBcnt = (pDPParams->numRxAntennas/2)-1;

    hwaParamCfg[paramsetIdx].source.srcBIdx = pDPParams->sizeOfInputSample;


    if(pDPParams->isReal)
    {
    hwaParamCfg[paramsetIdx].source.srcRealComplex = HWA_SAMPLES_FORMAT_REAL;
    }
    else
    {
    hwaParamCfg[paramsetIdx].source.srcRealComplex = HWA_SAMPLES_FORMAT_COMPLEX;
    }
    hwaParamCfg[paramsetIdx].source.srcWidth = HWA_SAMPLES_WIDTH_16BIT;
    hwaParamCfg[paramsetIdx].source.srcSign = HWA_SAMPLES_SIGNED;
    hwaParamCfg[paramsetIdx].source.srcConjugate = 0;
    hwaParamCfg[paramsetIdx].source.srcScale = 8;

    /* DEST CONFIG */
    hwaParamCfg[paramsetIdx].dest.dstAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_FFT_PING_OUT]);

    hwaParamCfg[paramsetIdx].dest.dstAcnt = DSS_MCB->StaticCfg_para.valid_numRangeBins-1;//800
    hwaParamCfg[paramsetIdx].dest.dstAIdx = pDPParams->numRxAntennas * sizeof(cmplx16ImRe_t);//8
    hwaParamCfg[paramsetIdx].dest.dstBIdx = sizeof(cmplx16ImRe_t);

    hwaParamCfg[paramsetIdx].dest.dstRealComplex = HWA_SAMPLES_FORMAT_COMPLEX;
    hwaParamCfg[paramsetIdx].dest.dstWidth = HWA_SAMPLES_WIDTH_16BIT;
    hwaParamCfg[paramsetIdx].dest.dstSign = HWA_SAMPLES_SIGNED;
    hwaParamCfg[paramsetIdx].dest.dstConjugate = HWA_FEATURE_BIT_DISABLE;
    hwaParamCfg[paramsetIdx].dest.dstScale = 0;
    hwaParamCfg[paramsetIdx].dest.dstSkipInit = 0;

    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }
    }}

    #ifdef CASCADE_EVM

    /************************************************/
    /* PING 2 INTERFERENCE MITIGATION, FFT PARAMSET */
    /************************************************/
    {{

    paramsetIdx++;
    hwParamsetIdx++;

    hwaParamCfg[paramsetIdx].triggerMode = HWA_TRIG_MODE_HARDWARE;
    hwaParamCfg[paramsetIdx].triggerSrc = HWA_HARDWARE_TRIGGER_SOURCE_CSI2B_CONTEXT_0_LINE_END;
    hwaParamCfg[paramsetIdx].accelMode = HWA_ACCELMODE_FFT;
    // hwaParamCfg[paramsetIdx].contextswitchCfg = HWA_PARAMSET_CONTEXTSWITCH_NONFORCE_ENABLE;

    /* PREPROC CONFIG */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.dcEstResetMode = HWA_DCEST_INTERFSUM_RESET_MODE_NOUPDATE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.dcSubEnable = HWA_FEATURE_BIT_DISABLE; /* Already done in previous paramset */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.complexMultiply.cmultMode = HWA_COMPLEX_MULTIPLY_MODE_DISABLE;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfStat.resetMode = HWA_DCEST_INTERFSUM_RESET_MODE_NOUPDATE;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfLocalize.thresholdEnable = HWA_FEATURE_BIT_DISABLE;//HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfLocalize.thresholdMode = HWA_INTERFTHRESH_MODE_MAGDIFF;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfLocalize.thresholdSelect = HWA_INTERFTHRESH_SELECT_EST_INDIVIDUAL;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.enable = HWA_FEATURE_BIT_DISABLE;//HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.countThreshold = 1;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.pathSelect = HWA_INTERFMITIGATION_PATH_WINDOWZEROOUT;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.leftHystOrder = 3;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.interfMitigation.rightHystOrder = 3;

    /* ACCELMODE CONFIG (FFT) */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftEn = HWA_FEATURE_BIT_ENABLE;
    if(pDPParams->numFFTBins % 3 == 0){
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize = mathUtils_ceilLog2(pDPParams->numFFTBins/3);
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize3xEn = HWA_FEATURE_BIT_ENABLE;
    }
    else{
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize = mathUtils_ceilLog2(pDPParams->numFFTBins);
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.fftSize3xEn = HWA_FEATURE_BIT_DISABLE;
    }

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.butterflyScaling = 7; /* 1 << 3 - 1 */
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.windowEn = HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.windowStart = DSS_MCB->StaticCfg_para.RangeProcHWA_hwaCfg.hwaWinRamOffset;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.winSymm = HWA_FFT_WINDOW_SYMMETRIC;

    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.magLogEn = HWA_FFT_MODE_MAGNITUDE_LOG2_DISABLED;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.postProcCfg.fftOutMode = HWA_FFT_MODE_OUTPUT_DEFAULT;
    hwaParamCfg[paramsetIdx].accelModeArgs.fftMode.preProcCfg.complexMultiply.cmultMode = HWA_COMPLEX_MULTIPLY_MODE_DISABLE;

    /* SOURCE CONFIG */
    hwaParamCfg[paramsetIdx].source.srcAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_DCEST_PING_1_IN]);//DPU_RANGEHWADDMA_MEM_BANK_DCSUB_PING_1_OUT
    hwaParamCfg[paramsetIdx].source.srcAcnt = pDPParams->numAdcSamples - 1; /* this is samples - 1 */
    hwaParamCfg[paramsetIdx].source.srcAIdx = (pDPParams->numRxAntennas/2) * pDPParams->sizeOfInputSample;
    hwaParamCfg[paramsetIdx].source.srcBcnt = (pDPParams->numRxAntennas/2)-1;
    hwaParamCfg[paramsetIdx].source.srcBIdx = pDPParams->sizeOfInputSample;


    if(pDPParams->isReal)
    {
    hwaParamCfg[paramsetIdx].source.srcRealComplex = HWA_SAMPLES_FORMAT_REAL;
    }
    else
    {
    hwaParamCfg[paramsetIdx].source.srcRealComplex = HWA_SAMPLES_FORMAT_COMPLEX;
    }
    hwaParamCfg[paramsetIdx].source.srcWidth = HWA_SAMPLES_WIDTH_16BIT;
    hwaParamCfg[paramsetIdx].source.srcSign = HWA_SAMPLES_SIGNED;
    hwaParamCfg[paramsetIdx].source.srcConjugate = 0;
    hwaParamCfg[paramsetIdx].source.srcScale = 8;

    /* DEST CONFIG */
    hwaParamCfg[paramsetIdx].dest.dstAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_FFT_PING_1_OUT]) + (pDPParams->numRxAntennas/2) * sizeof(cmplx16ImRe_t);
    hwaParamCfg[paramsetIdx].dest.dstAcnt = DSS_MCB->StaticCfg_para.valid_numRangeBins-1;//800
    hwaParamCfg[paramsetIdx].dest.dstAIdx = (pDPParams->numRxAntennas) * sizeof(cmplx16ImRe_t);
    hwaParamCfg[paramsetIdx].dest.dstBIdx = sizeof(cmplx16ImRe_t);

    hwaParamCfg[paramsetIdx].dest.dstRealComplex = HWA_SAMPLES_FORMAT_COMPLEX;
    hwaParamCfg[paramsetIdx].dest.dstWidth = HWA_SAMPLES_WIDTH_16BIT;
    hwaParamCfg[paramsetIdx].dest.dstSign = HWA_SAMPLES_SIGNED;
    hwaParamCfg[paramsetIdx].dest.dstConjugate = HWA_FEATURE_BIT_DISABLE;
    hwaParamCfg[paramsetIdx].dest.dstScale = 0;
    hwaParamCfg[paramsetIdx].dest.dstSkipInit = 0;

    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }
    }}
    #endif

    #if 1
    /*****************************/
    /* PING COMPRESSION PARAMSET */
    /*****************************/
    {{
    paramsetIdx++;
    hwParamsetIdx++;

    hwaParamCfg[paramsetIdx].triggerMode = HWA_TRIG_MODE_IMMEDIATE;
    hwaParamCfg[paramsetIdx].accelMode = HWA_ACCELMODE_COMPRESS;

    /* ACCELMODE CONFIG */
    hwaParamCfg[paramsetIdx].accelModeArgs.compressMode.ditherEnable = HWA_FEATURE_BIT_ENABLE; // Enable dither to suppress quantization spurs
    hwaParamCfg[paramsetIdx].accelModeArgs.compressMode.compressDecompress = HWA_CMP_DCMP_COMPRESS;
    hwaParamCfg[paramsetIdx].accelModeArgs.compressMode.method = pDPCompParams->compressionMethod;
    hwaParamCfg[paramsetIdx].accelModeArgs.compressMode.passSelect = HWA_COMPRESS_PATHSELECT_BOTHPASSES;
    hwaParamCfg[paramsetIdx].accelModeArgs.compressMode.headerEnable = HWA_FEATURE_BIT_ENABLE;
    hwaParamCfg[paramsetIdx].accelModeArgs.compressMode.scaleFactorBW = 4; //log2(sample bits)


    /* SRC CONFIG */
    hwaParamCfg[paramsetIdx].source.srcAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_FFT_PING_1_OUT]);

    hwaParamCfg[paramsetIdx].source.srcRealComplex = HWA_SAMPLES_FORMAT_COMPLEX;
    hwaParamCfg[paramsetIdx].source.srcWidth = HWA_SAMPLES_WIDTH_16BIT;
    hwaParamCfg[paramsetIdx].source.srcSign = HWA_SAMPLES_SIGNED;
    hwaParamCfg[paramsetIdx].source.srcConjugate = HWA_FEATURE_BIT_DISABLE;
    hwaParamCfg[paramsetIdx].source.srcScale = 8;

    /* DEST CONFIG */
    hwaParamCfg[paramsetIdx].dest.dstAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_COMP_PING_OUT]);
    hwaParamCfg[paramsetIdx].dest.dstRealComplex = HWA_SAMPLES_FORMAT_COMPLEX;
    hwaParamCfg[paramsetIdx].dest.dstWidth = HWA_SAMPLES_WIDTH_16BIT; /* 16 bit real, 16 bit imag */
    hwaParamCfg[paramsetIdx].dest.dstSign = HWA_SAMPLES_UNSIGNED;
    hwaParamCfg[paramsetIdx].dest.dstConjugate = HWA_FEATURE_BIT_DISABLE;
    hwaParamCfg[paramsetIdx].dest.dstScale = 0;
    hwaParamCfg[paramsetIdx].dest.dstSkipInit = 0;


    {
    /*********************************/
    /* PING EGE COMPRESSION PARAMSET */
    /*********************************/
    hwaParamCfg[paramsetIdx].accelModeArgs.compressMode.EGEKarrayLength = 3; //log2(8)

    /* SRC CONFIG */
    hwaParamCfg[paramsetIdx].source.srcAcnt = pDPCompParams->inputSamplesPerBlock - 1;//8rx*16rangebin
    hwaParamCfg[paramsetIdx].source.srcAIdx = pDPCompParams->bytesPerSample;//4
    hwaParamCfg[paramsetIdx].source.srcBcnt = pDPCompParams->numBlocks - 1;//50
    hwaParamCfg[paramsetIdx].source.srcBIdx = pDPCompParams->inputBytesPerBlock;//4bytes*8rx*16range

    /* DEST CONFIG */
    hwaParamCfg[paramsetIdx].dest.dstAcnt = pDPCompParams->outputSamplesPerBlock - 1;
    hwaParamCfg[paramsetIdx].dest.dstAIdx = pDPCompParams->bytesPerSample;
    hwaParamCfg[paramsetIdx].dest.dstBIdx = pDPCompParams->outputBytesPerBlock;

    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }
    }

    /* enable the DMA hookup to this paramset so that data gets copied out */
    paramISRConfig.interruptTypeFlag = HWA_PARAMDONE_INTERRUPT_TYPE_DMA;
    paramISRConfig.dma.dstChannel = destChanPing;

    errCode = HWA_enableParamSetInterrupt(hwaHandle,hwParamsetIdx,&paramISRConfig);
    if (errCode != 0)
    {
    goto exit;
    }
    }}
    #endif
    /*************************/
    /* PONG 1 DUMMY PARAMSET */
    /*************************/
    {
    paramsetIdx++;
    hwParamsetIdx++;

    hwaParamCfg[paramsetIdx].triggerMode = HWA_TRIG_MODE_DMA;//HWA_TRIG_MODE_DMA;
    hwaParamCfg[paramsetIdx].triggerSrc = hwParamsetIdx;
    hwaParamCfg[paramsetIdx].accelMode = HWA_ACCELMODE_NONE;
    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }
    }


    /************************************************/
    /* PONG 1 INTERFERENCE MITIGATION, FFT PARAMSET */
    /************************************************/
    {
    paramsetIdx++;
    hwParamsetIdx++;
    hwaParamCfg[paramsetIdx] = hwaParamCfg[1];
    hwaParamCfg[paramsetIdx].source.srcAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_DCEST_PONG_IN]);//DPU_RANGEHWADDMA_MEM_BANK_DCSUB_PONG_OUT
    hwaParamCfg[paramsetIdx].dest.dstAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_FFT_PONG_OUT]);

    if(DSS_MCB->StaticCfg_para.dataInputMode != DPU_RangeProcHWA_InputMode_HWA_INTERNAL_MEM)
    {
    hwaParamCfg[paramsetIdx].triggerSrc = hwParamsetIdx;
    }

    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }
    }

    #ifdef CASCADE_EVM

    /************************************************/
    /* PONG 2 INTERFERENCE MITIGATION, FFT PARAMSET */
    /************************************************/
    {
    paramsetIdx++;
    hwParamsetIdx++;
    hwaParamCfg[paramsetIdx] = hwaParamCfg[2];
    hwaParamCfg[paramsetIdx].source.srcAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_DCEST_PONG_1_IN]);//DPU_RANGEHWADDMA_MEM_BANK_DCSUB_PONG_OUT
    hwaParamCfg[paramsetIdx].dest.dstAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_FFT_PONG_1_OUT]) + (pDPParams->numRxAntennas/2) * sizeof(cmplx16ImRe_t);

    if(DSS_MCB->StaticCfg_para.dataInputMode != DPU_RangeProcHWA_InputMode_HWA_INTERNAL_MEM)
    {
    hwaParamCfg[paramsetIdx].triggerSrc = hwParamsetIdx;
    }

    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }
    }
    #endif

    #if 1
    /*****************************/
    /* PONG COMPRESSION PARAMSET */
    /*****************************/
    {
    paramsetIdx++;
    hwParamsetIdx++;
    hwaParamCfg[paramsetIdx] = hwaParamCfg[3];
    hwaParamCfg[paramsetIdx].source.srcAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_FFT_PONG_1_OUT]);
    hwaParamCfg[paramsetIdx].dest.dstAddr = HWADRV_ADDR_TRANSLATE_CPU_TO_HWA(DSS_MCB->StaticCfg_para.hwaMemBankAddr[DPU_RANGEHWADDMA_MEM_BANK_COMP_PONG_1_OUT]);

    if(DSS_MCB->StaticCfg_para.dataInputMode != DPU_RangeProcHWA_InputMode_HWA_INTERNAL_MEM)
    {
    hwaParamCfg[paramsetIdx].triggerSrc = hwParamsetIdx;
    }

    errCode = HWA_configParamSet(hwaHandle,
    hwParamsetIdx,
    &hwaParamCfg[paramsetIdx],NULL);
    if (errCode != 0)
    {
    goto exit;
    }


    /* Enable the DMA hookup to this paramset so that data gets copied out */
    paramISRConfig.interruptTypeFlag = HWA_PARAMDONE_INTERRUPT_TYPE_DMA;
    paramISRConfig.dma.dstChannel = destChanPong;
    errCode = HWA_enableParamSetInterrupt(hwaHandle,
    hwParamsetIdx,
    &paramISRConfig);
    if (errCode != 0)
    {
    goto exit;
    }
    }
    #endif

    exit:
    return(errCode);
    }

    If my hwa reaches the value set by loopnums as expected, the interrupt shown by the arrow will be triggered, but the current situation is not triggered, after trying, the callback will only be triggered when loopnum = 1, I am worried that I misunderstood the triggering principle of csi. Please check if there are any logical problems. Thank you



    Best regards,

    Toly

  • Hi Toly,

    Since it is  mmwave SDK related question, I will forward this thread to the mmwave SDK team for further help.

    Best regards,

    Ming

  • Hi Ming,

    The problem has been resolved, thank you!

    Best regards,

    Toly