CC2640R2F定时器设置定时中断, 如果修改定时时间且定时时间缩短, 定时器开启后不能立即产生定时中断, 这是什么原因?
配置代码:
void TimerHzInit(void){
GPTimerCC26XX_Params params;
hz = 20;
GPTimerCC26XX_Params_init(¶ms);
params.width = GPT_CONFIG_32BIT;
params.mode = GPT_MODE_PERIODIC;
params.direction = GPTimerCC26XX_DIRECTION_UP;
params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
Power_setDependency(PowerCC26XX_XOSC_HF); //使能高速时钟
HzGPTimer = GPTimerCC26XX_open(4, ¶ms);
GPTimerCC26XX_Value loadVal = 48000000 / hz – 1; //47999
GPTimerCC26XX_setLoadValue(HzGPTimer, loadVal);
GPTimerCC26XX_registerInterrupt(HzGPTimer, HztimerCallback, GPT_INT_TIMEOUT);
TimerHZStartOrStop(0);
}
void TimerHZStartOrStop(uint8_t flag)
{
if(flag == 1) //打开定时器
{
GPTimerCC26XX_start(HzGPTimer);
}
else if(flag == 0) //关闭定时器
{
GPTimerCC26XX_stop(HzGPTimer);
}
}
void setTimerHZ(uint16_t num)
{
if(num >= 1 && num <= 120)
{
hz = num;
TimerHZStartOrStop(0);
GPTimerCC26XX_Value loadVal = 48000000 / hz – 1; //47999
GPTimerCC26XX_setLoadValue(HzGPTimer, loadVal);
}
}
Viki Shi:
需要了解更多信息——“如果修改定时时间且定时时间缩短, 定时器开启后不能立即产生定时中断”
1、请问如果修改定时时间增加,运行正常吗?
2、修改是在原例程基础直接改吗?
WK C:
回复 Viki Shi:
修改定时增加可以马上输出,这个是复制GPTimer的配置
WK C:
回复 Viki Shi:
如果要修改定时器的定时器时间应该怎么设置?
Viki Shi:
回复 WK C:
延时一段时间才启动—-延时多长时间?系统中是否有高优先级任务抢占?
WK C:
回复 Viki Shi:
这个有时候10几秒, 有时候几分钟,除了蓝牙通信就是应该没有这个高了吧,我没有找到GPTimer的优先级是多少, GPTimerCC26XX_start(HzGPTimer);调用了这个函数, 就没有立即响应
Viki Shi:
回复 Viki Shi:
我理解你的意思了,你看一下对不对:你修改 loadVal的值,如果改大则马上输出,改小就需要等待时间一会才输出,是这个意思吗?这是因为需要等待counter一直计数到溢出,然后返回0. 可以通过修改使用Periodic down mode来改进此问题,具体请看:e2e.ti.com/…/722625
WK C:
回复 Viki Shi:
对的, 改为向下计数就可以了, 谢谢