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(¶ms);
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, ¶ms);
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
