CC2650 定时器 不准
在测试定时器时代码如下:
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 ====================================
*/