Hi experts,
In ccs, I want to achieve adv chirp config(only one sub-frame),adv chirp config refer to MMWL_advChirpConfigAll()(C:\ti\mmwave_dfp_02_02_03_01\ti\example\mmWaveLink_SingleChip_Example mmw_example.c) Collect ADC data through DCA1000, found a problem with a TX。Discovered by testing,there is no problem with the LUT value setting. We enable TX1 TX2 TX3 separately,the transmitted waveform is captured by the instrument . Only enable TX4,the instrument can not capture the transmitted waveform. How should I solve this problem?
I use the SDK Version(mmwave_mcuplus_sdk_04_02_00_02-Windows)
In rI_device.c ,I modify the function of rlDevSetFillLUTBuff(). I add the TX4 and gmake ,no error

Figure 1
/** @fn rlReturnVal_t rlDevSetFillLUTBuff(rlFillLUTParams_t *fillLUTParams, rlInt8_t *inData, rlInt8_t *outData, rlUInt16_t *LUTAddrOffset) * * @brief Filling chirp LUT parameter buffer for Advanced chirp configuration * @param[in] fillLUTParams - Pointer to structure used for filling chirp LUT parameter buffer * @param[in] inData - Pointer to Input chirp parameter buffer * @param[in] outData - Pointer to chirp LUT parameter buffer filled with input chirp param data * @param[in] LUTAddrOffset - Pointer to offset within the chirp LUT parameter buffer for which * input chirp param data is filled. * * @return rlReturnVal_t Success - 0, Failure - Error Code * * This API is used to fill chirp LUT parameter buffer for Advanced chirp configuration. * * @note 1: This API is supported only in AWR2243. \n * @note 2: This API doesn't send any command to device over SPI. Application needs to invoke * this API to fill up the LUT buffer for each type of chirpParamIndex. Finally, use * this filled buffer to pass it to \ref rlSetAdvChirpLUTConfig API \n */ /* DesignId : MMWL_DesignId_132 */ /* Requirements : AUTORADAR_REQ-1050 */ /*AR_CODE_REVIEW MR:R.2.2 <INSPECTED> "addrOffset is assigned based on different conditions"*/ /*LDRA_INSPECTED 8 D */ rlReturnVal_t rlDevSetFillLUTBuff(rlFillLUTParams_t *fillLUTParams, rlInt8_t *inData, rlInt8_t *outData, rlUInt16_t *LUTAddrOffset) { rlReturnVal_t retVal = RL_RET_CODE_OK; rlUInt16_t addrOffset = 0U; rlUInt16_t idx, alignIdx; RL_LOGV_ARG0("rlDevSetFillLUTBuff starts...\n"); /* check if input parameters are valid */ if ((RL_NULL_PTR == fillLUTParams) || (RL_NULL_PTR == outData) || \ (RL_NULL_PTR == inData) || (RL_NULL_PTR == LUTAddrOffset)) { /* set return error code */ retVal = RL_RET_CODE_INVALID_INPUT; RL_LOGE_ARG0("rlDevSetFillLUTBuff, Invalid input parameters\n"); } else { /* Profile ID */ if (fillLUTParams->chirpParamIndex == RL_LUT_CHIRP_PROFILE_VAR) { for (idx = 0U; idx < fillLUTParams->inputSize; idx++) { if ((idx % 2U) == 0U) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 444 S */ outData[idx/2] = (rlInt8_t)(((rlUInt8_t)inData[idx]) & 0xFU); } else { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 444 S */ /*AR_CODE_REVIEW MR:R.10.1, 10.2 <INSPECTED> "outData cannot be -ve"*/ /*LDRA_INSPECTED 329 S */ outData[idx/2] |= (rlInt8_t)((((rlUInt8_t)inData[idx]) & 0xFU) << 4U); } } addrOffset = ((rlUInt16_t)(fillLUTParams->inputSize - 4U) % 4U) + \ fillLUTParams->inputSize; alignIdx = fillLUTParams->inputSize; /* fill up the remaining bytes to make it 4 bytes aligned */ for (idx = alignIdx; idx < addrOffset; idx++) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ outData[idx] = 0; } } /* Start Frequency */ else if (fillLUTParams->chirpParamIndex == RL_LUT_CHIRP_FREQ_START_VAR) { /* 4 Bytes of size */ if (fillLUTParams->chirpParamSize == 0U) { (void)memcpy(outData, inData, fillLUTParams->inputSize * 4U); addrOffset = fillLUTParams->inputSize * 4U; alignIdx = fillLUTParams->inputSize * 4U; } /* 2 Bytes of size */ else if (fillLUTParams->chirpParamSize == 1U) { (void)memcpy(outData, inData, fillLUTParams->inputSize * 2U); addrOffset = ((rlUInt16_t)((fillLUTParams->inputSize * 2U) - 4U) % 4U) + \ (fillLUTParams->inputSize * 2U); alignIdx = fillLUTParams->inputSize * 2U; } /* 1 Bytes of size */ else if (fillLUTParams->chirpParamSize == 2U) { #ifndef MMWL_BIG_ENDIAN (void)memcpy(outData, inData, fillLUTParams->inputSize); #else /* For the big-endian host, we need to swap each of the 2 bytes */ for (idx = 0U; idx < fillLUTParams->inputSize; idx += 2U) { outData[idx + 1U] = inData[idx]; outData[idx] = inData[idx + 1U]; } #endif addrOffset = ((rlUInt16_t)(fillLUTParams->inputSize - 4U) % 4U) + \ fillLUTParams->inputSize; alignIdx = fillLUTParams->inputSize; } /* Invalid chirp param size */ else { /* set return error code */ retVal = (rlReturnVal_t)RL_RET_CODE_LUT_CHIRP_PAR_SCALE_SIZE_INVALID; RL_LOGE_ARG0("rlDevSetFillLUTBuff, Invalid chirp parameter size\n"); addrOffset = 0U; alignIdx = 0U; } /* fill up the remaining bytes to make 4 bytes aligned */ for (idx = alignIdx; idx < addrOffset; idx++) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ outData[idx] = 0; } } /* Frequency Slope */ else if (fillLUTParams->chirpParamIndex == RL_LUT_CHIRP_FREQ_SLOPE_VAR) { (void)memcpy(outData, inData, fillLUTParams->inputSize); addrOffset = ((rlUInt16_t)(fillLUTParams->inputSize - 4U) % 4U) + \ fillLUTParams->inputSize; alignIdx = fillLUTParams->inputSize; /* fill up the remaining bytes to make 4 bytes aligned */ for (idx = alignIdx; idx < addrOffset; idx++) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ outData[idx] = 0; } } /* Idle Time / ADC Start Time */ else if ((fillLUTParams->chirpParamIndex == RL_LUT_CHIRP_IDLE_TIME_VAR) || \ (fillLUTParams->chirpParamIndex == RL_LUT_CHIRP_ADC_START_TIME_VAR)) { /* 2 Bytes of size */ if (fillLUTParams->chirpParamSize == 0U) { (void)memcpy(outData, inData, fillLUTParams->inputSize * 2U); addrOffset = ((rlUInt16_t)((fillLUTParams->inputSize * 2U) - 4U) % 4U) + \ (fillLUTParams->inputSize * 2U); alignIdx = fillLUTParams->inputSize * 2U; } /* 1 Bytes of size */ /*AR_CODE_REVIEW <INSPECTED> "If condition is necessary" */ /*LDRA_INSPECTED 370 S */ else if (fillLUTParams->chirpParamSize == 1U) { #ifndef MMWL_BIG_ENDIAN (void)memcpy(outData, inData, fillLUTParams->inputSize); #else /* For the big-endian host, we need to swap each of the 2 bytes */ for (idx = 0U; idx < fillLUTParams->inputSize; idx += 2U) { outData[idx + 1U] = inData[idx]; outData[idx] = inData[idx + 1U]; } #endif addrOffset = ((rlUInt16_t)(fillLUTParams->inputSize - 4U) % 4U) + \ fillLUTParams->inputSize; alignIdx = fillLUTParams->inputSize; } /* Invalid chirp param size */ else { /* set return error code */ retVal = (rlReturnVal_t)RL_RET_CODE_LUT_CHIRP_PAR_SCALE_SIZE_INVALID; RL_LOGE_ARG0("rlDevSetFillLUTBuff, Invalid chirp parameter size\n"); addrOffset = 0U; alignIdx = 0U; } /* fill up the remaining bytes to make 4 bytes aligned */ for (idx = alignIdx; idx < addrOffset; idx++) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ outData[idx] = 0; } } /* Tx Enable / BPM Enable */ else if ((fillLUTParams->chirpParamIndex == RL_LUT_CHIRP_TX_EN_VAR) || \ (fillLUTParams->chirpParamIndex == RL_LUT_CHIRP_BPM_VAL_VAR)) { for (idx = 0U; idx < fillLUTParams->inputSize; idx++) { /*AR_CODE_REVIEW <INSPECTED> "If condition is necessary" */ /*LDRA_INSPECTED 370 S */ if ((idx % 2U) == 0U) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 444 S */ outData[idx/2] = (rlInt8_t)(((rlUInt8_t)inData[idx]) & 0x7U); } else { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 444 S */ /*AR_CODE_REVIEW MR:R.10.1, 10.2 <INSPECTED> "outData cannot be -ve"*/ /*LDRA_INSPECTED 329 S */ outData[idx/2] |= (rlInt8_t)((((rlUInt8_t)inData[idx]) & 0x7U) << 4U); } } addrOffset = ((rlUInt16_t)(fillLUTParams->inputSize - 4U) % 4U) + \ fillLUTParams->inputSize; alignIdx = fillLUTParams->inputSize; /* fill up the remaining bytes to make 4 bytes aligned */ for (idx = alignIdx; idx < addrOffset; idx++) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ outData[idx] = 0; } } /* TX0/TX1/TX2 Phase shifter */ /*AR_CODE_REVIEW <INSPECTED> "If condition is necessary" */ /*LDRA_INSPECTED 370 S */ else if ((fillLUTParams->chirpParamIndex == RL_LUT_TX0_PHASE_SHIFT_VAR) || \ (fillLUTParams->chirpParamIndex == RL_LUT_TX1_PHASE_SHIFT_VAR) || \ (fillLUTParams->chirpParamIndex == RL_LUT_TX2_PHASE_SHIFT_VAR) || \ (fillLUTParams->chirpParamIndex == RL_LUT_TX3_PHASE_SHIFT_VAR)) { for (idx = 0U; idx < fillLUTParams->inputSize; idx++) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 436 S */ /*LDRA_INSPECTED 444 S */ outData[idx] = (rlInt8_t)(((rlUInt8_t)inData[idx]) << 2U); } addrOffset = ((rlUInt16_t)(fillLUTParams->inputSize - 4U) % 4U) + \ fillLUTParams->inputSize; alignIdx = fillLUTParams->inputSize; /* fill up the remaining bytes to make 4 bytes aligned */ for (idx = alignIdx; idx < addrOffset; idx++) { /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "Accessing pointer as array"*/ /*LDRA_INSPECTED 436 S */ outData[idx] = 0; } } /* Invalid chirp parameter index */ else { /* set return error code */ retVal = (rlReturnVal_t)RL_RET_CODE_CHIRP_PARAM_IND_INVALID; RL_LOGE_ARG0("rlDevSetFillLUTBuff, Invalid chirp parameter index\n"); } } if (retVal == RL_RET_CODE_OK) { /* Update the chirp LUT address offset */ /*AR_CODE_REVIEW MR:R.18.1 <INSPECTED> "addrOffset is always greater than zero"*/ /*LDRA_INSPECTED 124 D */ *LUTAddrOffset = addrOffset + fillLUTParams->lutGlobalOffset; } RL_LOGV_ARG0("rlDevSetFillLUTBuff ends...\n"); return retVal; }