|  | 
 
| 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本帖子中包含更多资源您需要 登录 才可以下载或查看,没有帐号?立即注册 
  |