TI中文支持网
TI专业的中文技术问题搜集分享网站

LAUNCHXL-CC1310: 无法同时使用RTC和radio发射

Part Number:LAUNCHXL-CC1310

为了能够精确在每250us发送一次数据,我采用了RTC CH2通道进行定时,然后再主程序中进行radio发送。现在问题是:

1)单独的RTC 程序测试没有问题,通过GPIO电平翻转,可以测试到约250us时刻翻转;

2)单独的射频发送测试没有问题,可通过频谱分析仪测试到发送的信号;

3)将两个合并使用时,则定时器中断可以正常进入;但是射频发送无法进行。

请问,是RTC的使用与RADIO发送冲突了吗?还是使用方法不对导致的?

****************************以下是主程序部分*********************************************************

/*定时器中断处理函数*/
void RTCtimer_int_hanlder(uintptr_t arg)
{
    GPIO_toggle(Board_GPIO_LED0);
    send_flag = 1;
}

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

    ADC_Handle   adc;
    ADC_Params   params;

    /* Call driver init functions */
    RTC_timerCreate(RTCtimer_int_hanlder);
    GPIO_init();
    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, &params);
    if (adc == NULL) {
        while (1);
    }

    while(1)
    {
        /*ADC_convert(adc, &adcValue);*/
        if(send_flag == 1)
        {
            send_flag = 0;
            dataNumber++;
            RF_tx_data(adcValue, dataNumber);
        }

    }

****************************定时器程序*********************************************************

typedef struct _RTC_Obj {
    RTC_Fxn                tickFxn;
} RTC_Obj;

static HwiP_Struct RTC_hwiStruct;
static RTC_Obj RTC_handle;

static uint32_t delay_ticks = (uint32_t)(0.00025*FACTOR_SEC_TO_COMP_VAL_FORMAT); /*定时间隔*/

void RTC_init(void)
{

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

    HWREG(AON_RTC_BASE + AON_RTC_O_SYNC) = 1;
    /* read sync register to complete reset */
    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);

}

void RTC_intFxn(uintptr_t arg)
{
    /* clear the RTC event */
    AONRTCEventClear(AON_RTC_CH2);

    RTC_handle.tickFxn(NULL);

}

void RTC_start(void)
{

    uintptr_t key;

    key = HwiP_disable();

    /* reset timer */
    AONRTCReset();
    AONRTCEventClear(AON_RTC_CH2);
    IntPendClear(INT_AON_RTC_COMB);

    /*设置比较值大小*/
    AONRTCModeCh2Set(AON_RTC_MODE_CH2_CONTINUOUS);
    AONRTCCompareValueSet(AON_RTC_CH2, delay_ticks);
    AONRTCIncValueCh2Set(delay_ticks);

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

    AONRTCEnable();

    /*退出临界区*/
    HwiP_restore(key);
}

void 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_COMB, RTC_intFxn, &hwiParams);

    RTC_init();
    /*退出临界区*/
    HwiP_restore(hwiKey);

    RTC_handle.tickFxn = timer_fxn;

    RTC_start();
}

****************************射频发送*********************************************************

void RF_tx_init(void)
{

    RF_Params rfParams;
    RF_Params_init(&rfParams);

    if( RFQueue_defineQueue(&dataQueue,
                            txDataEntryBuffer,
                            sizeof(txDataEntryBuffer),
                            NUM_DATA_ENTRIES,
                            MAX_LENGTH + NUM_APPENDED_BYTES))
    {
        /* Failed to allocate space for all data entries */
        while(true);
    }

    RF_cmdTxHS.pQueue = &dataQueue;

    currentDataEntry = (rfc_dataEntryGeneral_t*)&txDataEntryBuffer;
    currentDataEntry->length = PAYLOAD_LENGTH;
    pPacket = &currentDataEntry->data;

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

    /* Request access to the radio */
    rfHandle = RF_open(&rfObject, &RF_prop_hsm, (RF_RadioSetup*)&RF_cmdRadioSetup_hsm, &rfParams);

    /* Set the frequency */
    RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs_preDef, RF_PriorityNormal, NULL, 0);

}

void RF_tx_data(uint16_t playload, uint16_t seqNumber)
{

   /* Create packet with incrementing sequence number and random payload */
    pPacket[0]= (uint8_t)(seqNumber >> 8);
    pPacket[1]= (uint8_t)(seqNumber++);
/*  pPacket[2]= (uint8_t)(playload >> 8);
    pPacket[3]= (uint8_t)(playload);*/

   /* Send packet */
    RF_EventMask terminationReason = RF_postCmd(rfHandle, (RF_Op*)&RF_cmdTxHS,
                                                RF_PriorityNormal, NULL, 0);

}

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!

,

Cherry Zhou:

您好,一般强烈建议使用驱动程序,对于电源驱动程序和直接访问 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

请尝试在 RF 命令中使用定时器或触发器之一来获得所需的 250us。

此外请问您的使用case是什么?

请确保在开始计时之前测量一个数据包的无线时间,确保数据包发送的时间少于 250 us (裕量)。 请注意, 4Mbps 使用一个额外的长前导码 (注意到您使用了 HS 命令,但没有有关数据速率的信息)

,

leo liu:

您好,请问一下,我使用的是C:\ti\simplelink_cc13x0_sdk_4_20_01_03\source\ti\drivers\timer的实例,实现每200ms重复一次RF发射,但是现像跟上面提到的一样,单独的timer可以实现IO的翻转,单独的RF也可以发送,但是在定时器中触发时,RF发送不了。

另外,“请尝试在 RF 命令中使用定时器或触发器之一来获得所需的 250us。”这个是在哪里配置的?谢谢!

,

Cherry Zhou:

您好,您的问题我们建议您单独发布一个新的帖子,这样方便工程师跟进您的问题。谢谢!

,

leo liu:

好的,感谢,麻烦关注一下这个贴子

,

leo liu:

(2) LAUNCHXL-CC1310: CC1310 TIMER+RF同时使用时,RF不能工作 – 低于 1GHz 论坛 – 低于 1GHz – E2ETm 设计支持

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-CC1310: 无法同时使用RTC和radio发射
分享到: 更多 (0)