高级会员
- 积分
- 835
- 威望
- 429
- 贡献
- 232
- 兑换币
- 255
- 注册时间
- 2013-9-8
- 在线时间
- 87 小时
- 毕业学校
- 青州实验高级中学
|
void FTM_PWM_init(FTMn ftmn, CHn ch, u32 freq, u32 duty)
{
u32 clk_hz = (bus_clk_khz * 1000)>>1 ; //bus频率/2(这里为什么要移一位呢)
u8 sc_ps;
u16 cv;
u16 mod;
ASSERT( (ftmn == FTM0) || ( (ftmn == FTM1 || ftmn == FTM2 ) && (ch <= CH1)) ); //检查传递进来的通道是否正确
ASSERT( freq <= (clk_hz >> 1) ); //用断言检测 频率 是否正常 ,频率必须小于时钟二分之一
/* 计算频率设置 */
mod = (clk_hz >> 16 ) / freq ;
for(sc_ps = 0; (mod >> sc_ps) >= 1; sc_ps++);
if(freq < 1000)
sc_ps++;
mod = (clk_hz >> sc_ps) / freq;//与直接除以2^sc_ps相差甚小再说只能取整所以没有差别(有可能会溢出)
cv = (duty * (mod - 0 + 1)) / FTM_PRECISON
求红字部分的解答;
|
|