Hello:
config advanced chirp:tx_en,but it can't work by the current value.
the configuration process is:
1.config profile
2.config advanced chirp
3.config advanced frame
And the advanced chirp code(TxEnCfgData is 0x7,enable 4 tx ):
#define CHIRPS_PER_CYCLE 192
static int32_t nsw_MSS_CLIAdvancedChirpCfg (int32_t argc, char* argv[])
{
/* profile ID LUT dither local buffer */
rlInt8_t ProfileCfgData[2] = { 0 };
rlInt8_t StartFreqSlopeData[CHIRPS_PER_CYCLE] = { 0 };
/* Tx Enable LUT dither local buffer */
rlUInt8_t TxEnCfgData[CHIRPS_PER_CYCLE] = { 0 };
/* Tx0 Phase shifter LUT dither local buffer */
rlInt8_t Tx0PhShiftData[CHIRPS_PER_CYCLE] = { 0 };
rlAdvChirpLUTTx1PhShiftCfg_t AdvChirpLUTTx1PhShiftCfgArgs = { 0 };
/* Tx1 Phase shifter LUT dither local buffer */
rlInt8_t Tx1PhShiftData[CHIRPS_PER_CYCLE] = { 0 };
rlAdvChirpLUTTx2PhShiftCfg_t AdvChirpLUTTx2PhShiftCfgArgs = { 0 };
/* Tx2 Phase shifter LUT dither local buffer */
rlInt8_t Tx2PhShiftData[CHIRPS_PER_CYCLE] = { 0 };
/* Tx3 Phase shifter LUT dither local buffer */
rlInt8_t Tx3PhShiftData[CHIRPS_PER_CYCLE] = { 0 };
rlUInt8_t BpmEnCfgData[CHIRPS_PER_CYCLE] = { 0 };
rlUInt8_t IdleTimeData[CHIRPS_PER_CYCLE] = { 0 };
rlUInt8_t ADCStartTimeData[CHIRPS_PER_CYCLE] = { 0 };
uint16_t i;
/* Frequency start LUT dither local buffer */
rlInt16_t StartFreqData[CHIRPS_PER_CYCLE] = { 0 }; /* Change this based on the chirp param size*/
rlAdvChirpCfg_t AdvChirpCfgArgs = { 0 };
rlFillLUTParams_t rlFillLUTParamsArgs = { 0 };
rlAdvChirpLUTCfg_t rlAdvChirpLUTCfgArgs = { 0 };
rlAdvChirpLUTTx0PhShiftCfg_t AdvChirpLUTTx0PhShiftCfgArgs = { 0 };
int32_t retVal = RL_RET_CODE_OK;
int32_t bufIdx = 0;
/* Configure Profile (Param Index = 0) */
/* Fixed delta dither is not supported for profile parameter */
/* Fixed Profile ID:0 for all the chirps */
/* Chirp Profile */
/* 0-N 0 */
#if 1
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_CHIRP_PROFILE_VAR;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE; /* reset back to original offset after 2nd burst (512*2) chirps */
AdvChirpCfgArgs.lutParamUpdatePeriod = CHIRPS_PER_CYCLE/2;
AdvChirpCfgArgs.lutPatternAddressOffset = 0;
AdvChirpCfgArgs.numOfPatterns = 2;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
/* profile index */
ProfileCfgData[0] = 0;
ProfileCfgData[1] = 1;
// ProfileCfgData[2] = 2;
// ProfileCfgData[3] = 3;
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_CHIRP_PROFILE_VAR;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, &ProfileCfgData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
#endif
/* reserved starting 16 WORD for param type with Fixed dither */
//lutOffsetInNBytes += RESERVED_DITHER_LUT_SIZE * 4; /* convert that into bytes */
/* Start Frequency (Param Index = 1) */
/* For given modulation scheme (increase and decrease startFreq dither), we can't use delta dither but LUT dither.
*/
/* Configuring 512 *2 unique start frequency LUT dither (+0.0014, +0.0014*2...., +0.0014*511, -0.0014,-0.0014*2...., -0.0014*511) GHz : 1.4MHz increment at every chirp till 512, then decrement by -1.4MHz at every chirp till next 512 chirps */
/* The new start frequency LUT dither is picked every chirp (update period = 1) and it will reset every [512 * 2] chirps [= at 2 bursts] */
/* Chirp Start Freq (from Profile) + LUT dither + Fixed delta dither
0 77 GHz + 0.0014 GHz + 0
1 77 GHz + 0.0014 *2 GHz + 0
2 77 GHz + 0.0014 *3 GHz + 0
........
........
511 77 GHz + 0.0014 *511 GHz + 0
512 77 GHz - 0.0014 GHz + 0
513 77 GHz - 0.0014 *2 GHz + 0
514 77 GHz - 0.0014 *3 GHz + 0
........
........
1023 77 GHz - 0.0014 *511 GHz + 0
(LUT dither reset period = 1024) and so on */
/* LUT start address offset for the start frequency chirp parameter is made 4 */
/* AdvChirpLUTData[4] is the start address offset (Offset = 4), Each data parameter is 2 bytes (used lutChirpParamSize = 1 and lutChirpParamScale = 0) */
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_CHIRP_FREQ_START_VAR;
AdvChirpCfgArgs.resetMode = 1;
AdvChirpCfgArgs.deltaResetPeriod = 0;
AdvChirpCfgArgs.deltaParamUpdatePeriod = 1;
AdvChirpCfgArgs.sf0ChirpParamDelta =34953;
AdvChirpCfgArgs.sf1ChirpParamDelta =34953;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset =CHIRPS_PER_CYCLE * 1;//4; /* start address offset (4 bytes boundary) for this chirp_param_type */
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutChirpParamSize = 1; /* 2 byte size of each freqStart dither var */
AdvChirpCfgArgs.lutChirpParamScale = 0;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
/* Dividing the input param data by 1 LSB . 1 LSB = ((3.6 * 10^9)/2^26) * 2^Scale Hz = (3.6 * 2^Scale)/2^26 GHz */
for(i=0; i < CHIRPS_PER_CYCLE; i++)
{
StartFreqData[i] = 0;
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_CHIRP_FREQ_START_VAR;
rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, (rlInt8_t*)&StartFreqData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
/* Frequency Slope (Param Index = 2) */
/* LUT Dither to this chirp param type */
/* LUT start address offset for the slope chirp parameter is made 2056 */
#if 1
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_CHIRP_FREQ_SLOPE_VAR;
AdvChirpCfgArgs.deltaResetPeriod =1;
AdvChirpCfgArgs.deltaParamUpdatePeriod =0;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset =CHIRPS_PER_CYCLE * 2;;
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i=0; i < CHIRPS_PER_CYCLE; i++)
{
StartFreqSlopeData[i] = 0;
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_CHIRP_FREQ_SLOPE_VAR;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, (rlInt8_t*)&StartFreqSlopeData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
#endif
/* Idle time (Param Index = 3) */
/* Fixed idle time delta dither 2 us at every 512 chirp (update period = 512) and it will reset every 512*3 chirps.
NO LUT DITHER applied here. */
/* Chirp Idle time (from Profile) + LUT dither + Fixed delta dither
0-511 100 us + 0 + 0
512-1023 100 us + 0 + 2 us
1024-1535 100 us + 0 + 2*2 us
(Delta dither reset period = 512*3 ) and so on */
/* Number of unique LUT dither parameters (4) */
#if 1
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_CHIRP_IDLE_TIME_VAR;
AdvChirpCfgArgs.deltaResetPeriod = 1;//CHIRPS_PER_CYCLE*3; /* Reset delta at 512 * 3 */
AdvChirpCfgArgs.deltaParamUpdatePeriod = 0;//CHIRPS_PER_CYCLE; /* add delta value after 512 chirps */
AdvChirpCfgArgs.sf0ChirpParamDelta = (uint32_t)((float)CHIRP_IDLE_TIME_DITH * 1000.0 / 10.0);
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset = DUMMY_LUT_ADDR_OFFSET;//CHIRPS_PER_CYCLE* 3;
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutChirpParamScale = 0;
AdvChirpCfgArgs.lutChirpParamSize = 0;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i=0; i < CHIRPS_PER_CYCLE; i++)
{
IdleTimeData[i] = 0;
}
/* ADC start time (Param Index = 4) */
/* No Dither to this chirp param type */
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_CHIRP_ADC_START_TIME_VAR;
AdvChirpCfgArgs.lutResetPeriod = 1;
AdvChirpCfgArgs.lutParamUpdatePeriod = 0;
AdvChirpCfgArgs.lutPatternAddressOffset = DUMMY_LUT_ADDR_OFFSET; /* Fixed LUT pattern to zero offset */
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i=0; i < CHIRPS_PER_CYCLE; i++)
{
ADCStartTimeData[i] = 0;
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
// rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_CHIRP_ADC_START_TIME_VAR;
// rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
// rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
// rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
// retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, &ADCStartTimeData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
#endif
/* BPM Enable (Param Index = 6) */
/* No LUT or Delta Dither for BPM Enable parameter */
#if 1
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_CHIRP_BPM_VAL_VAR;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset = DUMMY_LUT_ADDR_OFFSET;//CHIRPS_PER_CYCLE * 4; /* Fixed LUT pattern to offset */
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i=0; i < CHIRPS_PER_CYCLE; i++)
{
BpmEnCfgData[i] = 0;
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
// rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_CHIRP_BPM_VAL_VAR;
// rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
// rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
// rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
// retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, &BpmEnCfgData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
#endif
/* TX0 Phase shifter (Param Index = 7) */
/* No Delta or LUT dither for TX0 phase shifter */
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_TX0_PHASE_SHIFT_VAR;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset = CHIRPS_PER_CYCLE * 3; /* Fixed LUT pattern to offset */
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i = 0; i < CHIRPS_PER_CYCLE; i++)
{
Tx0PhShiftData[i] = 0;
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_TX0_PHASE_SHIFT_VAR;
rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, &Tx0PhShiftData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
/* TX1 Phase shifter (Param Index = 8) */
/* No Delta or LUT dither for TX0 phase shifter */
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_TX1_PHASE_SHIFT_VAR;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset = CHIRPS_PER_CYCLE * 4; /* Fixed LUT pattern to offset */
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i = 0; i < CHIRPS_PER_CYCLE; i++)
{
Tx1PhShiftData[i] = (rlInt8_t)((13 * 64) / 360);
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_TX1_PHASE_SHIFT_VAR;
rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, &Tx1PhShiftData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
/* TX2 Phase shifter (Param Index = 9) */
/* No Delta or LUT dither for TX2 phase shifter */
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_TX2_PHASE_SHIFT_VAR;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset = CHIRPS_PER_CYCLE * 5; /* Fixed LUT pattern to offset */
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i = 0; i < CHIRPS_PER_CYCLE; i++)
{
Tx2PhShiftData[i] = (rlInt8_t)((30 * 64) / 360);
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_TX2_PHASE_SHIFT_VAR;
rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, &Tx2PhShiftData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
/* TX3 Phase shifter (Param Index = 10) */
/* No Delta or LUT dither for TX0 phase shifter */
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_TX3_PHASE_SHIFT_VAR;
AdvChirpCfgArgs.lutResetPeriod = CHIRPS_PER_CYCLE;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset = CHIRPS_PER_CYCLE * 6; /* Fixed LUT pattern to zero offset */
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i = 0; i < CHIRPS_PER_CYCLE; i++)
{
Tx3PhShiftData[i] = (rlInt8_t)((50 * 64) / 360);
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_TX0_PHASE_SHIFT_VAR;
rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, &Tx3PhShiftData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
/* Tx Enable (Param Index = 5) */
/* Fixed delta dither is not supported for Tx Enable parameter */
/* Configuring 4 unique Tx enable mask (7,3,1,2) in the generic SW LUT - LUT Reset period (4) */
/* The new Tx enable mask is picked every chirp (update period = 1) and it will reset every 4 chirps */
/* Chirp (burst) Tx enable mask
0-511 1
512-1023 2
1024-1535 4
1536-2047 8 and then reset */
/* Each data parameter is 4 bits */
memset((void *)&AdvChirpCfgArgs, 0, sizeof(rlAdvChirpCfg_t));
AdvChirpCfgArgs.chirpParamIdx = RL_LUT_CHIRP_TX_EN_VAR;
AdvChirpCfgArgs.lutResetPeriod = 1;
AdvChirpCfgArgs.lutParamUpdatePeriod = 1;
AdvChirpCfgArgs.lutPatternAddressOffset =CHIRPS_PER_CYCLE * 7;//DUMMY_LUT_ADDR_OFFSET;//2188;
AdvChirpCfgArgs.numOfPatterns = CHIRPS_PER_CYCLE;
retVal = rlSetAdvChirpConfig(RL_DEVICE_MAP_INTERNAL_BSS, &AdvChirpCfgArgs);
if (retVal != RL_RET_CODE_OK)
{
printf("*** Failed - rlSetAdvChirpConfig failed with error code %d*** \n\n", retVal);
return retVal;
}
for(i = 0; i < CHIRPS_PER_CYCLE; i++)
{
TxEnCfgData[i] = 0x7;
}
/* fill up the Chirp LUT buffer which is used later for rlSetAdvChirpLUTConfig API */
rlFillLUTParamsArgs.chirpParamIndex = RL_LUT_CHIRP_TX_EN_VAR;
rlFillLUTParamsArgs.chirpParamSize = AdvChirpCfgArgs.lutChirpParamSize;
rlFillLUTParamsArgs.inputSize = AdvChirpCfgArgs.numOfPatterns;
rlFillLUTParamsArgs.lutGlobalOffset = lutOffsetInNBytes;
retVal = rlDevSetFillLUTBuff(&rlFillLUTParamsArgs, (rlInt8_t*)&TxEnCfgData[0], &AdvChirpLUTData[lutOffsetInNBytes], &lutOffsetInNBytes);
while(lutOffsetInNBytes%4 != 0)
{
lutOffsetInNBytes+=1;
}
/* Send the locally programmed LUT data to the device */
rlAdvChirpLUTCfgArgs.lutAddressOffset = 0;
rlAdvChirpLUTCfgArgs.numBytes = lutOffsetInNBytes;
retVal = rlSetMultiAdvChirpLUTConfig(RL_DEVICE_MAP_INTERNAL_BSS, &rlAdvChirpLUTCfgArgs, &AdvChirpLUTData[0]);
if (retVal != RL_RET_CODE_OK)
{
printf("rlSetMultiAdvChirpLUTConfig for deviceMap %u failed with error code %d \n\n", RL_DEVICE_MAP_INTERNAL_BSS, retVal);
}
else
{
printf("rlSetMultiAdvChirpLUTConfig success for deviceMap %u with lutAddressOffset = %d and numBytes = %d\n\n", RL_DEVICE_MAP_INTERNAL_BSS, rlAdvChirpLUTCfgArgs.lutAddressOffset, rlAdvChirpLUTCfgArgs.numBytes);
}
test_print ("advanced chirp.\n");
return retVal;
}
thank you