“线程:测试”中讨论的其它部件
大家好,团队
客户提出的问题可能需要您的帮助:
客户希望每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(¶ms);
/*配置 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);
}
请帮您检查此案例? 谢谢。
此致,
樱桃