在该对象中,我们可以找到名为 f281xpwm.c.的文档
有一个功能用于更新PWM。问题使我感到困惑。
为什么p->PeriodMax 被放大到Q15?
在函数开始时,p->PeriodMax 被放大到Q15。tmp被缩小到Q0。在我看来,EvaRegs.T1PR=p->PeriodMax。
无需充分利用p->PeriodMax. p->PeriodMax可以 直接向EvaRegs.T1PR分配。因此,它可以提高效率。
代码如下所示:
void F281x_EV1_PWM_Update (PWMGEN *p)
{
Int16 MPeriod;
Int32 tmp;
//从周期调制输入(Q15)计算计时器周期(Q0)
Tmp =(Int32)p->PeriodMax*(Int32)p->MfuncPeriod; // Q15 = Q0*Q15
MPeriod =(Int16)(tmp>>16)+(Int16)(p->PeriodMax>>>>1);// Q0 =(Q15->Q0)/2 +(Q0/2)
EvaRegs.T1PR = MPeriod;
....
}