Other Parts Discussed in Thread: CC2510
Tool/software: Code Composer Studio
Hello,
I am unable to get the rfListenBeforeTalk example to work unmodified. It seems to crash during
RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
Even when running on a Launchpad for the CC1310
Additionally, I have tried implementing the example into my own already, and whilst I get past the setting of the frequency, my code crashes when running the RF_runCmd for the RF_cmdNop:
RF_flushCmd(rfHandle, RF_CMDHANDLE_FLUSH_ALL, 0); RF_close(rfHandle); /* Initialize the radio */ RF_Params rfParams; RF_Params_init(&rfParams); RF_cmdNop.startTrigger.pastTrig = 1; RF_cmdNop.startTrigger.triggerType = TRIG_NOW ; RF_cmdNop.startTime = 0; /* Set up the next pointers for the command chain */ RF_cmdNop.pNextOp = (rfc_radioOp_t*) &RF_cmdPropCs; RF_cmdPropCs.pNextOp = (rfc_radioOp_t*) &RF_cmdCountBranch; RF_cmdCountBranch.pNextOp = (rfc_radioOp_t*) &RF_cmdPropTxAdv; RF_cmdCountBranch.pNextOpIfOk = (rfc_radioOp_t*) &RF_cmdPropCs; /* Customize the API commands with application specific defines */ RF_cmdPropCs.rssiThr = RSSI_THRESHOLD_DBM; RF_cmdPropCs.csEndTime = (IDLE_TIME_US + 150) * 4; /* Add some margin */ RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY; /* Set application specific fields */ RF_cmdPropTxAdv.pktLen = (uint16_t) (packet[0] + 1) & 0x00FF; RF_cmdPropTxAdv.pPkt = packet; /* Request access to the radio */ rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*) &RF_cmdPropRadioDivSetup, &rfParams); /* Set the frequency */ RF_runCmd(rfHandle, (RF_Op*) &RF_cmdFs, RF_PriorityNormal, NULL, 0); RF_EventMask terminationReason; /* Send packet */ terminationReason = RF_runCmd(rfHandle, (RF_Op*) &RF_cmdNop, RF_PriorityNormal, NULL, RF_EventTxEntryDone);
My smart rf studio settings are:
uint32_t pOverrides[] = { // override_use_patch_wb_dsss.xml // PHY: Use MCE RAM patch, RFE RAM patch MCE_RFE_OVERRIDE(0,4,0,1,0,0), // override_synth_prop_863_930_div5.xml // Synth: Set recommended RTRIM to 7 HW_REG_OVERRIDE(0x4038,0x0037), // Synth: Set Fref to 4 MHz (uint32_t)0x000684A3, // Synth: Configure fine calibration setting HW_REG_OVERRIDE(0x4020,0x7F00), // Synth: Configure fine calibration setting HW_REG_OVERRIDE(0x4064,0x0040), // Synth: Configure fine calibration setting (uint32_t)0xB1070503, // Synth: Configure fine calibration setting (uint32_t)0x05330523, // Synth: Set loop bandwidth after lock to 20 kHz (uint32_t)0x0A480583, // Synth: Set loop bandwidth after lock to 20 kHz (uint32_t)0x7AB80603, // Synth: Configure VCO LDO (in ADI1, set VCOLDOCFG=0x9F to use voltage input reference) ADI_REG_OVERRIDE(1,4,0x9F), // Synth: Configure synth LDO (in ADI1, set SLDOCTL0.COMP_CAP=1) ADI_HALFREG_OVERRIDE(1,7,0x4,0x4), // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering (uint32_t)0x02010403, // Synth: Configure extra PLL filtering (uint32_t)0x00108463, // Synth: Increase synth programming timeout (0x04B0 RAT ticks = 300 us) (uint32_t)0x04B00243, // override_synth_disable_bias_div5.xml // Synth: Set divider bias to disabled HW32_ARRAY_OVERRIDE(0x405C,1), // Synth: Set divider bias to disabled (specific for loDivider=5) (uint32_t)0x18000200, // override_phy_gfsk_rx.xml // Rx: Set LNA bias current trim offset to 3 (uint32_t)0x00038883, // Rx: Freeze RSSI on sync found event HW_REG_OVERRIDE(0x6084,0x35F1), // override_phy_wb_dsss_spreading_8.xml // Set correlation threshold to 0x48 HW_REG_OVERRIDE(0x5108,0x0048), // Enable PA ramping of 5 us and AGC reference level of 0x1E HW_REG_OVERRIDE(0x6088,0x1F1E), // Set spreading = 8, K = 4 HW_REG_OVERRIDE(0x52AC,0x0F33), // Tx: Configure PA ramping setting (0x08) for approximately 5 us PA ramp time HW_REG_OVERRIDE(0x608C,0x3F13), // TX: set intFreq = 0 (uint32_t)0x00000343, // override_phy_rx_rssi_offset_5db.xml // Rx: Set RSSI offset to adjust reported RSSI by +5 dB (default: 0), trimmed for external bias and differential configuration (uint32_t)0x00FB88A3, (uint32_t)0xFFFFFFFF }; // CMD_PROP_RADIO_DIV_SETUP // Proprietary Mode Radio Setup Command for All Frequency Bands rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_cmdPropRadioDivSetup = { .commandNo = 0x3807, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .modulation.modType = 0x1, .modulation.deviation = 0x3C0, .symbolRate.preScale = 0xF, .symbolRate.rateWord = 0x4CCCD, .symbolRate.decimMode = 0x0, .rxBw = 0x2C, .preamConf.nPreamBytes = 0x5, .preamConf.preamMode = 0x1, .formatConf.nSwBits = 0x20, .formatConf.bBitReversal = 0x0, .formatConf.bMsbFirst = 0x0, .formatConf.fecMode = 0x8, .formatConf.whitenMode = 0x1, .config.frontEndMode = 0x0, .config.biasMode = 0x1, .config.analogCfgMode = 0x0, .config.bNoFsPowerUp = 0x0, .txPower = 0xA73F, .pRegOverride = pOverrides, .centerFreq = 0x0399, .intFreq = 0x0B33, .loDivider = 0x05 }; // CMD_FS // Frequency Synthesizer Programming Command rfc_CMD_FS_t RF_cmdFs = { .commandNo = 0x0803, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .frequency = 0x0393, .fractFreq = 0x0000, .synthConf.bTxMode = 0x0, .synthConf.refFreq = 0x0, .__dummy0 = 0x00, .__dummy1 = 0x00, .__dummy2 = 0x00, .__dummy3 = 0x0000 }; // CMD_PROP_TX_ADV // Proprietary Mode Advanced Transmit Command rfc_CMD_PROP_TX_ADV_t RF_cmdPropTxAdv = { .commandNo = 0x3803, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .pktConf.bFsOff = 0x0, .pktConf.bUseCrc = 0x1, .pktConf.bCrcIncSw = 0x0, .pktConf.bCrcIncHdr = 0x0, .numHdrBits = 0x00, .pktLen = 0x001E, .startConf.bExtTxTrig = 0x0, .startConf.inputMode = 0x0, .startConf.source = 0x0, .preTrigger.triggerType = 0x0, .preTrigger.bEnaCmd = 0x0, .preTrigger.triggerNo = 0x0, .preTrigger.pastTrig = 0x0, .preTime = 0x00000000, .syncWord = 0x930B51DE, .pPkt = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx }; // CMD_NOP // No Operation Command rfc_CMD_NOP_t RF_cmdNop = { .commandNo = 0x0801, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x0, .condition.nSkip = 0x0 }; // CMD_PROP_CS // Carrier Sense Command rfc_CMD_PROP_CS_t RF_cmdPropCs = { .commandNo = 0x3805, .status = 0x0000, .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx .startTime = 0x00000000, .startTrigger.triggerType = 0x0, .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = 0x1, .condition.nSkip = 0x0, .csFsConf.bFsOffIdle = 0x0, .csFsConf.bFsOffBusy = 0x0, .__dummy0 = 0x00, .csConf.bEnaRssi = 0x0, .csConf.bEnaCorr = 0x0, .csConf.operation = 0x0, .csConf.busyOp = 0x0, .csConf.idleOp = 0x0, .csConf.timeoutRes = 0x0, .rssiThr = 0x00, .numRssiIdle = 0x00, .numRssiBusy = 0x00, .corrPeriod = 0x0000, .corrConfig.numCorrInv = 0x0, .corrConfig.numCorrBusy = 0x0, .csEndTrigger.triggerType = 0x0, .csEndTrigger.bEnaCmd = 0x0, .csEndTrigger.triggerNo = 0x0, .csEndTrigger.pastTrig = 0x0, .csEndTime = 0x00000000 }; // CMD_COUNT_BRANCH rfc_CMD_COUNT_BRANCH_t RF_cmdCountBranch = { .commandNo = CMD_COUNT_BRANCH, .status = 0x0000, .pNextOp = 0, // Set this to (uint8_t*)&RF_cmdPropTx in the application .startTime = 0x00000000, .startTrigger.triggerType = TRIG_NOW, // Triggers immediately .startTrigger.bEnaCmd = 0x0, .startTrigger.triggerNo = 0x0, .startTrigger.pastTrig = 0x0, .condition.rule = COND_STOP_ON_FALSE, // Run next command if this command returned TRUE, stop if it returned FALSE // End causes for the CMD_COUNT_BRANCH command: // Finished operation with counter = 0 when being started: DONE_OK TRUE // Finished operation with counter > 0 after decrementing: DONE_OK TRUE // Finished operation with counter = 0 after decrementing: DONE_COUNTDOWN FALSE .condition.nSkip = 0x0, .counter = 0, // On start, the radio CPU decrements the value, and the end status of the operation differs if the result is zero // This number is set in the application (CS_RETRIES_WHEN_BUSY) and determines how many times the CMD_PROP_CS should run // in the case where the channel i Busy .pNextOpIfOk = 0, // Set this to (uint8_t*)&RF_cmdPropCs in the application };
Though I have tried lots of different settings and patches, currently trying to use:
RF_prop.cpePatchFxn = &rf_patch_cpe_genfsk; RF_prop.mcePatchFxn = 0; RF_prop.rfePatchFxn = &rf_patch_rfe_genfsk;
Thank you