请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2650 主题中讨论的其他器件: TIMAC
我有一个在 CC2650 MCU 上构建的定制板、并已将其中的两个板分别设置为发送器和接收器。 我已经成功地使用 IEEE 802.15.4通过 SmartRF Studio 在它们之间建立了通信。 但当我尝试从应用软件执行相同的操作时、代码卡在 RF_runCmd (rfHandle、(RF_OP*)&RF_cmdIeeeTx、RF_PriorityNormal、NULL、0)上。 它被写入射频驱动器头文件中、它不支持 IEEE 802.15.4 模式所需的 IRQ_FG 和 IRQ_BG。
下面 分别是 SmartRF_settings.c 和 rf_patch_cpe_ieee.h
smartrf_settings.c
// //由 SmartRF Studio 版本2.12.0 (内部版本#147)生成 //应用的模板与 tirtos_simplelink_2_21_00兼容 //器件:CC2650修订版 C (2.2) // //********* // //参数摘要 // IEEE 通道:11 //频率:2405MHz // SFD:0 //数据包数据:255 //前导码 (32位):01010101... // TX 功率:5dBm #include #include #include #include #include #include "smartrf_settings.h" // TI-RTOS 射频模式对象 rf_Mode rf_prop = { rfMode = RF_MODE_IEEE_15_4、 .cpePatchFxn =&rf_patch_cpe_IEEE、 .mcePatchFxn = 0、 .rfePatchFxn = 0 }; //覆盖 CMD_RADIO_SETUP UINT32_t 覆盖[]= { // override_synth_ieee_15_4.xml //合成:将建议的 RTRIM 设置为5 HW_REG_OVERRIDE (0x4038、0x0035)、 //合成:将频率设置为3.43MHz (uint32_t) 0x000784A3、 //合成:将锁定后的环路带宽设置为80kHz (uint32_t) 0xA47E0583、 //合成:将锁定后的环路带宽设置为80kHz (uint32_t) 0xAE00603、 //合成:将锁定后的环路带宽设置为80kHz (uint32_t) 0x00010623、 //合成:配置 PLL 偏置 HW32_array_override (0x405C、1)、 //合成:配置 PLL 偏置 (uint32_t) 0x1801F800、 //合成:配置 PLL 延迟 HW32_array_override (0x402C、1)、 //合成:配置 PLL 延迟 (uint32_t) 0x00608402、 //合成:使用24MHz XOSC 作为同步时钟、启用额外的 PLL 滤波 (uint32_t) 0x02010403、 //合成:配置额外的 PLL 滤波 HW32_array_override (0x4034、1)、 //合成:配置额外的 PLL 滤波 (uint32_t) 0x177F0408、 //合成:配置额外的 PLL 滤波 (uint32_t) 0x38000463、 // override_phy_ieee_15_4.xml //合成:增加合成编程超时 (uint32_t) 0x05000243、 // Rx:调整 Rx FIFO 阈值以避免溢出 (uint32_t) 0x002082C3、 // override_frontend_xd.xml // Rx:设置 RSSI 偏移以将报告的 RSSI 调整-3dB (uint32_t) 0x000388A3、 // Rx:配置 LNA 偏置电流修整偏移 (uint32_t) 0x000F8883、 // Rx:调整 AGC DC 滤波器 HW_REG_OVERRIDE (0x50DC、0x002B)、 (uint32_t) 0xFFFFFFFF }; // CMD_RADIO_SETUP //预定义方案的无线电设置命令 RFC_CMD_RADIO_SETUP_t RF_RadiocmdSetup = { .commandNo = 0x0802、 .status = 0x0000、 .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx .StartTime = 0x00000000、 .startTrigger.triggerType = 0x0、 .startTrigger.bEnaCmd = 0x0、 .startTrigger.triggerNo = 0x0、 .startTrigger.PastTrig = 0x0、 .condition.rule = 0x1、 .condition.nSkip = 0x0、 .mode = 0x01、 .__dummy0 = 0x00、 .config.frontEndMode = 0x0、 config.biasMode = 0x1、 config.analogCfgMode = 0x0、 config.bNoFsPowerUp = 0x0、 TxPower = 0x9330、 .pRegOverride = pOverrides }; // CMD_FS //频率合成器编程命令 RFC_CMD_FS_t RF_cmdF = { .commandNo = 0x0803、 .status = 0x0000、 .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx .StartTime = 0x00000000、 .startTrigger.triggerType = 0x0、 .startTrigger.bEnaCmd = 0x0、 .startTrigger.triggerNo = 0x0、 .startTrigger.PastTrig = 0x0、 .condition.rule = 0x1、 .condition.nSkip = 0x0、 .frequency = 0x0965、 fractFreq = 0x0000、 synthConf.bTxMode = 0x1、 .synthConf.refFreq = 0x0、 .__dummy0 = 0x00、 .__dummy1 = 0x00、 .__dummy2=0x00, .__dummy3=0x0000 }; // CMD_IEEE_TX //命令 ID 号0x2C1 RFC_CMD_IEEE_TX_t RF_cmdieeTx = { .commandNo = 0x20001、 .status = 0x0000、 .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx .StartTime = 0x00000000、 .startTrigger.triggerType = 0x0、 .startTrigger.bEnaCmd = 0x0、 .startTrigger.triggerNo = 0x0、 .startTrigger.PastTrig = 0x0、 .condition.rule = 0x1、 .condition.nSkip = 0x0、 txOpt.bIncludePhyHdr = 0x0、 txOpt.bIncludeCrc = 0x0、 TxOpt.payloadLenMSb = 0x0、 .payloadLen = 0x1E、 .pPayload = 0、//插入适用的指针:(uint8_t*)&xxx 时间戳= 0x00000000 }; // CMD_IEEE_RX //命令 ID 号0x2801 RFC_CMD_IEEE_RX_t RF_cmdieeRx = { .commandNo = 0x2801、 .status = 0x0000、 .pNextOp = 0、//插入适用的指针:(uint8_t*)&xxx .StartTime = 0x00000000、 .startTrigger.triggerType = 0x0、 .startTrigger.bEnaCmd = 0x0、 .startTrigger.triggerNo = 0x0、 .startTrigger.PastTrig = 0x0、 .condition.rule = 0x1、 .condition.nSkip = 0x0、 .channel = 0x00、 rxConfig.bAutoFlushCrc = 0x0、 rxConfig.bAutoFlushIgn = 0x0、 rxConfig.bIncludePhyHdr = 0x0、 rxConfig.bIncludeCrc = 0x0、 rxConfig.bAppendRssi = 0x1、 rxConfig.bAppendCORCrc = 0x1、 rxConfig.bAppendSrcInd = 0x0、 rxConfig.bAppendTimestamp = 0x0、 .pRxQ = 0、//插入适用的指针:(dataQueue_t*)&xxx .pOutput = 0、//插入适用的指针:(uint8_t*)&xxx .frameFiltOpt.frameFiltEn = 0x0、 .frameFiltOpt.frameFiltStop = 0x0、 .frameFiltOpt.autoAckEn = 0x0、 .frameFiltOpt.slotedAckEn = 0x0、 .frameFiltOpt.autoPendEn = 0x0、 .frameFiltOpt.defaultPend = 0x0、 .frameFiltOpt.bPendDataReqOnly = 0x0、 .frameFiltOpt.bPanCoord = 0x0、 .frameFiltOpt.maxFrameVersion = 0x3、 .frameFiltOpt.fcfReservedMask = 0x0、 .frameFiltOpt.modifyFtFilter = 0x0、 .frameFiltOpt.bStrictLenFilter = 0x0、 .frametypes.bAcceptFt0Beacon = 0x1、 .frametypes.bAcceptFt1数据= 0x1、 .frametypes.bAccint2Ack = 0x1、 .frametypes.bAcceptFt3MacCmd = 0x1、 .frametypes.bAccint4保留= 0x1、 .frametypes.bAcceptFt5保留= 0x1、 .frametypes.bAcceptFt6保留= 0x1、 .frametypes.bAccint7保留= 0x1、 ccaOpt.ccaEnEnergy = 0x0、 ccaOpt.ccaEnCorr = 0x0、 ccaOpt.ccaEnSync = 0x0、 ccaOpt.ccaCorrOp = 0x1、 ccaOpt.ccaSyncOp = 0x1、 ccaOpt.ccaCorrThr = 0x0、 ccaRssiThr = 0x64、 .__dummy0 = 0x00、 .numExtEntry = 0x00、 .numShortEndries = 0x00、 .pExtEntryList = 0、//插入适用的指针:(uint32_t*)&xxx .pShortEntryList = 0、//插入适用的指针:(uint32_t*)&xxx .localExtAddr = 0x000012345678、 .localShortAddr = 0xABBA、 .localPanID = 0x0000、 .__dummy1 = 0x000000, endTrigger.triggerType = 0x1、 .endTrigger.bEnaCmd = 0x0、 .endTrigger.triggerNo = 0x0、 .endTrigger.PastTrig = 0x0、 .EndTime = 0x00000000 };
rf_patch_cpe_ieee.h
/********* *文件名: rf_patch_cpe_ieee.h *已修订: $Date:2017-08-24 11:43:33 +0200 (Thu、2017年8月24日)$ *修订版: $修订版:17889 $ * 说明:CC26xx IEEE 802.15.4 PHY 的射频内核补丁文件 * 版权所有(c) 2015、德州仪器(TI)公司 *保留所有权利。 * * 只要符合以下条件、就允许以源代码和二进制形式重新分发和使用(无论是否进行*修改): * * 1)源代码的重新分发必须保留上述版权声明 、* 此条件列表和以下免责声明。 * * 2)二进制形式的再发行必须复制上述版权声明 * 本条件列表和文档中的以下免责声明 * 和/或随分发提供的其他材料。 * * 3)本组织的名称及其捐助者的名称均不得 * 用于认可或推广从本软件衍生的产品、但不 含* 特定的事先书面许可。 * 本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权持有人或贡献者 都不对任何直接、间接、偶然、特殊、模范、 或 *相应的损害(包括但不限于采购 *替代产品或服务;丧失使用、数据或利润; 或业务 *中断)、但出于 任何责任理论、无论是在*合同中、严格责任还是在使用本软件时以任何方式产生的侵权行为(包括疏忽或其他原因)*、即使已告知 *可能会发生此类损坏。 * * / #ifndef _rf_patch_cpe_IEEE_H #define _rf_patch_cpe_IEEE_H //********* // //如果使用 C++编译 器进行编译,请使此头文件中的所有定义//具有 C 绑定。 //// ***************** #ifdef __cplusplus extern "C" { #endif #include #include #ifndef cpe_patch_type #define cpe_patch_type static const uint32_t #endif #ifndef SYS_patch_type #define SYS_patch_type static const uint32_t #endif #ifndef patch_fe_spec #define patche_spec static inline #ifnf_patche_type 0x2000419[_cap 、0x10002119_cap、_cap = 0x210001b_cap、0x2cap = 0x2cot_cap、0x2cot_cap、0x2t_cap = 0x2cap、0x20001_cot_cot_cot_cap = 0x 0x22024823、 0x421a7dc3、 0xd0034472、 0x1dc04678、 b5f84686、 0x4c1f4710、 0x200834ae、 0x490347a0、 0x60082008、 0x3cec6008、 bbdf847a0、 0x40045004、 0x4c17b5f0、 0x18612140、 0x280278c8、 0x4809d005、 0x60012100、 0x47884908、 0x6e25bdf0、 0x60354e07、 0x43280760、 0x68276620、 0x480e6024、 0x60274780、 dbbf06035、 0x4004112c、 0x000065a5、 0x40044028、 0x4c07b510、 0x29007da1、 0x2101d105、 0x024875a1、 0x393e4904、 0x68204788、 0xd0002800、 0xbd104780、 0x21000254、 0x0000398b、 0x6a034807、 0x46784907、 0x46861dc0、 0x4788b5f8、 0x009b089b、 0x6a014802、 0xd10007c9、 bdf86203、 0x40045040、 0x0000f1ab、 0x6a00480b、 0xd00407c0、 0x2201480a、 0x43117801、 0x48097001、 0x72c84700、 0xd006280d、 0x00802285、 0x18800252、 0x60486840、 0x48044770、 0x0000e7fb、 0x40045040、 0x21000268、 0x0000ff39、 0x210004d9、 0x4e1ab5f8、 0x6b314605、 0x09cc4819、 0x2d0001e4、 0x4918d011、 0x29027809、 0x7b00d00f、 0xb6724304、 0x4f152001、 0x47b80240、 0x38204811、 0x09c18800、 0xd00407c9、 0x7ac0e016、 0x7b40e7f0、 0x490fe7ee、 0x61cc6334、 0x07c00a40、 0x2001d00c、 0x6af10380、 0xd0012d00、 0xe0004301、 0x46084381、 0x490762F1、 0x63483940、 0x47b82000、 bbdf8b662、 0x21000280、 0x21000088、 0x21000296、 0x00003cdf、 0x40044040、 0x28004907、 0x2004d000、 0xb6724a06、 0x07c97809、 0x5810d001、 0x2080e000、 0xb240b662、 0x00004770、 0x2100026b、 0x40046058、 }; #define _NWORD_PATCHIMAGE_IEEE 111 #define _NWORD_PATCHSYS_IEEE 0 #define _IRQ_PATCH_0 0x21000449 #define _IRQ_PATCH_1 0x21000489 #ifndef _SYSRAM_START 0x20000000 #define _INTRIE_INTRIE_IN_INTRIE_EED_INTRIE_IN_EED_COGE_ERSION_ERSIE #define 0x0340 #IE_INTRIE_INTRIE_INEST_INTRIE_INTRIE_INTRIE_INTRIE_INTRIE_E_IN_INTRIE_INTRIE_ERSIF_ERSIF_ERSIF_ERSIF_ERSIF_ERSIF_ERSIF_IN_ERSIF_ERSIF_IN_INTRIE_INTRIE_ERSIF_ERSIF_ERSIF_ERSIF_IN_IN_INTRIE_INTRIE_IN_INTRIES #def (_IEEE_CPERAM_START +_IEEE_PATCH_VEC_OFFSET); #if (_NWORD_PATCHIMAGE_IEEE > 0) memcpy (pPatchVec、patchImageIee、sizeof (patcheee)); #endif } patch_f趣味_spec void enterIeRT=32 (p补 码= t_petch_t_petch_spec);petr_pace+ pcc_pet_pet_pet_petr_petr_ch = t_petr_petr_ch (pet_pot_pet_pet_pet_petch_petr_pet_ch = t_petch_ch_petr_ch_p_pet_petr_p_ch_ped_p_ch)= pet_petr_ap_petr_pet_ch_pet_pet_pet_p_pet_petr_ap_ap_u_pet_p_ pPatchTab[38]= 4; pIrqPatch[1]=_IRQ_PATCH_0; pIrqPatch[9]=_IRQ_PATCH_1; } PATCH_FUNCH_spec void IeePatch (void) { enterIeeeSysPatch (); eIEECpePatch ();applureIeCCESD_ void (void) ;#eIRQ_EST_ESPIERQ_ESD_ void (void // ////将 C++编译器的 C 绑定部分标记为结尾。 //// ***************** #ifdef __cplusplus } #endif #endif //_rf_patch_cpe_IEEE_H
如何克服这个问题? 我完全卡住了。
谢谢
Rahul Gusai