在线时间17 小时
UID3110748
注册时间2015-11-6
NXP金币0
该用户从未签到
注册会员

- 积分
- 106
- 最后登录
- 2017-12-14
|
各位大神:
小弟用KEAZ128芯片写的一个PWM初始化程序和改变PWM占空比程序。(芯片:KEAZ128,调试板:TRK-KEA128,调试软件:KDS)
程序中PWM初始化可以用,但单步调试通不过。改变PWM占空比程序没有效果。
求教各位大神,我程序中哪里不对?
代码附下:
uint16_t MOD_temp;
void Init_FTM2_generate_PWM(uint8_t channel, uint16_t frequent, uint8_t duty_cycle)
{
uint16_t CnV_temp;
if(frequent > 30000)
frequent = 30000;
else if(frequent < 50)
frequent = 50;
if(duty_cycle > 100)
duty_cycle = 100;
else if(duty_cycle < 0)
duty_cycle = 0;
MOD_temp = (uint16_t)((3000000 + (frequent >> 1)) / frequent);
SIM_SCGC |= SIM_SCGC_FTM2_MASK ;
FTM2_MODE |= FTM_MODE_WPDIS_MASK;
FTM2_SC |= FTM_SC_PS(0X03); //分频后始终频率3 000 000 HZ
*((&FTM2_C0SC) + (uint32_t)(2 * channel)) |= FTM_CnSC_MSB_MASK | FTM_CnSC_ELSB_MASK;
*((&FTM2_C0SC) + (uint32_t)(2 * channel)) &= ~FTM_CnSC_ELSA_MASK;
FTM2_CNT = 0;
FTM2_SC &= ~FTM_SC_TOIE_MASK;
FTM2_MODE |= FTM_MODE_FTMEN_MASK;
FTM2_COMBINE = 0;
FTM2_CNTIN = 0;
FTM2_MOD = MOD_temp;
CnV_temp = (uint16_t)((float)MOD_temp * duty_cycle / 100);
*((&FTM2_C0V) + (uint32_t)(2 * channel)) = CnV_temp;
FTM2_SC |= FTM_SC_CLKS(1); //select system clock
}
void FTM2_PWM_duty(uint8_t chan, uint8_t duty)
{
if(duty > 100)
duty = 100;
else if(duty < 0)
duty = 0;
FTM2_MODE |= FTM_MODE_WPDIS_MASK;
*((&FTM2_C0V) + (uint32_t)(2 * chan)) = (uint16_t)((float)MOD_temp * duty / 100);
}
|
|