本帖最后由 小恩GG 于 2021-1-18 16:13 编辑
我们在测试 SDK_2.2.3_QN908XCDK\boards\qn908xcdk\driver_examples\sctimer\simple_pwm发现,当想产生62hz的pwm时候,结果输出的是125hz。后来发现只要设置频率低于125hz,输出的都是125hz的频率这是怎么回事?
我们首先就应该查一下计数值是否正确的装到了寄存器里,在产生pwm的过程里,有将计数值装到SCTMATCH这个操作,当计数达到match值再做其他操作。我们查看代码,这步在函数SCTIMER_CreateAndScheduleEvent里,接着就发现有些不对劲。 赋值语句是这样的: base->SCTMATCH[s_currentMatch] =SCT_SCTMATCH_MATCHn_L(matchValue); base->SCTMATCHREL[s_currentMatch] =SCT_SCTMATCHREL_RELOADn_L(matchValue); 每个语句都用了宏SCT_SCTMATCH_MATCHn_L,而这个语句作用就是取出数据的低16位。 而当我们的频率低于125hz时候,我们的matchValue经过计算,低16位用到了,高16位也用到了,那么这个宏修饰就会给我们带来问题,忽视掉高16位的值,计数自然就不对了。所以我们要改成这样。这样就能正常输出了。
|