This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1310: CC1310 GPTimer问题

Expert 2290 points
Part Number: CC1310

CC1310使用GPTimer, GPTimer在开启后无法产生中断, 具体代码如下:

//频率控制
void hzirqcallback(GPTimerCC26XX_Handle handle, GPTimerCC26XX_IntMask interruptMask)
{
    LEDOR();
}

void timerhz_init(void)
{
    GPTimerCC26XX_Params params;
    GPTimerCC26XX_Params_init(&params);
    params.width          = GPT_CONFIG_32BIT;
    params.mode           = GPT_MODE_PERIODIC_UP;
    params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
    Power_setDependency(PowerCC26XX_XOSC_HF); //使能高速时钟
    hztimer = GPTimerCC26XX_open(HZGPTIMERNUM, &params);
    
    GPTimerCC26XX_Value loadVal = 48000000 / hz - 1; //47999
    GPTimerCC26XX_setLoadValue(hztimer, loadVal);
    GPTimerCC26XX_registerInterrupt(hztimer, hzirqcallback, GPT_INT_TIMEOUT);
    timerhz_setstatus(0);
}

void timerhz_setstatus(uint8_t flag)
{
    if(flag == 1) //打开频率定时器
    { 
        GPTimerCC26XX_start(hztimer);

    }
    else if(flag == 0) //关闭频率定时器
    {
        GPTimerCC26XX_stop(hztimer);
    }
}

void timerhz_sethz(uint8_t h)
{
    timerhz_setstatus(0);
    GPTimerCC26XX_Value loadVal = 48000000 / h - 1; //47999
    GPTimerCC26XX_setLoadValue(hztimer, loadVal);
}

调用GPTimerCC26XX_start后, 无法产生中断是什么原因? 怎么判断定时器是否启动?

  • 您好,

    感谢您的提问,已将您的问题升级到E2E英文论坛由专业工程师专家帮您解决,有结论及时联系您。

  • 您好,

    您可以在 CCS 上打开debug界面并检查 timer 寄存器。如果 timer 正在运行,您可以看到它的值会更新。 

    如果不编译和运行代码,很难看出有什么明显的错误。

    您可以提供一个最小的项目,工程师可以尝试查看问题在哪。

    期待您的回复。

  • GPTimer使用的CC1310_LAUNCHXL_GPTIMER3A和CC1310_LAUNCHXL_GPTIMER3B组成的32bit定时器.

    调用GPTimerCC26XX_start后检查 HWREG(GPT3_BASE+ GPT_O_CTL) & TIMER_BOTH  == TIMER_BOTH 为 true. 但是不产生中断.

    直接调用TimerEnable(GPT3_BASE, TIMER_BOTH  );可以正常中断.

    现在不知道为什么GPTimerCC26XX_start启动定时器无法中断?

  • 您好,

    关于这个问题的跟进我们需要点时间查看一下,有结论直接联系您。