|
starterware的pwm例程中给出的是epwm1A引脚输出pwm,我现在想要把epwm0A、epwm0B、epwm1A三路同时输出pwm,应该如何修改呢?
我按照例程的PWM1ABasic函数写了PWM0ABasic与PWM0BBasic函数,但是epwm0A、epwm0B没有输出pwm,请帮忙看看哪里有问题,以下是我的代码
- void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
- {
- // 时间基准配置
- // 时钟配置
- EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);
- // 配置周期
- EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
- pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
- // 禁用输入同步信号
- EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);
- // 禁用输出同步信号
- EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);
- // 仿真(DEBUG)模式行为配置
- EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
- // 配置计数比较器子模块
- // 加载比较器 A 值
- EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*(100-duty_ratio)/100, EHRPWM_SHADOW_WRITE_DISABLE,
- EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- // 加载比较器 B 值
- EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
- EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- // 功能限定配置(输出引脚触发方式设定)
- // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
- EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
- EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
- EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
- // 禁用(旁路,信号直接输出到斩波子模块)死区模块
- EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
- // 禁用斩波子模块
- EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);
- // 禁用错误控制事件
- EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
- EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
- // 事件触发配置
- // 每三次事件发生产生中断
- EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
- EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
- // 使能中断
- EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);
- // 禁用高精度子模块
- EHRPWMHRDisable(SOC_EHRPWM_1_REGS);
- }
- void PWM0ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
- {
- // 时间基准配置
- // 时钟配置
- EHRPWMTimebaseClkConfig(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_0_MODULE_FREQ);
- // 配置周期
- EHRPWMPWMOpFreqSet(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL,
- pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
- // 禁用输入同步信号
- EHRPWMTimebaseSyncDisable(SOC_EHRPWM_0_REGS);
- // 禁用输出同步信号
- EHRPWMSyncOutModeSet(SOC_EHRPWM_0_REGS, EHRPWM_SYNCOUT_DISABLE);
- // 仿真(DEBUG)模式行为配置
- EHRPWMTBEmulationModeSet(SOC_EHRPWM_0_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
- // 配置计数比较器子模块
- // 加载比较器 A 值
- EHRPWMLoadCMPA(SOC_EHRPWM_0_REGS, (SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*(100-duty_ratio)/100, EHRPWM_SHADOW_WRITE_DISABLE,
- EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- // 加载比较器 B 值
- EHRPWMLoadCMPB(SOC_EHRPWM_0_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
- EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- // 功能限定配置(输出引脚触发方式设定)
- // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM0_A翻转,波形由EPWM0_A输出
- EHRPWMConfigureAQActionOnA(SOC_EHRPWM_0_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
- EHRPWM_AQCTLA_CAU_EPWMXATOGGLE, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
- EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);
- // 禁用(旁路,信号直接输出到斩波子模块)死区模块
- EHRPWMDBOutput(SOC_EHRPWM_0_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
- // 禁用斩波子模块
- EHRPWMChopperDisable(SOC_EHRPWM_0_REGS);
- // 禁用错误控制事件
- EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_ONESHOT);
- EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
- // 事件触发配置
- // 每三次事件发生产生中断
- EHRPWMETIntPrescale(SOC_EHRPWM_0_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
- EHRPWMETIntSourceSelect(SOC_EHRPWM_0_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
- // 使能中断
- EHRPWMETIntEnable(SOC_EHRPWM_0_REGS);
- // 禁用高精度子模块
- EHRPWMHRDisable(SOC_EHRPWM_0_REGS);
- }
- void PWM0BBasic(unsigned int pwm_clk,unsigned short duty_ratio)
- {
- // 时间基准配置
- // 时钟配置
- EHRPWMTimebaseClkConfig(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_0_MODULE_FREQ);
- // 配置周期
- EHRPWMPWMOpFreqSet(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL,
- pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);
- // 禁用输入同步信号
- EHRPWMTimebaseSyncDisable(SOC_EHRPWM_0_REGS);
- // 禁用输出同步信号
- EHRPWMSyncOutModeSet(SOC_EHRPWM_0_REGS, EHRPWM_SYNCOUT_DISABLE);
- // 仿真(DEBUG)模式行为配置
- EHRPWMTBEmulationModeSet(SOC_EHRPWM_0_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);
- // 配置计数比较器子模块
- // 加载比较器 A 值
- EHRPWMLoadCMPA(SOC_EHRPWM_0_REGS, (SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*(100-duty_ratio)/100, EHRPWM_SHADOW_WRITE_DISABLE,
- EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- // 加载比较器 B 值
- EHRPWMLoadCMPB(SOC_EHRPWM_0_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
- EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);
- // 功能限定配置(输出引脚触发方式设定)
- // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM0_B翻转,波形由EPWM0_B输出
- EHRPWMConfigureAQActionOnB(SOC_EHRPWM_0_REGS, EHRPWM_AQCTLB_ZRO_DONOTHING, EHRPWM_AQCTLB_PRD_DONOTHING,
- EHRPWM_AQCTLB_CAU_EPWMXBTOGGLE, EHRPWM_AQCTLB_CAD_DONOTHING, EHRPWM_AQCTLB_CBU_EPWMXBTOGGLE,
- EHRPWM_AQCTLB_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFB_DONOTHING);
- // 禁用(旁路,信号直接输出到斩波子模块)死区模块
- EHRPWMDBOutput(SOC_EHRPWM_0_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);
- // 禁用斩波子模块
- EHRPWMChopperDisable(SOC_EHRPWM_0_REGS);
- // 禁用错误控制事件
- EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_ONESHOT);
- EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_CYCLEBYCYCLE);
- // 事件触发配置
- // 每三次事件发生产生中断
- EHRPWMETIntPrescale(SOC_EHRPWM_0_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
- // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
- EHRPWMETIntSourceSelect(SOC_EHRPWM_0_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
- // 使能中断
- EHRPWMETIntEnable(SOC_EHRPWM_0_REGS);
- // 禁用高精度子模块
- EHRPWMHRDisable(SOC_EHRPWM_0_REGS);
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|