你好,我现在需要测量 一个脉冲的宽度;
初步的构想(上升沿检测(检测到上升沿就切换到下降沿中断)->打开定时器 ->下降沿中断(打开上升沿中断)->读取定时器值)
但是这个方法cc2640r2f可能会进入睡眠,怕检测不到;
请问我这种方法可行吗,或者还有其他方法捕捉脉宽吗,定时器有能力直接捕捉吗?
Viki Shi:
“但是这个方法cc2640r2f可能会进入睡眠,怕检测不到;”监测的时候让芯片不要进入休眠,低功耗状态下很多功能使用受限
yekun kun:
回复 Viki Shi:
请问还有其他方案吗,定时器可以直接测吗?就像stm32 一样
Viki Shi:
回复 yekun kun:
你使用的是什么定时器,以及你的休眠等级是什么?
yekun kun:
回复 Viki Shi:
cc2640r2f 定时器如何清空计数,我这边用这个:Types_FreqHzfreq;void Time_Init(void) {GPTimerCC26XX_Params params;GPTimerCC26XX_Params_init(¶ms);params.width= GPT_CONFIG_32BIT;params.mode= GPT_MODE_ONESHOT;params.direction= GPTimerCC26XX_DIRECTION_UP;params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;hTimer = GPTimerCC26XX_open(CC2640R2_LAUNCHXL_GPTIMER0A, ¶ms);BIOS_getCpuFreq(&freq);GPTimerCC26XX_Value loadVal = freq.lo- 1; //47999GPTimerCC26XX_setLoadValue(hTimer, loadVal);GPTimerCC26XX_registerInterrupt(hTimer, timerCallback, GPT_INT_TIMEOUT);}void Time_Start(void){GPTimerCC26XX_start(hTimer);time_counter=0;}GPTimerCC26XX_Value Time_Stop(void){GPTimerCC26XX_Valueval;val = GPTimerCC26XX_getValue(hTimer);return val;}
但是没法计数器没法清0
Viki Shi:
回复 yekun kun:
目前官方提供的driver不好实现清零GPTimer,需要自己通过代码实现,建议参考这边:e2e.ti.com/…/722625
Viki Shi:
回复 Viki Shi:
但是注意,使用GPTimer无法进入休眠:
After GPTimerCC26XX_start(): The device will only go to Idle power mode since the high-frequency clock is needed for timer operation.