微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC2650 定时器 不准

CC2650 定时器 不准

时间:12-23 整理:3721RD 点击:

在测试定时器时代码如下:

void taskRFSFxn(UArg arg0, UArg arg1)
{

GPTimerCC26XX_Params rfsParams;
GPTimerCC26XX_Params_init(&rfsParams);

rfsParams.width = GPT_CONFIG_16BIT;
rfsParams.mode = GPT_MODE_PERIODIC_UP;
rfsParams.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
h_RFS = GPTimerCC26XX_open(RF_SYNC_TIMER, &rfsParams);

if(h_RFS == NULL)
{
while(1);//fail to open the Timer
}
GPTimerCC26XX_setLoadValue(h_RFS, 0x7FFF);
GPTimerCC26XX_registerInterrupt(h_RFS, (GPTimerCC26XX_HwiFxn)&SYNC_TIMER_callback,GPT_INT_TIMOUT);
GPTimerCC26XX_start(h_RFS);
while(1)
{
Task_sleep(BIOS_WAIT_FOREVER);
}

}

void SYNC_TIMER_callback()
{
LEDG_TOOGLE();
return;
}

按照0x7FFF/48M=682us,IO应该682.6us翻转一次,但实际用示波器测得的值是671和701这两个值,而且这两个值是随机跳动的.

整个工程只有这一个Task ,再无其他。这是什么原因?

把Task_sleep(BIOS_WAIT_FOREVER);屏蔽掉,发现IO变为678us翻转一次。

再建一个task,在这个task中,只要不调用Task_sleep,IO翻转就会变成682.6us?

TI 有无TIMER工作在定时模式下的例程,最好是验证过的

在TI-RTOS的默认设置中,低功耗策略是使能的。

当用户定义的task都处于block/pending状态时,系统将进入低功耗模式,这时将从高速时钟切到低速时钟。

这个应该是你用示波器看到波形翻转周期不正确的原因。

你可以从两个方面进行验证,一个是不使用Task_sleep,保持task一直处于running状态。或者是在CC2650_LAUNCHXL.c文件中将enablePolicy设置为FALSE,不开启低功耗功能。

/*

*  ============================= Power begin ==================================

*/

/* Place into subsections to allow the TI linker to remove items properly */

#if defined(__TI_COMPILER_VERSION__)

#pragma DATA_SECTION(PowerCC26XX_config,".const:PowerCC26XX_config")

#endif

constPowerCC26XX_Config PowerCC26XX_config = {

    .policyInitFxn      = NULL,

    .policyFxn          = &PowerCC26XX_standbyPolicy,

    .calibrateFxn       = &PowerCC26XX_calibrate,

    .enablePolicy       = TRUE,

    .calibrateRCOSC_LF  = TRUE,

    .calibrateRCOSC_HF  = TRUE,

};

/*

*  ============================= Power end ====================================

*/

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top