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

CC2640R2F TImer 捕获模式的时间设置

void timerCallback(GPTimerCC26XX_Handle handle, GPTimerCC26XX_IntMask interruptMask) {// interrupt callback code goes here. Minimize processing in interrupt.timer_Value = GPTimerCC26XX_getValue(hTimer);Log_info0("timer_working!");Log_info1("Value is %u",timer_Value);HWREG(handle->hwAttrs->baseAddr + offset + GPT_O_TBR) = 0;}



extern void timer_init(void)
{GPTimerCC26XX_Params params;GPTimerCC26XX_Params_init(&params);params.width= GPT_CONFIG_16BIT;params.mode= GPT_MODE_EDGE_COUNT;params.direction= GPTimerCC26XX_DIRECTION_UP;params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;hTimer = GPTimerCC26XX_open(Board_GPTIMER1B, &params);if(hTimer == NULL) {Log_error0("Failed to open GPTimer");Task_exit();}if(TimerPinHandle==NULL){TimerPinHandle = PIN_open(&TimerPins,TimerinitTable);}PINCC26XX_setMux(TimerPinHandle, PIN_TIMER, GPT_PIN_1B );//GPTimerCC26XX_getPinMux(hTimer);xdc_runtime_Types_FreqHz  freq;BIOS_getCpuFreq(&freq);GPTimerCC26XX_Value loadVal = freq.lo / 10000 - 1;GPTimerCC26XX_setLoadValue(hTimer, loadVal);GPTimerCC26XX_setMatchValue(hTimer, 10000);GPTimerCC26XX_setCaptureEdge(hTimer,GPTimerCC26XX_BOTH_EDGES);GPTimerCC26XX_registerInterrupt(hTimer, timerCallback, GPT_INT_CAPTURE_MATCH);// GPTimerCC26XX_enableInterrupt(hTimer, 0xFFFF);HWREG(hTimer->hwAttrs->baseAddr + offset + GPT_O_TBR) = 0;timer_status = STANDBY;

}

设置了捕获模式来捕捉一定时间内产生的电平变化,但我的定时一直设置的不对,有人能跟我讲讲

GPTimerCC26XX_setLoadValue(hTimer, loadVal);和 GPTimerCC26XX_setMatchValue如何设置定时呢?

在上述代码中,居然每隔41秒触发一次中断,TBPR也未设置成功,能设置一个50MS 和 100MS的例子帮助我理解呢?

以下是寄存器的截图,使用的是TImerB

Viki Shi:

50ms:GPTimerCC26XX_Value loadVal = freq.lo / 20 – 1;
100ms:GPTimerCC26XX_Value loadVal = freq.lo / 10 – 1;

user6359397:

回复 Viki Shi:

GPTimerCC26XX_setMatchValue是做什么的呢?不是用来计时的吗?

Viki Shi:

回复 user6359397:

定时器的match value,可以这么理解,定一个match value,一旦到达这个值,可以有选择地触发中断,复位定时器,重启定时器等【PS:具体功能请参考每个芯片的手册描述】。这部分建议你看一下芯片的TRM: https://www.ti.com/lit/ug/swcu117i/swcu117i.pdf

至于要实现50ms/100ms的定时,请直接参照下面的代码修改load value:

GPTimerCC26XX_Handle hTimer;
void timerCallback(GPTimerCC26XX_Handle handle, GPTimerCC26XX_IntMask interruptMask) {// interrupt callback code goes here. Minimize processing in interrupt.
}
void taskFxn(uintptr_t a0, uintptr_t a1) {GPTimerCC26XX_Params params;GPTimerCC26XX_Params_init(&params);params.width= GPT_CONFIG_16BIT;params.mode= GPT_MODE_PERIODIC;params.direction= GPTimerCC26XX_DIRECTION_UP;params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;hTimer = GPTimerCC26XX_open(CC2650_GPTIMER0A, &params);if(hTimer == NULL) {Log_error0("Failed to open GPTimer");Task_exit();}Types_FreqHzfreq;BIOS_getCpuFreq(&freq);GPTimerCC26XX_Value loadVal = freq.lo / 1000 - 1; //47999GPTimerCC26XX_setLoadValue(hTimer, loadVal);GPTimerCC26XX_registerInterrupt(hTimer, timerCallback, GPT_INT_TIMEOUT);GPTimerCC26XX_start(hTimer);while(1) {Task_sleep(BIOS_WAIT_FOREVER);}
}

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F TImer 捕获模式的时间设置
分享到: 更多 (0)