Other Parts Discussed in Thread: MMWCAS-RF-EVM
Hi Team,
I'm using the MMWCAS-DSP-EVM board together with the MMWCAS-RF-EVM in cascade mimo configuration and running a modified version of the "cascade radar object detect" use-case.
I've noticed that sometimes after powering the board and booting, the chain doesn't start after calling "chains_cascadeRadarOd_StartApp(&chainsObj);" function.
The function returns correctly and the execution on IPU1_0 continues normally, but seems that DSP just doesn't start (the AlgorithmFxn_RadarDspCascadeMimoProcess() function is not called).
Network Tx link works good and remains waiting for DSP message but nothing is received.
The particular situation only happens sometimes after powering the board, if I simply stop and start again the chain, everything works good (or even if I call the cold reset function). In other words, it happens only in the first execution after power-up the board.
I've already tried to add a big delay before calling the "chains_cascadeRadarOd_Create(&chainsObj.ucObj, &chainsObj);" function but the problem still persist.
Below you have my implementation:
Void Chains_cascadeRadarOd(Chains_Ctrl *chainsCfg) { chain_state = CASCADE_RADAR_NOT_READY; chainStart = FALSE; chainDone = FALSE; Chains_cascadeRadarOdAppObj chainsObj; chainsObj.chainsCfg = chainsCfg; // Range-FFT parameters configuration chainsObj.ucObj.Alg_RadarProcess_fft1Prm = (AlgorithmLink_RadarProcessCreateParams *)&chainsObj.radarFftParams1; chainsObj.ucObj.Alg_RadarProcess_fft2Prm = (AlgorithmLink_RadarProcessCreateParams *)&chainsObj.radarFftParams2; chainsObj.ucObj.Alg_RadarProcess_fft3Prm = (AlgorithmLink_RadarProcessCreateParams *)&chainsObj.radarFftParams3; chainsObj.ucObj.Alg_RadarProcess_fft4Prm = (AlgorithmLink_RadarProcessCreateParams *)&chainsObj.radarFftParams4; // Object-detection parameters configuration chainsObj.ucObj.Alg_RadarProcess_objectDetectPrm = (AlgorithmLink_RadarProcessCreateParams *)&chainsObj.radarDspOdParams; /* Create links */ chains_cascadeRadarOd_Create(&chainsObj.ucObj, &chainsObj); //It takes a while chain_state = CASCADE_RADAR_READY; /* Wait for Start command */ volatile unsigned int i = 0; while (!chainStart) { BspOsal_sleep(1U); //1msec i++; //Do something to avoid compiler optimization } #ifdef GPIO_SYNCH2 /* Prepare GPIO to count sync signals */ AlgorithmFxn_RadarDspCascadeMimoControlParams ctrlPrms; ctrlPrms.baseClassControl.baseClassControl.size = sizeof(ctrlPrms); ctrlPrms.baseClassControl.controlCmd = ALGORITHM_LINK_RADAR_PROCESS_CONTROL_CMD; ctrlPrms.dspControlCmd = ALGORITHM_FXN_RADAR_DSP_PROCESS_CMD_SET_GPIO; ctrlPrms.syncGpioParam = ALGORITHMFXN_RADAR_DSP_PROCESS_INIT_SYNC_GPIO; System_linkControl( chainsObj.ucObj.Alg_RadarProcess_objectDetectLinkID, ALGORITHM_LINK_CMD_CONFIG, &ctrlPrms, sizeof(ctrlPrms), TRUE ); #endif /* Start app */ chains_cascadeRadarOd_StartApp(&chainsObj); Vps_printf(" CASCADE RADAR UC: Chain Started!!\n"); chain_state = CASCADE_RADAR_MEASURING; /* Wait for Stop command */ i = 0; do { BspOsal_sleep(10U); //10msec i++; //Do something to avoid compiler optimization } while(chainStart && !chainDone); /* Stop and delete app */ chains_cascadeRadarOd_StopAndDeleteApp(&chainsObj); Vps_printf(" CASCADE RADAR UC: Chain Stopped!!\n"); chain_state = CASCADE_RADAR_NOT_READY; }
Do you have some clue about what is happening here?
Regards,
Pablo.