CC2640R2F使用GPTimer实现100us的计时,并在超时回调函数中对某个IO口的引脚电平进行翻转来验证定时是否准确。但是使用示波器检测IO输出波形时,他的周期和脉宽都不一样。这是为什么
void timerCallback(GPTimerCC26XX_Handle handle, GPTimerCC26XX_IntMask interruptMask)
{
User_GpioSet(U_TEST_PIN,GPIO_STATE_TOGGLE); //电平翻转
}
void UserTimerInit()
{
GPTimerCC26XX_Params params;
GPTimerCC26XX_Params_init(¶ms);
params.width = GPT_CONFIG_16BIT;//GPT_CONFIG_16BIT;
params.mode = GPT_MODE_PERIODIC_UP;
params.debugStallMode = GPTimerCC26XX_DEBUG_STALL_OFF;
while(1)
{
hTimer = GPTimerCC26XX_open(2, ¶ms);
if(hTimer == NULL)
{
continue;
}
else
{
break;
}
}
Types_FreqHz freq;
BIOS_getCpuFreq(&freq);
GPTimerCC26XX_Value loadVal = (freq.lo / 10000 – 1); // 10000-1;生成100us计时器
GPTimerCC26XX_setLoadValue(hTimer, loadVal);
GPTimerCC26XX_registerInterrupt(hTimer, timerCallback, GPT_INT_TIMEOUT);
//GPTimerCC26XX_start(hTimer);
//GPTimerCC26XX_stop(hTimer);
}
Viki Shi:
引脚电平翻转为什么不用GPIO_toggle?就设置而言,没看出什么问题,把其他功能disable,仅跑这一个测试下