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.

[参考译文] LAUNHXL-CC1310:RTC 和无线电传输不能同时使用

Guru**** 633810 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1083425/launchxl-cc1310-rtc-and-radio-transmit-cannot-be-used-at-the-same-time

部件号:LAUNHHXL-CC1310
“线程:测试”中讨论的其它部件

大家好,团队

客户提出的问题可能需要您的帮助:

客户希望每250美国发送一次数据,RTC CH2信道用于计时,然后对讲机在主程序中发送。

问题:

A. RTC 程序测试正常,GPIO 电平翻转,可测试为250美制左右。

B. RF 发射测试正常,可通过频谱分析仪对发射信号进行测试。

C. 当这两个信号相结合时,计时器中断可以正常进入,而 RF 传输则无法运行。

主要方案如下:

/*计时器中断处理功能*/
失效 RTCtimer_int_hanlder (uintpttr_t arg)

   GPIO 切换(板 GPIO LED0);
   SEND_FLAG = 1;
}

/*
 * ========= adcThread =========
 *
void *adcThread (void *arg0)(空*adcThread (空


   ADC_HANDLE  ADC;
   ADC_Params  参数;

   /*呼叫驱动程序初始化函数*/
   RTC_timerCreate (RTCtimer_int_hanlder);
   GPIO 初始化();
   ADC_INIT();
   RF_TX_INIT();
   ADC_Params_init(&params);

   /*配置 GPIO */
   GPIO _setConfig (Board _GPIO _LED0,GPIO _CFG _OUT _STD | GPIO _CFG _OUT _LOW);

   ADC = ADC_OPEN (Board_ADC0,参数)(&P);
   如果(ADC == NULL)为{
       同时(1);
   }

   While (1)(同时)
   {
       /*ADC_CONVERT (ADC,&adcValue);*/
       IF (SEND_FLAG ==1)
       {
           send_flag = 0;
           dataNumber++;
           RF_TX_DATA (adcValue,dataNumber);
       }

   }

计时器程序如下:

typedef 结构_RTC_Obj{
   RTC_Fxn               记分卡 Fxn;
} RTC_Obj;

静态 Hwip_Structt RTC_hwiStruct;
静态 RTC_Obj RTC_Handle;


静态 UINT32_t 延迟_ticks =(UINT32_t)(0.00025* factor_SEC_TO_COMP_VAL_FORMAT);/*定时间隔*/


使 RTC_INIT 无效(作废)


   /*关闭并重置 RTC*/
   AONRTCDisable();
   AONRTCReset();

   HWREG (AON_RTC_BASE + AON_RTC_O_SYNC)= 1;
   /*读取同步寄存器以完成重置*/
   HWREG (AON_RTC_BASE + AON_RTC_O_SYNC);


   /*清除 RTC 事件*/
   AONRTCEventClear (AON_RTC_CH2);
   IntPendClear (INT_AON_RTC_Comb);

   HWREG (AON_RTC_BASE + AON_RTC_O_SYNC);

}


空 RTC_intFxn (uintptr _t arg)

   /*清除 RTC 事件*/
   AONRTCEventClear (AON_RTC_CH2);

   RTC_Handler.tickFxn (空);

}


使 RTC_START 作废(作废)


   uintptr _tkey;

   键= Hwip_disable();

   /*重置计时器*/
   AONRTCReset();
   AONRTCEventClear (AON_RTC_CH2);
   IntPendClear (INT_AON_RTC_Comb);

   /*设置比较值的大小*/
   AONRTCModeCh2Set (AON_RTC_MODE_CH2_Continuous);
   AONRTCCompareValueSet (AON_RTC_CH2,Delay_Ticks);
   AONRTCIncValueCh2Set (延迟刻度);

   AONEventMcuWakeUpSet(AON_EVENT_MCU_WU0,AON_EVENT_RTC_CH2);
   AONRTCChannelEnable (AON_RTC_CH2);
   AONRTCCombinedEventConfig (AON_RTC_CH2);


   AONRTCEnable();

   /*退出关键区域*/
   HWip_RESTORE (密钥);
}

空 RTC_timerCreate (RTC_Fxn TIMER _Fxn)

   uintptr _t hwikey;
   /*输入 关键区域*/
   hwiKey = Hwip_disable();

   Hwip_Params hwiparams;

   Hwip_Params_init(&hwiparams);
   hwiparams.priority = INT_PRI_LEVEL4;
   Hwip_construct (&RTC_hwiStruct,INT_AON_RTC_Combb,RTC_intFxn,(hwipParams);

   RTC_INIT();
   /*退出关键区域*/
   Hwip_restore (hwiKey);

   RTC_Handler.tickFxn = TIMER _Fxn;

   RTC_START();
}

RF 传输如下所示:

无效 RF_TX_INIT (无效)


   RF_Params rfParams;
   RF_Params_init (&rfParams);

   IF( RFQueue_defineQueue(&dataQueue,
                           txDataEntryBuffer,
                           sizeof(TxDataEntryBuffer),
                           num_data_entries,
                           最大长度+ NUM_追加 的字节))
   {
       /*未能为所有数据条目分配空间*/
       while (true);
   }

   RF_cmdTxHs.pQueue =&dataQueue;

   currentDataEntry =(RFC_dataEntryGeneral _t*)&txDataEntryBuffer;
   currentDataEntry ->长度=有效载荷长度;
   pPacket =当前 DataEntry ->数据(&U);

   RF_cmdFs_preDef.frequency = 0x0364;  //0x364:868 MHz,0x0393:915 MHz
   RF_cmdFs_preDef.fractFreq = 0x0000;

   /*请求访问对讲机*/
   rfHandle = RF_OPEN (&rfObject,&RF_prop_HSM,(RF_RadioSetup*)&RF_cmdRadioSetup_HSM,&rfParams);


   /*设置频率*/
   rf_postCmd (rfHandle,(RF_Op*)和 rf_cmdfs_predef,rf_PriorityNormal,NULL,0);




}

无效 RF_TX_DATA (uint16_t playload,uint16_t seqNumber)


  /*创建具有递增序列号和随机有效负载的数据包*/
   pPacket[0]=(uint8_t)(seqNumber >> 8);
   pPacket[1]=(uint8_t)(seqNumber++);
/* pPacket[2]=(uint8_t)(播放负载>> 8);
   pPacket[3]=(uint8_t)(播放负载);*/

  /*发送数据包*/
   RF_EventMask terminationReason = RF_postCmd (rfHandle,(RF_OP*)和 RF_cmdTxHS,
                                               RF_PriorityNormal,NULL,0);

}

请帮您检查此案例? 谢谢。

此致,

樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我是否可以知道有任何更新? 谢谢。

    此致,

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一般情况下:强烈建议使用驱动程序,对于电源驱动程序和直接访问 RTC,我们不支持使用 TI 提供的驱动程序的其他解决方案。  

    我认为这篇文章: https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/496812/rtc-wakeup-cc1310 报道了部分问题。  

    尝试使用射频命令中的计时器或其中一个触发器获取所需的250 us。

    这里的 usecase 是什么?  此外,确保在开始计时之前测量一个数据包的空载时间,以确保该数据包的发送量小于250 us,且有余量。 请注意,4 Mbps 使用超长前导码(我注意到使用了 HS 命令,但没有数据参数信息)