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

CC2640R2F GPtimer驱动问题

请问TI的专家们,我现在使用CC2640R2F提供的GPTimerCC26XX.c的驱动,由于我们CC2640R2F使用48Mhz的主频32位定时器模式下不进行分频计数计数正常,但是如果我将模式更改为16位模式,计数出现问题。

static void GPtimerInit(void)
{
  GPTimerCC26XX_Params params;
  GPTimerCC26XX_Params_init(&params);
  params.width          = GPT_CONFIG_16BIT;               //16位计数模式
  params.mode           = GPT_MODE_ONESHOT_UP;          //周期向上计数模式
  params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
  hTimer = GPTimerCC26XX_open(CC2640R2DK_5XD_GPTIMER0A, &params); //初始化硬件定时器
#if 0                          Types_FreqHz  freq;  //获取CPU频率  48Mhz
  BIOS_getCpuFreq(&freq);
  GPTimerCC26XX_Value loadVal = freq.lo / 1000 – 1; //47999
#endif
  GPTimerCC26XX_Value value = 0x00160000;  GPTimerCC26XX_registerInterrupt(hTimer, GPtimerCallback, GPT_INT_TIMEOUT);  //定时器溢出中断
  GPTimerCC26XX_setLoadValue(hTimer, value);
  GPTimerCC26XX_start(hTimer);
}

这个是初始化代码,我直接将重装载的值设置位0x00160000;分频比位0x16,计数值为0x0000但是定时器还是计数到65535才溢出产生中断,我将计数值改为0x001603E8也是计数到65535才进行溢出产生中断,请问这是为什么,16位模式必须计数满才进行中断吗?

Felix ZF:

16位能表示的最大数值只有2^16=65536=0x10000,0x00160000和0x001603E8都超出了0x10000,因此只能记到0x10000。
你可以使用小于0x10000的数值试一下16位模式。

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F GPtimer驱动问题
分享到: 更多 (0)