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.

AWR2243: Converting Normal To Advanced Frame Configuration

Part Number: AWR2243

Hi AWR Team,

This is Khai from Metawave. I am creating a ticket here after our call with your team on 5/26/2020, The purpose is that Normal Frame Configuration of the AWR took too long of a latency. During the call, it was suggested to use Advanced Frame Config which we heard of but is a new concept to us. I would like to provide our radar mode configuration here from the Processor SDK perspective and hopefully someone on the AWR team can help translate that into Advance Frame Config. If a Call is needed to get to the bottom of this issue, We will set that up then. I will attached the source code that I have for AWR configuration here.

Thanks,

--Khai

/******************************************************************************
Copyright (c) [2018] Texas Instruments Incorporated

All rights reserved not granted herein.

Limited License.

 Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
 license under copyrights and patents it now or hereafter owns or controls to
 make,  have made, use, import, offer to sell and sell ("Utilize") this software
 subject to the terms herein.  With respect to the foregoing patent license,
 such license is granted  solely to the extent that any such patent is necessary
 to Utilize the software alone.  The patent license shall not apply to any
 combinations which include this software, other than combinations with devices
 manufactured by or for TI ("TI Devices").  No hardware patent is licensed
 hereunder.

 Redistributions must preserve existing copyright notices and reproduce this
 license (including the above copyright notice and the disclaimer and
 (if applicable) source code license limitations below) in the documentation
 and/or other materials provided with the distribution

 Redistribution and use in binary form, without modification, are permitted
 provided that the following conditions are met:

 * No reverse engineering, decompilation, or disassembly of this software
   is permitted with respect to any software provided in binary form.

 * Any redistribution and use are licensed by TI for use only with TI Devices.

 * Nothing shall obligate TI to provide you with source code for the software
   licensed and provided to you in object code.

 If software source code is provided to you, modification and redistribution of
 the source code are permitted provided that the following conditions are met:

 * Any redistribution and use of the source code, including any resulting
   derivative works, are licensed by TI for use only with TI Devices.

 * Any redistribution and use of any object code compiled from the source code
   and any resulting derivative works, are licensed by TI for use only with TI
   Devices.

 Neither the name of Texas Instruments Incorporated nor the names of its
 suppliers may be used to endorse or promote products derived from this software
 without specific prior written permission.

 DISCLAIMER.

 THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS OR
 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/

/**
 *  \file chains_common_cascade_ar12xx.c
 *
 *  \brief Cascade Radar sample application AR12xx configuration.
 */

/*******************************************************************************
 *  INCLUDE FILES
 *******************************************************************************
 */
#include <include/common/chains_radar.h>

/* ========================================================================== */
/*                           Macros & Typedefs                                */
/* ========================================================================== */

#define APP_NAME                        "CHAINS_COMMON_CASCADE"

/* Maximum Number of profiles which is possible from the AR device */
#define CHAINS_CASCADE_RADAR_MAX_PROFILES           (4U)
#define CHAINS_CASCADE_RADAR_MAX_MODES              CHAINS_CASCADE_RADAR_MAX_PROFILES
/* Name of the configuration used */
#define CHAINS_CASCADE_RADAR_CONFIG_NAME            "CASCADE_CONFIG"
#define CHAINS_CASCADE_RADAR_NUM_RX_ANTENNA         (4U)        // Khai: used to enable all 4 RX in a sensor
/* Total number of Txs across sensors that are chirped as part of TDM-MIMO */
#define CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA         (1U)        // Khai: use in Advanced Frame Config only
/** \brief Radar Sensor Height or Number of Chirps */
#define CHAINS_CASCADE_RADAR_RADAR_HEIGHT_64       (64U)        // Khai: use 128 doppler
#define CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128       (128U)      // Khai: use 128 doppler
#define CHAINS_CASCADE_RADAR_NUM_FRAMES             (0U)        // 0 = infinity Frames
#define CHAINS_CASCADE_RADAR_FRAME_PERIODICITY_MS   (10U)       // Khai: rel - 10ms, dbg - 20ms
#define CHAINS_CASCADE_RADAR_WIDTH_128              (128U)      // Khai: set range bin to 256
#define CHAINS_CASCADE_RADAR_WIDTH_256              (256U)      // Khai: set range bin to 256
// Khai: LRR Profile Config same as FUJI
//#define CHAINS_CASCADE_RADAR_SAMPLING_RATE_KSPS     (18750U)
//#define CHAINS_CASCADE_RADAR_ADC_START_TIME_IN_US   (4U)
//#define CHAINS_CASCADE_RADAR_IDLE_TIME_IN_US        (2U)
//#define CHAINS_CASCADE_RADAR_RAMP_END_TIME_IN_US    (30U)
//#define CHAINS_CASCADE_RADAR_SLOPE_MHZ_PER_US       (8.52)
//#define CHAINS_CASCADE_RADAR_TX_START_TIME          (1U)

// Khai: MRR Profile Config same as FUJI
//#define CHAINS_CASCADE_RADAR_SAMPLING_RATE_KSPS     (15000U)
//#define CHAINS_CASCADE_RADAR_ADC_START_TIME_IN_US   (5U)
//#define CHAINS_CASCADE_RADAR_IDLE_TIME_IN_US        (4U)
//#define CHAINS_CASCADE_RADAR_RAMP_END_TIME_IN_US    (23U)
//#define CHAINS_CASCADE_RADAR_SLOPE_MHZ_PER_US       (15U)
//#define CHAINS_CASCADE_RADAR_TX_START_TIME          (1U)

// Khai: SRR Profile Config same as FUJI
#define CHAINS_CASCADE_RADAR_SAMPLING_RATE_KSPS     (8000U)
#define CHAINS_CASCADE_RADAR_ADC_START_TIME_IN_US   (6U)
#define CHAINS_CASCADE_RADAR_IDLE_TIME_IN_US        (5U)
#define CHAINS_CASCADE_RADAR_RAMP_END_TIME_IN_US    (40U)
#define CHAINS_CASCADE_RADAR_SLOPE_MHZ_PER_US       (79U)
#define CHAINS_CASCADE_RADAR_TX_START_TIME          (1U)

/* check if frame periodicity too low with 2 ms margin */
#define TOTAL_CHIRP_TIME_US ( /* number of chirps */                     \
                             (CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA *      \
                              CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128) *       \
                             /* time of one chirp */                     \
                             (CHAINS_CASCADE_RADAR_RAMP_END_TIME_IN_US + \
                              CHAINS_CASCADE_RADAR_IDLE_TIME_IN_US)      \
                            )

#if ((CHAINS_CASCADE_RADAR_FRAME_PERIODICITY_MS * 1000) < (TOTAL_CHIRP_TIME_US + 2000U))
#error frame periodicity too low
#endif

/** \brief CSI Data Rate for data transfer from AR12xx
 *         Valid Values are
 *         150 (for 150 Mbps)
 *         300 (for 300 Mbps)
 *         400 (for 400 Mbps)
 *         450 (for 450 Mbps)
 *         600 (for 600 Mbps)
 */
#define CHAINS_AR1243_CSI_DATA_RATE (600U)

#if (CHAINS_AR1243_CSI_DATA_RATE == (150U))
    /** \brief CSI Data rate value set in the AR12 parameters */
    #define CHAINS_AR1243_CSI_DATA_RATE_VALUE (6)       /* 150 Mbps */
    /** \brief CSI High speed clock set in the AR12 parameters */
    #define CHAINS_CASCADE_RADAR_DDR_HSI_CLK         (0xB)     /* 150 Mbps */
    /** \brief ISS CSI clock paramter set */
    #define CHAINS_CASCADE_RADAR_ISS_CSI_CLK         (75U)     /* 150 Mbps */
#elif (CHAINS_AR1243_CSI_DATA_RATE == (300U))
    /** \brief CSI Data rate value set in the AR12 parameters */
    #define CHAINS_AR1243_CSI_DATA_RATE_VALUE (4)       /* 300 Mbps */
    /** \brief CSI High speed clock set in the AR12 parameters */
    #define CHAINS_CASCADE_RADAR_DDR_HSI_CLK         (0xA)     /* 300 Mbps */
    /** \brief ISS CSI clock paramter set */
    #define CHAINS_CASCADE_RADAR_ISS_CSI_CLK         (150U)    /* 300 Mbps */
#elif (CHAINS_AR1243_CSI_DATA_RATE == (400U))
    /** \brief CSI Data rate value set in the AR12 parameters */
    #define CHAINS_AR1243_CSI_DATA_RATE_VALUE (3)       /* 400 Mbps */
    /** \brief CSI High speed clock set in the AR12 parameters */
    #define CHAINS_CASCADE_RADAR_DDR_HSI_CLK         (0x1)     /* 400 Mbps */
    /** \brief ISS CSI clock paramter set */
    #define CHAINS_CASCADE_RADAR_ISS_CSI_CLK         (200U)    /* 400 Mbps */
#elif (CHAINS_AR1243_CSI_DATA_RATE == (450U))
    /** \brief CSI Data rate value set in the AR12 parameters */
    #define CHAINS_AR1243_CSI_DATA_RATE_VALUE (2)       /* 450 Mbps */
    /** \brief CSI High speed clock set in the AR12 parameters */
    #define CHAINS_CASCADE_RADAR_DDR_HSI_CLK         (0x5)     /* 450 Mbps */
    /** \brief ISS CSI clock paramter set */
    #define CHAINS_CASCADE_RADAR_ISS_CSI_CLK         (225U)    /* 450 Mbps */
#elif (CHAINS_AR1243_CSI_DATA_RATE == (600U))
    /** \brief CSI Data rate value set in the AR12 parameters */
    #define CHAINS_AR1243_CSI_DATA_RATE_VALUE (1)       /* 600 Mbps */
    /** \brief CSI High speed clock set in the AR12 parameters */
    #define CHAINS_CASCADE_RADAR_DDR_HSI_CLK         (0x9)     /* 600 Mbps */
    /** \brief ISS CSI clock paramter set */
    #define CHAINS_CASCADE_RADAR_ISS_CSI_CLK         (300U)    /* 600 Mbps */
#else
    #warn "CHAINS_CASCADE_RADAR: No valid data rate specified!!"
#endif

/** \brief ADC Data Format for AR12
 *         Valid Values are
 *         12  (for 12 bit ADC)
 *         14  (for 14 bit ADC)
 *         16  (for 16 bit ADC)
 */
#define CHAINS_CASCADE_RADAR_ADC_DATA_FORMAT (16U)

#if (CHAINS_CASCADE_RADAR_ADC_DATA_FORMAT == (12U))
    /** \brief AR12 data format value set in the configuration */
    #define CHAINS_CASCADE_RADAR_DATA_FORMAT_CONFIG (RL_ADC_DATA_12_BIT)       /* 12 bit */
#elif (CHAINS_CASCADE_RADAR_ADC_DATA_FORMAT == (14U))
    /** \brief AR12 data format value set in the configuration */
    #define CHAINS_CASCADE_RADAR_DATA_FORMAT_CONFIG (RL_ADC_DATA_14_BIT)       /* 14 bit */
#elif (CHAINS_CASCADE_RADAR_ADC_DATA_FORMAT == (16U))
    /** \brief AR12 data format value set in the configuration */
    #define CHAINS_CASCADE_RADAR_DATA_FORMAT_CONFIG (RL_ADC_DATA_16_BIT)       /* 16 bit */
#else
    #warn "CHAINS_CASCADE_RADAR: No valid ADC data format specified!!"
#endif

/** \brief Advanced Frame Configurations */
#define CHAINS_CASCADE_RADAR_NUM_SUBFRAMES    (2U)
#define CHAINS_CASCADE_RADAR_NUM_BURSTS       (1U)
#define CHAINS_CASCADE_RADAR_NUM_BURST_LOOPS  (1U)
#define CHAINS_CASCADE_CHIRP_START_IDX 0
#define CHAINS_CASCADE_CHIRP_END_IDX   0        // Khai: Set this to number of chirp used on all sensors

/* When Advanced frame configuration is set this is ignored */
//==============================================================//
// ASSUMPTION: THERE IS EQUAL NUMBER OF FRAME CFG AS NUMBER OF  //
// OF PROFILES IN THIS CODE BASE. THIS IS BECAUSE WE ASSOCIATE  //
// PROFILE TO RADAR MODE. EACH RADAR MODE HAS PARAMETER DEPEDENT//
// IN BOTH FRAME CFG AND PROFILE CFG. THEREFORE, THERE MUST BE  //
// EQUAL NUMBER OF FRAME CFG AND PROFILE CFG                    //
//==============================================================//
rlFrameCfg_t   gChains_cascadeRadarFrmArgsMaster[CHAINS_CASCADE_RADAR_MAX_MODES] =
{
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_API_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    },
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_128 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_API_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    },
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_128 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_API_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    },
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_API_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    }
};

rlFrameCfg_t   gChains_cascadeRadarFrmArgsSlave[CHAINS_CASCADE_RADAR_MAX_MODES] =
{
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_SYNCIN_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    },
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_128 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_SYNCIN_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    },
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_128 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_SYNCIN_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    },
    {
        .chirpStartIdx      = (rlUInt16_t) CHAINS_CASCADE_CHIRP_START_IDX,
        .chirpEndIdx        = (rlUInt16_t) CHAINS_CASCADE_CHIRP_END_IDX,
        .numLoops           = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
        .numFrames          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_FRAMES,
        .numAdcSamples      = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256 * (rlUInt16_t)2,
        .framePeriodicity   = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(10),
        .triggerSelect      = (rlUInt16_t) RL_FRAMESTRT_SYNCIN_TRIGGER,
        .reserved0          = (rlUInt32_t) 0,
        .reserved1          = (rlUInt32_t) 0,
        .frameTriggerDelay  = (rlUInt32_t) 0
    }
};

rlProfileCfg_t gChains_cascadeRadarProfileArgs[CHAINS_CASCADE_RADAR_MAX_MODES] = {
    // POC: radar mode 1 - Vmax = 37, Vres = .58 m/s, Rmax = 330, Rres = 1.29 m
    {
        .profileId             = (rlUInt16_t) 0,
        .pfVcoSelect           = (rlUInt8_t) 0,
        .pfCalLutUpdate        = (rlUInt8_t) 0,
        .startFreqConst        = (rlUInt32_t) CHAINS_AR1243_FREQ_GHZ_CONV(77),
        .idleTimeConst         = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(2),
        .adcStartTimeConst     = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(4),
        .rampEndTime           = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(30),
        .txOutPowerBackoffCode = (rlUInt32_t) 14,
        .txPhaseShifter        = (rlUInt32_t) 0,
        .freqSlopeConst        = (rlInt16_t) CHAINS_AR1243_FREQ_MHZ_PER_MICRO_S_SLOPE_CONV(8.52),
        .txStartTime           = (rlInt16_t) CHAINS_AR1243_TIME_US_TO_10NS(1U),
        .numAdcSamples         = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256,
        .digOutSampleRate      = (rlUInt16_t) 18750, // Kilo Samples per second
        .hpfCornerFreq1        = (rlUInt8_t) RL_RX_HPF1_175_KHz,  // Khai: change this to eliminate the range wrap around
        .hpfCornerFreq2        = (rlUInt8_t) RL_RX_HPF2_350_KHz,  // Khai: change this to eliminate the range wrap around
        .rxGain                = (rlUInt16_t) 30                  // Khai: This is same as 9dB VGA gain
    },
    // POC: radar mode 2 - Vmax = 60, Vres = .94 m/s, Rmax = 330, Rres = 2.58 m
    {
        .profileId             = (rlUInt16_t) 1,
        .pfVcoSelect           = (rlUInt8_t) 0,
        .pfCalLutUpdate        = (rlUInt8_t) 0,
        .startFreqConst        = (rlUInt32_t) CHAINS_AR1243_FREQ_GHZ_CONV(77),
        .idleTimeConst         = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(2),
        .adcStartTimeConst     = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(4),
        .rampEndTime           = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(14.22),
        .txOutPowerBackoffCode = (rlUInt32_t) 14,
        .txPhaseShifter        = (rlUInt32_t) 0,
        .freqSlopeConst        = (rlInt16_t) CHAINS_AR1243_FREQ_MHZ_PER_MICRO_S_SLOPE_CONV(8.49),
        .txStartTime           = (rlInt16_t) CHAINS_AR1243_TIME_US_TO_10NS(1U),
        .numAdcSamples         = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_128,
        .digOutSampleRate      = (rlUInt16_t) 18750,              // Kilo Samples per second
        .hpfCornerFreq1        = (rlUInt8_t) RL_RX_HPF1_175_KHz,  // Khai: change this to eliminate the range wrap around
        .hpfCornerFreq2        = (rlUInt8_t) RL_RX_HPF2_350_KHz,  // Khai: change this to eliminate the range wrap around
        .rxGain                = (rlUInt16_t) 30,                 // Khai: This is same as 9dB VGA gain
    },
    // POC: radar mode 4 - Vmax = 60, Vres = .94 m/s, Rmax = 250, Rres = 2 m
    {
        .profileId             = (rlUInt16_t) 2,
        .pfVcoSelect           = (rlUInt8_t) 0,
        .pfCalLutUpdate        = (rlUInt8_t) 0,
        .startFreqConst        = (rlUInt32_t) CHAINS_AR1243_FREQ_GHZ_CONV(77),
        .idleTimeConst         = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(2),
        .adcStartTimeConst     = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(4),
        .rampEndTime           = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(14.22),
        .txOutPowerBackoffCode = (rlUInt32_t) 14,
        .txPhaseShifter        = (rlUInt32_t) 0,
        .freqSlopeConst        = (rlInt16_t) CHAINS_AR1243_FREQ_MHZ_PER_MICRO_S_SLOPE_CONV(11.27),
        .txStartTime           = (rlInt16_t) CHAINS_AR1243_TIME_US_TO_10NS(1U),
        .numAdcSamples         = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_128,
        .digOutSampleRate      = (rlUInt16_t) 18750, // Kilo Samples per second
        .hpfCornerFreq1        = (rlUInt8_t) RL_RX_HPF1_175_KHz,  // Khai: change this to eliminate the range wrap around
        .hpfCornerFreq2        = (rlUInt8_t) RL_RX_HPF2_350_KHz,  // Khai: change this to eliminate the range wrap around
        .rxGain                = (rlUInt16_t) 30                  // Khai: This is same as 9dB VGA gain
    },
    // POC: radar mode 5 - Vmax = 37 m/s, Vres = .6 m/s, Rmax = 100, Rres = .4 m
    {
        .profileId             = (rlUInt16_t) 3,
        .pfVcoSelect           = (rlUInt8_t) 0,
        .pfCalLutUpdate        = (rlUInt8_t) 0,
        .startFreqConst        = (rlUInt32_t) CHAINS_AR1243_FREQ_GHZ_CONV(77),
        .idleTimeConst         = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(2),
        .adcStartTimeConst     = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(4),
        .rampEndTime           = (rlUInt32_t) CHAINS_AR1243_TIME_US_TO_10NS(24.22),
        .txOutPowerBackoffCode = (rlUInt32_t) 14,
        .txPhaseShifter        = (rlUInt32_t) 0,
        .freqSlopeConst        = (rlInt16_t) CHAINS_AR1243_FREQ_MHZ_PER_MICRO_S_SLOPE_CONV(28.16),
        .txStartTime           = (rlInt16_t) CHAINS_AR1243_TIME_US_TO_10NS(1U),
        .numAdcSamples         = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256,
        .digOutSampleRate      = (rlUInt16_t) 18750, // Kilo Samples per second
        .hpfCornerFreq1        = (rlUInt8_t) RL_RX_HPF1_175_KHz,  // Khai: change this to eliminate the range wrap around
        .hpfCornerFreq2        = (rlUInt8_t) RL_RX_HPF2_350_KHz,  // Khai: change this to eliminate the range wrap around
        .rxGain                = (rlUInt16_t) 30                  // Khai: This is same as 9dB VGA gain
    }
};

rlChirpCfg_t   gChains_cascadeRadarChirpCfgArgsMaster[CHAINS_CASCADE_RADAR_MAX_MODES] = {
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x0,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x1,    // Khai: enable transmit only on Master TX0
        .reserved        = (rlUInt16_t) 0x0
    },
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x1,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x1,    // Khai: enable transmit only on Master TX0
        .reserved        = (rlUInt16_t) 0x0
    },
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x2,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x1,    // Khai: enable transmit only on Master TX0
        .reserved        = (rlUInt16_t) 0x0
    },
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x3,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x1,    // Khai: enable transmit only on Master TX0
        .reserved        = (rlUInt16_t) 0x0
    }
};

rlChirpCfg_t   gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap2[CHAINS_CASCADE_RADAR_MAX_MODES] = {
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x0,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x0,
        .reserved        = (rlUInt16_t) 0x0
    },
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x1,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x0,
        .reserved        = (rlUInt16_t) 0x0
    },
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x2,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x0,
        .reserved        = (rlUInt16_t) 0x0
    },
    {
        .chirpStartIdx   = (rlUInt16_t) 0x0,
        .chirpEndIdx     = (rlUInt16_t) 0x0,
        .profileId       = (rlUInt16_t) 0x3,
        .startFreqVar    = (rlUInt32_t) 0x0,
        .freqSlopeVar    = (rlUInt16_t) 0x0,
        .idleTimeVar     = (rlUInt16_t) 0x0,
        .adcStartTimeVar = (rlUInt16_t) 0x0,
        .txEnable        = (rlUInt16_t) 0x0,
        .reserved        = (rlUInt16_t) 0x0
    }
};

rlChirpCfg_t   gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap4[CHAINS_CASCADE_RADAR_MAX_MODES];
rlChirpCfg_t   gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap8[CHAINS_CASCADE_RADAR_MAX_MODES];

//rlRfPhaseShiftCfg_t gCascade_mimo_master[CHAINS_RADAR_MAX_NUM_CHIRP_CFG];
//rlRfPhaseShiftCfg_t gCascade_mimo_slave2[CHAINS_RADAR_MAX_NUM_CHIRP_CFG];
//rlRfPhaseShiftCfg_t gCascade_mimo_slave4[CHAINS_RADAR_MAX_NUM_CHIRP_CFG];
//rlRfPhaseShiftCfg_t gCascade_mimo_slave8[CHAINS_RADAR_MAX_NUM_CHIRP_CFG];

rlBpmChirpCfg_t   gChains_cascadeRadarBpmChirpCfgArgs[] =
{
    {
        .chirpStartIdx = (rlUInt16_t) 0x0,
        .chirpEndIdx   = (rlUInt16_t) 0x0,
        .constBpmVal   = (rlUInt16_t) 0x0,
        .reserved      = (rlUInt16_t) 0x0
    }
};

/**< \brief Sensor configuration for the CHAINS_CASCADE_RADAR Radar Sensor  */
Bsp_Ar12xxConfigObj   gAr12xx_config_master =
{
    .rfChanCfgArgs            = {
        .rxChannelEn = (rlUInt16_t) ((1U << CHAINS_CASCADE_RADAR_NUM_RX_ANTENNA) - 1),  // This dictates nRX/sensor
        .txChannelEn = (rlUInt16_t) ((1U << RL_TX_CNT) - 1),                            // This does not dictate nTx/sensor
        .cascading   = (rlUInt16_t) RL_FRAME_SYNC_MODE_MULT_CHIP_MASTER,
        .cascadingPinoutCfg = (rlUInt16_t) 0x0
    },
    .adcOutCfgArgs            = {
        .fmt                  = {
           .b2AdcBits    = CHAINS_CASCADE_RADAR_DATA_FORMAT_CONFIG,
           .b6Reserved0 = (rlUInt32_t) 0x0,
           .b8FullScaleReducFctr = (rlUInt32_t) 0x0,
           .b2AdcOutFmt  = RL_ADC_FORMAT_COMPLEX_1X,
           .b14Reserved1 = (rlUInt32_t) 0x0
        },
        .reserved0      = (rlUInt16_t) 0x0
    },
    .dataFmtCfgArgs           = {
        .rxChannelEn  = (rlUInt16_t) (1<<CHAINS_CASCADE_RADAR_NUM_RX_ANTENNA) - 1,
        .adcBits      = (rlUInt16_t) CHAINS_CASCADE_RADAR_DATA_FORMAT_CONFIG,
        .adcFmt       = (rlUInt16_t) RL_ADC_FORMAT_COMPLEX_1X,
        .iqSwapSel    = (rlUInt8_t) RL_DEV_I_FIRST,
        .chInterleave = (rlUInt8_t) RL_DEV_CH_NON_INTERLEAVED,
        .reserved     = (rlUInt32_t) 0x0
    },
    .rfLpModeCfgArgs          = {
        .reserved      = (rlUInt16_t) 0,
        .lpAdcMode     = (rlUInt16_t) RL_ADC_MODE_REGULAR
    },
    .chirpCfgArgs      = &gChains_cascadeRadarChirpCfgArgsMaster[0],
    .numChirpCfgArgs   = (CHAINS_CASCADE_CHIRP_END_IDX+1U),
    .profileCfgArgs    = gChains_cascadeRadarProfileArgs,
    .numProfileCfgArgs = sizeof(gChains_cascadeRadarProfileArgs)/sizeof(rlProfileCfg_t),
    .frameCfgArgs      = &gChains_cascadeRadarFrmArgsMaster[0],
    .dataPathCfgArgs   = {
        .intfSel         = (rlUInt8_t) 0,
        .transferFmtPkt0 = (rlUInt8_t) 1, /**< Data out Format, \n
                                      b5:0 Packet 0 content selection\n
                                      000001 - ADC_DATA_ONLY \n
                                      000110 - CP_ADC_DATA \n
                                      001001 - ADC_CP_DATA \n
                                      110110 - CP_ADC_CQ_DATA
                                      b7:6 Packet 0 virtual channel number (valid only for CSI2)\n
                                      00 Virtual channel number 0 (Default)\n
                                      01 Virtual channel number 1\n
                                      02 Virtual channel number 2\n
                                      03 Virtual channel number 3 \n*/
        .transferFmtPkt1 = (rlUInt8_t) 0,/**< Data out Format, \n
                                      b5:0 Packet 0 content selection\n
                                      000000 - Suppress Packet 1 \n
                                      001110 - CP_CQ_DATA \n
                                      001011 - CQ_CP_DATA \n
                                      b7:6 Packet 1 virtual channel number (valid only for CSI2)\n
                                      00 Virtual channel number 0 (Default)\n
                                      01 Virtual channel number 1\n
                                      02 Virtual channel number 2\n
                                      03 Virtual channel number 3\n*/
        .cqConfig        = (rlUInt8_t) 2,
        .cq0TransSize    = (rlUInt8_t) 64,
        .cq1TransSize    = (rlUInt8_t) 64,
        .cq2TransSize    = (rlUInt8_t) 64,
        .reserved        = (rlUInt8_t) 0
    },
    .dataPathClkCfgArgs           = {
        .laneClkCfg = (rlUInt8_t) 1,
        .dataRate   = (rlUInt8_t) CHAINS_AR1243_CSI_DATA_RATE_VALUE,
        .reserved   = (rlUInt16_t) 0
    },
    .hsiClkgs                 = {
        .hsiClk   = (rlUInt16_t) CHAINS_CASCADE_RADAR_DDR_HSI_CLK,
        .reserved = (rlUInt16_t) 0x0
    },
    .laneEnCfgArgs            = {
        .laneEn   = (rlUInt16_t)
            #if CHAINS_AR1243_CSI_DATA1LANE_POS
                ((rlUInt16_t) 0x1) |
            #endif
            #if CHAINS_AR1243_CSI_DATA2LANE_POS
                ((rlUInt16_t) 0x2) |
            #endif
            #if CHAINS_AR1243_CSI_DATA3LANE_POS
                ((rlUInt16_t) 0x4) |
            #endif
            #if CHAINS_AR1243_CSI_DATA4LANE_POS
                ((rlUInt16_t) 0x8) |
            #endif
                ((rlUInt16_t) 0x0),
        .reserved = (rlUInt16_t) 0x0
    },
    .ldoBypassCfgArgs = {3, 0},
    .bpmCommnCfgArgs = {
        .mode.b2SrcSel    = 0,
        .mode.b1Reserved0  = 0,
        .mode.b13Reserved1 = 0,
        .reserved0        = (rlUInt16_t) 0,
        .reserved1        = (rlUInt16_t) 0,
        .reserved2        = (rlUInt16_t) 0,
        .reserved3        = (rlUInt32_t) 0,
        .reserved4        = (rlUInt32_t) 0
    },
    .bpmChirpCfgArgs = gChains_cascadeRadarBpmChirpCfgArgs,
    .numBpmChirpCfgArgs = sizeof(gChains_cascadeRadarBpmChirpCfgArgs)/sizeof(rlBpmChirpCfg_t),
    .csiConfigArgs = {
        .lanePosPolSel = ((CHAINS_AR1243_CSI_CLOCKLANE_POS << 16U) | /* Polarity Always */
                         (CHAINS_AR1243_CSI_DATA4LANE_POS << 12U) | /* assumed to be 0 */
                         (CHAINS_AR1243_CSI_DATA3LANE_POS << 8U) |
                         (CHAINS_AR1243_CSI_DATA2LANE_POS << 4U) |
                         (CHAINS_AR1243_CSI_DATA1LANE_POS)),
        .reserved1 = (rlUInt32_t) 0U,
    },
    // Khai: MIMO use case does NOT use Advanced Frame at the moment
    .advFrameCfgArgs = {
        .frameSeq = {
            .numOfSubFrames = (rlUInt8_t) CHAINS_CASCADE_RADAR_NUM_SUBFRAMES,
            .forceProfile   = (rlUInt8_t) 1,
            .loopBackCfg    = (rlUInt8_t) 0,
            .subFrameTrigger = (rlUInt8_t) 0,
            .subFrameCfg = {
                {
                    .forceProfileIdx     = (rlUInt16_t) 0,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA,
                    .numLoops            = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
                    .burstPeriodicity    = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(33U),
                    /* burstPeriodicity >=
                     * (numLoops)* (numOfChirps) * chirpTime + InterBurstBlankTime,
                     * where InterBurstBlankTime is primarily for sensor
                     * calibration / monitoring, thermal control, and some minimum
                     * time needed for triggering next burst.
                     * NOTE: Across bursts, if the value numOfChirps, is not a
                     * constant, then the actual available blank time can vary and
                     * needs to be accounted for 1 LSB = 5 ns
                     */
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURSTS,
                    .numOfBurstLoops     = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURST_LOOPS,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(66U),
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                },
                {
                    .forceProfileIdx     = (rlUInt16_t) 1,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA,
                    .numLoops            = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
                    .burstPeriodicity    = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(33U),
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURSTS,
                    .numOfBurstLoops     = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURST_LOOPS,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(66U),
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                },
                {
                    .forceProfileIdx     = (rlUInt16_t) 0,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) 0,
                    .numLoops            = (rlUInt16_t) 0,
                    .burstPeriodicity    = (rlUInt32_t) 0,
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) 0,
                    .numOfBurstLoops     = (rlUInt16_t) 0,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) 0,
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                },
                {
                    .forceProfileIdx     = (rlUInt16_t) 0,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) 0,
                    .numLoops            = (rlUInt16_t) 0,
                    .burstPeriodicity    = (rlUInt32_t) 0,
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) 0,
                    .numOfBurstLoops     = (rlUInt16_t) 0,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) 0,
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                }
            },
            .numFrames      = (rlUInt16_t) 0,
            .triggerSelect  = (rlUInt16_t) RL_FRAMESTRT_API_TRIGGER,
            .frameTrigDelay = (rlUInt32_t) 0,
            .reserved0      = (rlUInt32_t) 0,
            .reserved1      = (rlUInt32_t) 0
        },
        .frameData = {
            .numSubFrames = (rlUInt8_t) CHAINS_CASCADE_RADAR_NUM_SUBFRAMES,
            .reserved0    = (rlUInt8_t) 0,
            .reserved1    = (rlUInt16_t) 0,
            .subframeDataCfg = {
                {
                    .totalChirps =
                        (rlUInt32_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA * CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128 * CHAINS_CASCADE_RADAR_NUM_BURSTS,
                    /* Number of Chirps in Sub-Frame =
                     *                     numOfChirps * numLoops * numOfBurst
                     */
                    .numAdcSamples = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256 * (rlUInt16_t) 2,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    /* In AR12xx: Program this as 1 */
                    .reserved = (rlUInt8_t) 0,
                },
                {
                    .totalChirps = (rlUInt32_t) 0,
                    .numAdcSamples = (rlUInt16_t) 0,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    .reserved = (rlUInt8_t) 0,
                },
                {
                    .totalChirps = (rlUInt32_t) 0,
                    .numAdcSamples = (rlUInt16_t) 0,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    .reserved = (rlUInt8_t) 0,
                },
                {
                    .totalChirps = (rlUInt32_t) 0,
                    .numAdcSamples = (rlUInt16_t) 0,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    .reserved = (rlUInt8_t) 0,
                }
            }
        }
    },
    // Khai: Here is where to specify Normal or Advanced Frame COnfig
    .frameType = BSP_AR12XX_FRAME_TYPE_NORMAL,
    .calibEnArgs = {
        .calibEnMask   = (rlUInt32_t) 0x17f0,   //  600 - enable tx rx,  //200 - enable tx bk only, //0x17f0,
        .reserved0     = (rlUInt8_t) 0x0,
        .reserved1     = (rlUInt8_t) 0x0,
        .reserved2     = (rlUInt16_t) 0x0,
        .reserved3     = (rlUInt32_t) 0x0
    }
};

/**< \brief Sensor configuration for the CHAINS_CASCADE_RADAR Radar Sensor  */
Bsp_Ar12xxConfigObj   gAr12xx_config_slave_DevIdxMap2 =
{
    .rfChanCfgArgs            = {
        .rxChannelEn = (rlUInt16_t) (1 << CHAINS_CASCADE_RADAR_NUM_RX_ANTENNA) - 1, // This dictates nRX/sensor
        .txChannelEn = (rlUInt16_t) (1 << RL_TX_CNT) - 1,                           // This does not dictate nTx/sensor
        .cascading   = (rlUInt16_t) RL_FRAME_SYNC_MODE_MULT_CHIP_SLAVE,
        .cascadingPinoutCfg = (rlUInt16_t) 0x0
    },
    .adcOutCfgArgs            = {
        .fmt                  = {
            .b2AdcBits    = CHAINS_CASCADE_RADAR_DATA_FORMAT_CONFIG,
            .b6Reserved0 = (rlUInt32_t) 0x0,
            .b8FullScaleReducFctr = (rlUInt32_t) 0x0,
            .b2AdcOutFmt  = RL_ADC_FORMAT_COMPLEX_1X,
            .b14Reserved1 = (rlUInt32_t) 0x0
        },
        .reserved0      = (rlUInt16_t) 0x0
    },
    .dataFmtCfgArgs           = {
        .rxChannelEn  = (rlUInt16_t) (1<<CHAINS_CASCADE_RADAR_NUM_RX_ANTENNA) - 1,
        .adcBits      = (rlUInt16_t) CHAINS_CASCADE_RADAR_DATA_FORMAT_CONFIG,
        .adcFmt       = (rlUInt16_t) RL_ADC_FORMAT_COMPLEX_1X,
        .iqSwapSel    = (rlUInt8_t) RL_DEV_I_FIRST,
        .chInterleave = (rlUInt8_t) RL_DEV_CH_NON_INTERLEAVED,
        .reserved     = (rlUInt32_t) 0x0
    },
    .rfLpModeCfgArgs          = {
        .reserved      = (rlUInt16_t) 0,
        .lpAdcMode     = (rlUInt16_t) RL_ADC_MODE_REGULAR
    },
    .chirpCfgArgs      = &gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap2[0],
    .numChirpCfgArgs   = (CHAINS_CASCADE_CHIRP_END_IDX+1U),
    .profileCfgArgs    = gChains_cascadeRadarProfileArgs,
    .numProfileCfgArgs = sizeof(gChains_cascadeRadarProfileArgs)/sizeof(rlProfileCfg_t),
    .frameCfgArgs      = &gChains_cascadeRadarFrmArgsSlave[0],
    .dataPathCfgArgs   = {
        .intfSel         = (rlUInt8_t) 0,
        .transferFmtPkt0 = (rlUInt8_t) 1, /**< Data out Format, \n
                                      b5:0 Packet 0 content selection\n
                                      000001 - ADC_DATA_ONLY \n
                                      000110 - CP_ADC_DATA \n
                                      001001 - ADC_CP_DATA \n
                                      110110 - CP_ADC_CQ_DATA
                                      b7:6 Packet 0 virtual channel number (valid only for CSI2)\n
                                      00 Virtual channel number 0 (Default)\n
                                      01 Virtual channel number 1\n
                                      02 Virtual channel number 2\n
                                      03 Virtual channel number 3 \n*/
        .transferFmtPkt1 = (rlUInt8_t) 0,/**< Data out Format, \n
                                      b5:0 Packet 0 content selection\n
                                      000000 - Suppress Packet 1 \n
                                      001110 - CP_CQ_DATA \n
                                      001011 - CQ_CP_DATA \n
                                      b7:6 Packet 1 virtual channel number (valid only for CSI2)\n
                                      00 Virtual channel number 0 (Default)\n
                                      01 Virtual channel number 1\n
                                      02 Virtual channel number 2\n
                                      03 Virtual channel number 3\n*/
        .cqConfig        = (rlUInt8_t) 2,
        .cq0TransSize    = (rlUInt8_t) 64,
        .cq1TransSize    = (rlUInt8_t) 64,
        .cq2TransSize    = (rlUInt8_t) 64,
        .reserved        = (rlUInt8_t) 0

    },
    .dataPathClkCfgArgs           = {
        .laneClkCfg = (rlUInt8_t) 1,
        .dataRate   = (rlUInt8_t) CHAINS_AR1243_CSI_DATA_RATE_VALUE,
        .reserved   = (rlUInt16_t) 0
    },
    .hsiClkgs                 = {
        .hsiClk   = (rlUInt16_t) CHAINS_CASCADE_RADAR_DDR_HSI_CLK,
        .reserved = (rlUInt16_t) 0x0
    },
    .laneEnCfgArgs            = {
        .laneEn   = (rlUInt16_t)
            #if CHAINS_AR1243_CSI_DATA1LANE_POS
                ((rlUInt16_t) 0x1) |
            #endif
            #if CHAINS_AR1243_CSI_DATA2LANE_POS
                ((rlUInt16_t) 0x2) |
            #endif
            #if CHAINS_AR1243_CSI_DATA3LANE_POS
                ((rlUInt16_t) 0x4) |
            #endif
            #if CHAINS_AR1243_CSI_DATA4LANE_POS
                ((rlUInt16_t) 0x8) |
            #endif
                ((rlUInt16_t) 0x0),
        .reserved = (rlUInt16_t) 0x0
    },
    .ldoBypassCfgArgs = {3, 0},
    .bpmCommnCfgArgs = {
        .mode.b2SrcSel    = 0,
        .mode.b1Reserved0  = 0,
        .mode.b13Reserved1 = 0,
        .reserved0        = (rlUInt16_t) 0,
        .reserved1        = (rlUInt16_t) 0,
        .reserved2        = (rlUInt16_t) 0,
        .reserved3        = (rlUInt32_t) 0,
        .reserved4        = (rlUInt32_t) 0
    },
    .bpmChirpCfgArgs = gChains_cascadeRadarBpmChirpCfgArgs,
    .numBpmChirpCfgArgs = sizeof(gChains_cascadeRadarBpmChirpCfgArgs)/sizeof(rlBpmChirpCfg_t),
    .csiConfigArgs = {
        .lanePosPolSel = ((CHAINS_AR1243_CSI_CLOCKLANE_POS << 16U) | /* Polarity Always */
                         (CHAINS_AR1243_CSI_DATA4LANE_POS << 12U) | /* assumed to be 0 */
                         (CHAINS_AR1243_CSI_DATA3LANE_POS << 8U) |
                         (CHAINS_AR1243_CSI_DATA2LANE_POS << 4U) |
                         (CHAINS_AR1243_CSI_DATA1LANE_POS)),
        .reserved1 = (rlUInt32_t) 0U,
    },
    .advFrameCfgArgs = {
        .frameSeq = {
            .numOfSubFrames = (rlUInt8_t) CHAINS_CASCADE_RADAR_NUM_SUBFRAMES,
            .forceProfile   = (rlUInt8_t) 1,
            .loopBackCfg    = (rlUInt8_t) 0,
            .subFrameTrigger = (rlUInt8_t) 0,
            .subFrameCfg = {
                {
                    .forceProfileIdx     = (rlUInt16_t) 0,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA,
                    .numLoops            = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
                    .burstPeriodicity    = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(33U),
                    /* burstPeriodicity >=
                     * (numLoops)* (numOfChirps) * chirpTime + InterBurstBlankTime,
                     * where InterBurstBlankTime is primarily for sensor
                     * calibration / monitoring, thermal control, and some minimum
                     * time needed for triggering next burst.
                     * NOTE: Across bursts, if the value numOfChirps, is not a
                     * constant, then the actual available blank time can vary and
                     * needs to be accounted for 1 LSB = 5 ns
                     */
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURSTS,
                    .numOfBurstLoops     = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURST_LOOPS,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(66U),
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                },
                {
                    .forceProfileIdx     = (rlUInt16_t) 1,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA,
                    .numLoops            = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128,
                    .burstPeriodicity    = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(33U),
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURSTS,
                    .numOfBurstLoops     = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURST_LOOPS,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(66U),
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                },
                {
                    .forceProfileIdx     = (rlUInt16_t) 0,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) 0,
                    .numLoops            = (rlUInt16_t) 0,
                    .burstPeriodicity    = (rlUInt32_t) 0,
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) 0,
                    .numOfBurstLoops     = (rlUInt16_t) 0,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) 0,
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                },
                {
                    .forceProfileIdx     = (rlUInt16_t) 0,
                    .chirpStartIdx       = (rlUInt16_t) 0,
                    .numOfChirps         = (rlUInt16_t) 0,
                    .numLoops            = (rlUInt16_t) 0,
                    .burstPeriodicity    = (rlUInt32_t) 0,
                    .chirpStartIdxOffset = (rlUInt16_t) 0,
                    .numOfBurst          = (rlUInt16_t) 0,
                    .numOfBurstLoops     = (rlUInt16_t) 0,
                    .reserved0           = (rlUInt16_t) 0,
                    .subFramePeriodicity = (rlUInt32_t) 0,
                    .reserved1           = (rlUInt32_t) 0,
                    .reserved2           = (rlUInt32_t) 0
                }
            },
            .numFrames      = (rlUInt16_t) 0,
            .triggerSelect  = (rlUInt16_t) RL_FRAMESTRT_API_TRIGGER,
            .frameTrigDelay = (rlUInt32_t) 0,
            .reserved0      = (rlUInt32_t) 0,
            .reserved1      = (rlUInt32_t) 0
        },
        .frameData = {
            .numSubFrames = (rlUInt8_t) CHAINS_CASCADE_RADAR_NUM_SUBFRAMES,
            .reserved0    = (rlUInt8_t) 0,
            .reserved1    = (rlUInt16_t) 0,
            .subframeDataCfg = {
                {
                    .totalChirps =
                        (rlUInt32_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA * CHAINS_CASCADE_RADAR_RADAR_HEIGHT_128 * CHAINS_CASCADE_RADAR_NUM_BURSTS,
                    /* Number of Chirps in Sub-Frame =
                     *                     numOfChirps * numLoops * numOfBurst
                     */
                    .numAdcSamples = (rlUInt16_t) CHAINS_CASCADE_RADAR_WIDTH_256 * (rlUInt16_t) 2,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    /* In AR12xx: Program this as 1 */
                    .reserved = (rlUInt8_t) 0,
                },
                {
                    .totalChirps = (rlUInt32_t) 0,
                    .numAdcSamples = (rlUInt16_t) 0,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    .reserved = (rlUInt8_t) 0,
                },
                {
                    .totalChirps = (rlUInt32_t) 0,
                    .numAdcSamples = (rlUInt16_t) 0,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    .reserved = (rlUInt8_t) 0,
                },
                {
                    .totalChirps = (rlUInt32_t) 0,
                    .numAdcSamples = (rlUInt16_t) 0,
                    .numChirpsInDataPacket = (rlUInt8_t) 1,
                    .reserved = (rlUInt8_t) 0,
                }
            }
        }
    },
    .frameType = BSP_AR12XX_FRAME_TYPE_NORMAL,
    .calibEnArgs = {
        .calibEnMask   = (rlUInt32_t) 0x17f0,   //  600 - enable tx rx,  //200 - enable tx bk only, //0x17f0,
        .reserved0     = (rlUInt8_t) 0x0,
        .reserved1     = (rlUInt8_t) 0x0,
        .reserved2     = (rlUInt16_t) 0x0,
        .reserved3     = (rlUInt32_t) 0x0
    }
};

/* These two will be filled at run-time using DevIdxMap2 as base, because all parameters except
 * chirp configurations are same.
 */
Bsp_Ar12xxConfigObj   gAr12xx_config_slave_DevIdxMap4;
Bsp_Ar12xxConfigObj   gAr12xx_config_slave_DevIdxMap8;


// POC: There will be equal number of AWR config objects as radar modes.
// Upon radar mode change, this function will be called and return the
// corresponding AWR config param for that radar mode.
Void Chains_ar12xxGetNewCascadeConfig(ChainsCommon_Ar12xxConfigOut *pCfgOut) {

    int id = pCfgOut->radarParams[0].currProfileId;
    // Change to Master Profile and Frame Config
//    pCfgOut->radarParams[0].ar12xxConfig.profileCfgArgs = gAr12xx_config_master.profileCfgArgs =
//            &gChains_cascadeRadarProfileArgs    [id];
    pCfgOut->radarParams[0].ar12xxConfig.frameCfgArgs   = &gChains_cascadeRadarFrmArgsMaster[id];
    pCfgOut->radarParams[0].ar12xxConfig.chirpCfgArgs   = &gChains_cascadeRadarChirpCfgArgsMaster[id];
    // Change to Slave2 Profile and Frame Config
//    pCfgOut->radarParams[1].ar12xxConfig.profileCfgArgs = gAr12xx_config_slave_DevIdxMap2.profileCfgArgs =
//            &gChains_cascadeRadarProfileArgs    [id];
    pCfgOut->radarParams[1].ar12xxConfig.frameCfgArgs   = &gChains_cascadeRadarFrmArgsSlave[id];
    pCfgOut->radarParams[1].ar12xxConfig.chirpCfgArgs   = &gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap2[id];
    // Change to Slave4 Profile and Frame Config
//    pCfgOut->radarParams[2].ar12xxConfig.profileCfgArgs = gAr12xx_config_slave_DevIdxMap4.profileCfgArgs =
//            &gChains_cascadeRadarProfileArgs    [id];
    pCfgOut->radarParams[2].ar12xxConfig.frameCfgArgs   = &gChains_cascadeRadarFrmArgsSlave[id];
    pCfgOut->radarParams[2].ar12xxConfig.chirpCfgArgs   = &gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap4[id];
    // Change to Slave8 Profile and Frame Config
//    pCfgOut->radarParams[3].ar12xxConfig.profileCfgArgs = gAr12xx_config_slave_DevIdxMap8.profileCfgArgs =
//            &gChains_cascadeRadarProfileArgs    [id];
    pCfgOut->radarParams[3].ar12xxConfig.frameCfgArgs   = &gChains_cascadeRadarFrmArgsSlave[id];
    pCfgOut->radarParams[3].ar12xxConfig.chirpCfgArgs   = &gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap8[id];
}

Int32 Chains_ar12xxGetSampleCascadeConfig(ChainsCommon_Ar12xxConfigOut *pCfgOut)
{
    Int32 retVal = BSP_SOK;
    UInt32 i = 0;

    memset(pCfgOut, 0, sizeof(ChainsCommon_Ar12xxConfigOut));
    /* 4 Chip Cascade Configuration */
    pCfgOut->numRadars = CHAINS_RADAR_CASCADE_NUMSENSORS;

    Vps_printf(
        APP_NAME " AR12xx Initializing FPGA ...\n\r");

    if (Bsp_boardGetBaseBoardRev() < BSP_BOARD_REV_E)
    {
        /* On Rev A, only one GPIO to lift the CRESET and power on ALL FPGA */
        retVal = ChainsCommon_fpgaPowerUp(0);
        UTILS_assert(BSP_SOK == retVal);
    }

    // Khai: number of radar counter loops from 0->3
    for (i = 0; i < pCfgOut->numRadars; i++)
    {
        /* Lift the CRESET and power on each FPGA */
        if (Bsp_boardGetBaseBoardRev() >= BSP_BOARD_REV_E)
        {
            retVal = ChainsCommon_fpgaPowerUp(i);
            UTILS_assert(BSP_SOK == retVal);
        }
        /* Lift the Logic reset for each FPGA. FPGA will now be ready to accept
         * CSI Data.
         */
        // Khai: There is a problem in this routine if we use numRadars < 4.
        // The switch case statement for 3 - initializes FPGA0 and for 0 - init 1
        // and so on... If we use numRadars = 4, we are OK. anything else will
        // need code revision or talk to TI first
        retVal = ChainsCommon_fpgaStart(i);
        UTILS_assert(BSP_SOK == retVal);
    }
    Vps_printf(
        APP_NAME " AR12xx Initializing FPGA Done...\n\r");

    /* Check for certain size limitations. This will show up as compile time
     * issues.
     */
    COMPILE_TIME_ASSERT(
        sizeof(gChains_cascadeRadarProfileArgs)/sizeof(rlProfileCfg_t) >
        CHAINS_CASCADE_RADAR_MAX_PROFILES);

    for (i = 0; i < pCfgOut->numRadars; i++)
    {
        /* Defaulting to macro as this not captured in the ar12xxConfig parameter */
        pCfgOut->radarParams[i].numValidBits = CHAINS_CASCADE_RADAR_ADC_DATA_FORMAT;
        pCfgOut->radarParams[i].bpmEnabled = 0U;
        pCfgOut->radarParams[i].numProfiles = sizeof(gChains_cascadeRadarProfileArgs)/sizeof(rlProfileCfg_t);
        sprintf(pCfgOut->radarParams[i].configName, "%s_%d", CHAINS_CASCADE_RADAR_CONFIG_NAME, i);
        pCfgOut->radarParams[i].chirpRow = NULL;
        pCfgOut->radarParams[i].numChirpRow = 0;
        // Khai: This indicates we are not using AWR TX phase shift
        pCfgOut->radarParams[i].numTxPhaseShifterCfg = 0;
    }
//    pCfgOut->radarParams[0].txPhaseShifterCfg = gCascade_mimo_master;
//    pCfgOut->radarParams[1].txPhaseShifterCfg = gCascade_mimo_slave2;
//    pCfgOut->radarParams[2].txPhaseShifterCfg = gCascade_mimo_slave4;
//    pCfgOut->radarParams[3].txPhaseShifterCfg = gCascade_mimo_slave8;

    /* Use DevIdxMap2 config as reference, everything is same except chirp configs */
    memcpy((void*)&gAr12xx_config_slave_DevIdxMap4, (const void *)&gAr12xx_config_slave_DevIdxMap2,
           sizeof(gAr12xx_config_slave_DevIdxMap2));
//    gAr12xx_config_slave_DevIdxMap4.chirpCfgArgs = gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap4;
//    gAr12xx_config_slave_DevIdxMap4.numChirpCfgArgs = (CHAINS_CASCADE_CHIRP_END_IDX+1U);
//    gAr12xx_config_slave_DevIdxMap4.rfChanCfgArgs.rxChannelEn = 0;
//    gAr12xx_config_slave_DevIdxMap4.dataFmtCfgArgs.rxChannelEn = 0;
    memcpy((void*)&gAr12xx_config_slave_DevIdxMap8, (const void *)&gAr12xx_config_slave_DevIdxMap2,
           sizeof(gAr12xx_config_slave_DevIdxMap2));
//    gAr12xx_config_slave_DevIdxMap8.chirpCfgArgs = gChains_cascadeRadarChirpCfgArgsSlave_DevIdxMap8;
//    gAr12xx_config_slave_DevIdxMap8.numChirpCfgArgs = (CHAINS_CASCADE_CHIRP_END_IDX+1U);

    memcpy(&pCfgOut->radarParams[0].ar12xxConfig, &gAr12xx_config_master,
           sizeof (gAr12xx_config_master));
    memcpy(&pCfgOut->radarParams[1].ar12xxConfig, &gAr12xx_config_slave_DevIdxMap2,
           sizeof(gAr12xx_config_slave_DevIdxMap2));
    memcpy(&pCfgOut->radarParams[2].ar12xxConfig, &gAr12xx_config_slave_DevIdxMap4,
           sizeof(gAr12xx_config_slave_DevIdxMap4));
    memcpy(&pCfgOut->radarParams[3].ar12xxConfig, &gAr12xx_config_slave_DevIdxMap8,
           sizeof(gAr12xx_config_slave_DevIdxMap8));

    /* Default to normal frame */
    pCfgOut->frameType = 0U;
    return retVal;
}

  • Hello Khai,

    Could you provide more info about your requirement as to how many profiles used, what are the features/configuration required to change frame to frame?

    We can provide the AWR reference configuration and API calls for that purpose. But you need to accommodate these new features with the processing chain of Radar SDK.

    Regards,

    Jitendra

  • Hi Jitendra,

    There are 4 profiles in the source file i provided. I am not sure or understand what else you would like to know. Can i set up a call with you individually to get us on the same page with the use of Advanced Frame? I just thought gong thru the forum like this would take many iterations before us both can move forward with the issue.

    Thanks,

    --Khai

  • Hello Khai,

    I have attached the file explaining high level advFrame config parameters which needs to be applied to gAr12xx_config_master.advFrameCfgArgs and gAr12xx_config_slave_DevIdxMap2. advFrameCfgArgs.

     .advFrameCfgArgs = {
            .frameSeq = {
                .numOfSubFrames = (rlUInt8_t) CHAINS_CASCADE_RADAR_NUM_SUBFRAMES, //JIT: Change this Macro to value '3'
                .forceProfile   = (rlUInt8_t) 1,
                .loopBackCfg    = (rlUInt8_t) 0,
                .subFrameTrigger = (rlUInt8_t) 0,
                .subFrameCfg = {
                    {
                        .forceProfileIdx     = (rlUInt16_t) 0, //JIT: all the chirp of SF0 connected to profile-0
                        .chirpStartIdx       = (rlUInt16_t) 0,
                        .numOfChirps         = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA, //JIT: modify this no. as required for total no. of chirp in sub-frame0
                        .numLoops            = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT, //JIT: modify this no. as required for total no. of chirp in sub-frame0  (this can be 1 if numOfChirps fulfills all the required no. of chirps in sub-frame)
                        .burstPeriodicity    = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(33U), //JIT: change this accordingly
                        /* burstPeriodicity >=
                         * (numLoops)* (numOfChirps) * chirpTime + InterBurstBlankTime,
                         * where InterBurstBlankTime is primarily for sensor
                         * calibration / monitoring, thermal control, and some minimum
                         * time needed for triggering next burst.
                         * NOTE: Across bursts, if the value numOfChirps, is not a
                         * constant, then the actual available blank time can vary and
                         * needs to be accounted for 1 LSB = 5 ns
                         */
                        .chirpStartIdxOffset = (rlUInt16_t) 0,
                        .numOfBurst          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURSTS, //JIT: set this to 1, i.e. only one burst per sub-frame
                        .numOfBurstLoops     = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURST_LOOPS,//JIT: modify this no. as required for total no. of chirp in sub-frame0  (this can be 1 if numOfChirps fulfills all the required no. of chirps in sub-frame)
                        .reserved0           = (rlUInt16_t) 0,
                        .subFramePeriodicity = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(66U), //JIT: change this accordingly
                        .reserved1           = (rlUInt32_t) 0,
                        .reserved2           = (rlUInt32_t) 0
                    },
                    {
                        .forceProfileIdx     = (rlUInt16_t) 1, //JIT: all the chirps in this sub-frame are connected with profile-1
                        .chirpStartIdx       = (rlUInt16_t) 0,
                        .numOfChirps         = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA,//JIT: modify this no. as required for total no. of chirp in sub-frame0
                        .numLoops            = (rlUInt16_t) CHAINS_CASCADE_RADAR_RADAR_HEIGHT,
                        .burstPeriodicity    = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(33U), //JIT: change this accordingly
                        .chirpStartIdxOffset = (rlUInt16_t) 0,
                        .numOfBurst          = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURSTS, //JIT: set this to 1, i.e. only one burst per sub-frame
                        .numOfBurstLoops     = (rlUInt16_t) CHAINS_CASCADE_RADAR_NUM_BURST_LOOPS,
                        .reserved0           = (rlUInt16_t) 0,
                        .subFramePeriodicity = (rlUInt32_t) CHAINS_AR1243_TIME_MS_TO_5NS(66U), //JIT: change this accordingly
                        .reserved1           = (rlUInt32_t) 0,
                        .reserved2           = (rlUInt32_t) 0
                    },
                    { //JIT: change sub-frame 3 parameter accordingly.
                        .forceProfileIdx     = (rlUInt16_t) 2,
                        .chirpStartIdx       = (rlUInt16_t) 0,
                        .numOfChirps         = (rlUInt16_t) 10,
                        .numLoops            = (rlUInt16_t) 1,
                        .burstPeriodicity    = (rlUInt32_t) 40,
                        .chirpStartIdxOffset = (rlUInt16_t) 0,
                        .numOfBurst          = (rlUInt16_t) 1,
                        .numOfBurstLoops     = (rlUInt16_t) 1,
                        .reserved0           = (rlUInt16_t) 0,
                        .subFramePeriodicity = (rlUInt32_t) 40,
                        .reserved1           = (rlUInt32_t) 0,
                        .reserved2           = (rlUInt32_t) 0
                    },
                    {
                        .forceProfileIdx     = (rlUInt16_t) 0,
                        .chirpStartIdx       = (rlUInt16_t) 0,
                        .numOfChirps         = (rlUInt16_t) 0,
                        .numLoops            = (rlUInt16_t) 0,
                        .burstPeriodicity    = (rlUInt32_t) 0,
                        .chirpStartIdxOffset = (rlUInt16_t) 0,
                        .numOfBurst          = (rlUInt16_t) 0,
                        .numOfBurstLoops     = (rlUInt16_t) 0,
                        .reserved0           = (rlUInt16_t) 0,
                        .subFramePeriodicity = (rlUInt32_t) 0,
                        .reserved1           = (rlUInt32_t) 0,
                        .reserved2           = (rlUInt32_t) 0
                    }
                },
                .numFrames      = (rlUInt16_t) 0,
                .triggerSelect  = (rlUInt16_t) RL_FRAMESTRT_API_TRIGGER,
                .frameTrigDelay = (rlUInt32_t) 0,
                .reserved0      = (rlUInt32_t) 0,
                .reserved1      = (rlUInt32_t) 0
            },
            .frameData = {
                .numSubFrames = (rlUInt8_t) CHAINS_CASCADE_RADAR_NUM_SUBFRAMES,
                .reserved0    = (rlUInt8_t) 0,
                .reserved1    = (rlUInt16_t) 0,
                .subframeDataCfg = {
                    {
                        .totalChirps =
                            (rlUInt32_t) CHAINS_CASCADE_RADAR_NUM_TX_ANTENNA * CHAINS_CASCADE_RADAR_RADAR_HEIGHT * CHAINS_CASCADE_RADAR_NUM_BURSTS, //JIT: change this to match the total no. of chirps in SF0
                        /* Number of Chirps in Sub-Frame =
                         *                     numOfChirps * numLoops * numOfBurst
                         */
                        .numAdcSamples = (rlUInt16_t) CHAINS_CASCADE_RADAR_PROFILE1_RADAR_WIDTH * (rlUInt16_t) 2,
                        .numChirpsInDataPacket = (rlUInt8_t) 1,
                        /* In AR12xx: Program this as 1 */
                        .reserved = (rlUInt8_t) 0,
                    },
                    {
                        .totalChirps = (rlUInt32_t) 0, //JIT: change this to match the total no. of chirps in SF1
                        .numAdcSamples = (rlUInt16_t) 0,
                        .numChirpsInDataPacket = (rlUInt8_t) 1,
                        .reserved = (rlUInt8_t) 0,
                    },
                    {
                        .totalChirps = (rlUInt32_t) 0, //JIT: change this to match the total no. of chirps in SF2
                        .numAdcSamples = (rlUInt16_t) 0,
                        .numChirpsInDataPacket = (rlUInt8_t) 1,
                        .reserved = (rlUInt8_t) 0,
                    },
                    {
                        .totalChirps = (rlUInt32_t) 0,
                        .numAdcSamples = (rlUInt16_t) 0,
                        .numChirpsInDataPacket = (rlUInt8_t) 1,
                        .reserved = (rlUInt8_t) 0,
                    }
                }
            }
        },
        .frameType = BSP_AR12XX_FRAME_TYPE_ADVANCED, //JIT: change it to Advanced frame type, change in other places as well, frameType = 1

    I would request you to refer mmWave DFP User Guide (link: section 11.1) which explains more about advanced frame configuration. And refer ICD (section 5.5.6) for detailed explanation of each parameter of advanced frame API.

    This advanced frame contains 3 different sub-frame configuration.

    And on top of this you need to port Radar SDK application as well to match with this advFrame configuration.

    Regards,

    Jitendra

  • HI Jitendra,

    Before we go ahead and change to advanced frame, I would like to at least resolve one current bug with you with Normal Frame. So, as you can see from the file I shared, it has 4 profiles. So, the processing flow needs to know which profileId it's currently processing the ADC data. To know the profileId, I set .transferFmtPkt0=6 from default 1. When this param is turned on, the processing chain FFT Alg received profileId printed out varied between 0-15 when I expected to remain at 0 when profile 0 is configured. Please see attached log.

    Thanks,

    --KhaiCascadeBoard-ProfileSwitch-Issue.txt

  • Hi Jitendra,

    Do you have feedback for this ticket? It's been a while. Please advice on how to fix this issue?

    Thanks,

    --Khai

  • Hello Khai,

    Sorry, somehow I didn't get a notification for your reply.

    Does default application (beam forming) give same output even using single profile ID?

     Or after code change only you observe this behavior.

    Code in the function AlgorithmFxn_RadarFftProcess takes care of bit shifting which is required for extraction of profileID from CP data.

    Regards,

    Jitendra

  • Hey Jitendra,

    To answer your question, we used the stock PROCESSOR_SDK_RADAR(v03.08) and inserted a print to print out the profile ID on Beamforming Usecase. We also changed the flag on .transferFmtPkt0 from 1 to 6 to enable CP for the MIMO use case. This is what we see for both of the cases (Minicom Log attached) 

    [!p[?3;4l>(B[?1h=[?12l[?25h
    Welcome to minicom 2.7
    
    OPTIONS: I18n 
    Compiled on Nov 15 2018, 20:18:47.
    Port /dev/ttyUSB0, 17:11:44
    
    Press CTRL-A Z for help on special keys
    
    
    [IPU1-0]    116.097999 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    116.098304 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    116.098487 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    116.098670 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    116.598060 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    116.598365 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    116.598548 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    116.598761 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    117.097999 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    117.098304 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    117.098487 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    117.098700 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    117.598029 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]    117.598304 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    117.598517 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    117.598700 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.098090 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.098395 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.098578 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.098761 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.598151 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.598426 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.598609 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    118.598822 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.098212 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.098487 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.098670 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.098883 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.598304 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.598548 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.598731 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    119.598944 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.098395 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.098609 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.098792 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.098975 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.598456 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.598670 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.598853 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    120.599036 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.098517 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.098761 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.098914 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.099127 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.598578 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.598822 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.598975 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    121.599188 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.098639 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.098853 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.099036 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.099219 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.598670 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.598914 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.599066 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    122.599280 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.098792 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.099005 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.099188 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.099432 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.598792 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.599036 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.599219 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    123.599463 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.098883 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.099097 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.099280 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.099524 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.598944 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.599158 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.599341 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    124.599615 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.098975 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.099188 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.099371 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.099676 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.599036 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.599249 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.599463 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    125.599707 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.099097 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.099310 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.099524 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.099768 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.599127 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.599341 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.599585 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    126.599798 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.099158 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.099371 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.099615 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.099829 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.599219 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.599432 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.599676 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    127.599890 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.099280 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.099554 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.099768 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.099951 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.599341 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.599615 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.599798 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    128.600012 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.099371 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.099676 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.099859 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.100042 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.599463 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.599798 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.599981 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    129.600164 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.099524 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.099798 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.099981 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.100164 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.599615 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.599859 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.600042 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    130.600225 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.099676 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.099920 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.100073 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.100286 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.599737 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.599981 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.600134 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    131.600347 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.099798 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.100042 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.100195 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.100408 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.599859 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.600103 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.600256 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    132.600469 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    133.099920 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    133.100164 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    133.100317 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]    133.100500 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [?12l[?25h[?12l[?25h[?1l>[!p[?3;4l>

    [!p[?3;4l>(B[?1h=[?12l[?25h
    Welcome to minicom 2.7
    
    OPTIONS: I18n 
    Compiled on Nov 15 2018, 20:18:47.
    Port /dev/ttyUSB0, 16:47:05
    
    Press CTRL-A Z for help on special keys
    
    [IPU1-0]     84.603977 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.604190 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.604373 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
    [IPU1-0]     84.605136 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.703989 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.704203 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.704355 s: AlgorithmFxn_RadarFftProcess: currProfile[10]
    [IPU1-0]     84.705118 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.803971 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.804184 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.804367 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
    [IPU1-0]     84.805130 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.903983 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.904196 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
    [IPU1-0]     84.904379 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     84.905142 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.003995 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.004209 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.004392 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
     [IPU1-0]     85.005124 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.104007 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.104221 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.104404 s: AlgorithmFxn_RadarFftProcess: currProfile[3]
     [IPU1-0]     85.105197 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.204050 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.204294 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.204447 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     85.205209 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.304001 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.304245 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.304398 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     85.305160 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.404013 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.404227 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.404410 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     85.405172 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.504026 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.504239 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.504422 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     85.505215 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.604038 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.604251 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.604434 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     85.605166 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.704050 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.704264 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.704447 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     85.704630 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.804062 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.804276 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.804459 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     85.805191 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.904074 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.904288 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     85.904471 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     85.905203 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.004087 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.004300 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.004483 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     86.004666 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.104099 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.104312 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.104495 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     86.104678 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.204111 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.204325 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.204477 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     86.204691 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.304123 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.304337 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.304520 s: AlgorithmFxn_RadarFftProcess: currProfile[4]
     [IPU1-0]     86.305008 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.404105 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.404349 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.404501 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
     [IPU1-0]     86.405264 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.504117 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.504361 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.504514 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     86.505276 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.604129 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.604373 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.604526 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     86.605288 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.704142 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.704355 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.704538 s: AlgorithmFxn_RadarFftProcess: currProfile[4]
     [IPU1-0]     86.705026 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.804154 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.804367 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.804550 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     86.805282 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.904166 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.904410 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     86.904562 s: AlgorithmFxn_RadarFftProcess: currProfile[10]
     [IPU1-0]     86.905325 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.004178 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.004392 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.004575 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     87.005307 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.104190 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.104404 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.104587 s: AlgorithmFxn_RadarFftProcess: currProfile[4]
     [IPU1-0]     87.105105 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.204203 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.204416 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.204599 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     87.205331 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.304215 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.304428 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.304611 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
     [IPU1-0]     87.305343 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.404227 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.404440 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.404593 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     87.405111 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.504239 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.504453 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.504605 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     87.505124 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.604221 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.604465 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.604617 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     87.605136 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.704233 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.704477 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.704630 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     87.705392 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.804245 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.804489 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.804642 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     87.805404 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.904257 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.904471 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     87.904654 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     87.905416 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.004270 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.004483 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.004666 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     88.005185 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.104282 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.104495 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.104678 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
     [IPU1-0]     88.105441 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.204294 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.204508 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.204660 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     88.205209 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.304276 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.304520 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.304672 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     88.305465 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.404288 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.404532 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.404684 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     88.405264 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.504361 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.504575 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.505032 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     88.505551 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.604312 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.604526 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.604709 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     88.605471 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.704325 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.704538 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.704721 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     88.705484 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.804337 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.804550 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.804733 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     88.805496 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.904349 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.904562 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     88.904715 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
     [IPU1-0]     88.905508 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.004361 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.004575 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.004727 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
     [IPU1-0]     89.005520 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.104373 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.104587 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.104739 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     89.105288 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.110992 s: 
     [IPU1-0] Unsupported option ''. Please try again
     [IPU1-0]     89.111083 s: 
     [IPU1-0]  
     [IPU1-0]  ====================
     [IPU1-0]  Chains Run-time Menu
     [IPU1-0]  ====================
     [IPU1-0]  
     [IPU1-0]  0: Stop Chain
     [IPU1-0]  
     [IPU1-0]  p: Print Performance Statistics 
     [IPU1-0]  
     [IPU1-0]  g: Control GUI output 
     [IPU1-0]  
     [IPU1-0]  c: Control Calibration 
     [IPU1-0]  
     [IPU1-0]  d: Control Peak Detection 
     [IPU1-0]  
     [IPU1-0]  Enter Choice: 
     [IPU1-0]  
     [IPU1-0]     89.204355 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.204599 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.204752 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     89.205514 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.304398 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.304611 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.305038 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     89.305557 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.404379 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.404623 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.405050 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     89.405569 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.504392 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.504605 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.505063 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     89.505337 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.604404 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.604617 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.605075 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     89.605349 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.704416 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.704630 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.705087 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     89.705606 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.804398 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.804642 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.805099 s: AlgorithmFxn_RadarFftProcess: currProfile[5]
     [IPU1-0]     89.805587 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.904440 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.904654 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     89.905081 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     89.905569 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.004422 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.004666 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.005093 s: AlgorithmFxn_RadarFftProcess: currProfile[3]
     [IPU1-0]     90.005581 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.104434 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.104678 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.105105 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     90.105349 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.158817 s: 
     [IPU1-0] Unsupported option 'q'. Please try again
     [IPU1-0]     90.158909 s: 
     [IPU1-0]  
     [IPU1-0]  ====================
     [IPU1-0]  Chains Run-time Menu
     [IPU1-0]  ====================
     [IPU1-0]  
     [IPU1-0]  0: Stop Chain
     [IPU1-0]  
     [IPU1-0]  p: Print Performance Statistics 
     [IPU1-0]  
     [IPU1-0]  g: Control GUI output 
     [IPU1-0]  
     [IPU1-0]  c: Control Calibration 
     [IPU1-0]  
     [IPU1-0]  d: Control Peak Detection 
     [IPU1-0]  
     [IPU1-0]  Enter Choice: 
     [IPU1-0]  
     [IPU1-0]     90.204447 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.204660 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.205118 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     90.205575 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.304459 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.304672 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.305130 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     90.305618 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.404471 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.404684 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.405142 s: AlgorithmFxn_RadarFftProcess: currProfile[3]
     [IPU1-0]     90.405599 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.504483 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.504697 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.505154 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     90.505398 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.604495 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.604709 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.605166 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     90.605380 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.704477 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.704721 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.705148 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     90.705606 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.804489 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.804703 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.805160 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     90.805618 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.904471 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     90.905142 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.905355 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     90.905508 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.004483 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.004727 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.005185 s: AlgorithmFxn_RadarFftProcess: currProfile[9]
     [IPU1-0]     91.005642 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.104495 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     91.104739 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.105197 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.105441 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.204508 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.204752 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.205209 s: AlgorithmFxn_RadarFftProcess: currProfile[3]
     [IPU1-0]     91.205667 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.304520 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.304733 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.305191 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     91.305435 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.404532 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.404745 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.405233 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     91.405447 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.504544 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.504758 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.505246 s: AlgorithmFxn_RadarFftProcess: currProfile[4]
     [IPU1-0]     91.505459 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.604556 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.604770 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.605227 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     91.605685 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.704569 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.704782 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.705331 s: AlgorithmFxn_RadarFftProcess: currProfile[7]
     [IPU1-0]     91.705758 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.804550 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.804794 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.805252 s: AlgorithmFxn_RadarFftProcess: currProfile[6]
     [IPU1-0]     91.805740 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.904562 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.904776 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [IPU1-0]     91.905264 s: AlgorithmFxn_RadarFftProcess: currProfile[8]
     [IPU1-0]     91.905477 s: AlgorithmFxn_RadarFftProcess: currProfile[0]
     [?12l[?25h[?12l[?25h[?1l>[!p[?3;4l>

    Beamforming(BF) use case reports correct profile ID consistently, however MIMO use case prints out random numbers after reporting the correct profile ID. What is causing this behavior on the MIMO use case?
    There's no code-change on the SDK we used for this test. 

    Also, what can we do to have the MIMO use case report the correct profile ID all the time?(as seen on BF use case)?

    Thank you.

  • UPDATE ON FINDINGS:

    So we found out that the Profile IDs are reported incorrectly when we run the use case RIGHT AFTER we plug the SD card into the board. If we do a reset either by the onboard button or cycling power to it, the Profile IDs are reported correctly. 

    However, if we take the SD card out and plug the SD card back in and then run the Use cases, the profile IDs reported are all incorrect. This behavior is consistent and repeatable.

    What is the relation between plugging in the SD card and incorrect reporting of the profile ID? Is there an explanation?

  • Do you mean the SD card was ejected when the baord power was on and then inserted again?

    RTOS SD driver doesn't support hot plug and play. The SD card read function will not work properly.

    Radar use case will access SD card for calibration data so that could have an impact.

  • We didn't mean hot plug and play.

    The Radar board was unplugged, then the SD card was inserted, and then the board was powered on. That's what we mean by taking the SD card out and plugging it back in. Sorry for the confusion.

  • So if I understand correctly, the below sequence generates incorrect profile ID.

    Asher Farooqui said:
    he Radar board was unplugged, then the SD card was inserted, and then the board was powered on. That's what we mean by taking the SD card out

    However, if you just reset the board again, the profile ID will be correct.

    Is this correct?

  • Reset the board with the onboard reset button, Yes.

  • Can you check if only the profile ID is incorrect?

    I am wondering if the ADC data is also incorrect in this case.

  • The issue here is we would like the profileID to be correct independent of how the HW is power cycle. We have not even gotten to the point of switch radar mode (profile) to expect the profileID changed. This is obviously a BUG in SDK or AWR FW. Why can't you guys (after we reported a reproducible issue) take it as an action item and investigate it and tell us why or better yet give us a fix for the issue rather than continue asking to feed you more data? We have done pretty thoroughly in my opinion.

    --Khai

  • Hi,

    According to the configuration file you gave me above, there is a run-time problem, and the log return value is used to locate the undefined problem in the configuration file.What should I do?

    Regards,

    Joe

  • Hi Joe,

    Thanks for picking up this ticket. Now we are talking. You actually took my config file and ran with it and found a run-time problem. Can you share what this is or specifically the error code. More importantly how can we fix the issue in the config file attached above?

    Thanks,

    --Khai

  • Hi,

    thank you very much for the configuration file you provided. Now the above problems have been solved.

    Regards,

    Joe