工具/软件:Code Composer Studio
我需要通过 GPIO3_pin15生成一些 PWM 输出,因为我不熟悉此板。 我尝试关注此论坛中的一篇帖子,
。 我的代码如下所示:
#include "SoC_AM335x.h"
#include "interrupt.h"
#include "hw_types.h"
#include "ehrpwm.h"
#include "evmAM335x.h"
#include "uartStdio.h"
#include "hw_ehrpwm.h"
#include "pin_mux.h"
#include "GPIO_v2.h"
#define CLOCK DIV_VAL (10)
//#define SOC_EHRPWM_2_MODULE_FREQ (100000000)
#define SOC_EHRPWM_0_MODULE_FREQ (100000000)
#define CONTRAL_CONF_McASP0_FSX (0x994)
#define CONTRAL_CONF_MUXMODE (n)(n)
/ /
/*本地函数原型*/
/ /
静态空 EHRPWMConfigure (空);
/ /
/*本地函数定义*/
/ /
int main (空)
{
PWMSSModuleClkConfig (0);
//EPWM2PinMuxSetup();
//HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_McASP0_FSX)= CONTRAL_CONF_MUXMODE (1);
//GPIO_PMUX_OFFADDR_VALUE (3、15、7);
GPIO_PMUX_OFFADDR_VALUE (3、15、1);
/*GPIODirModeSet (0x481AE000、
15、
GPIO_DIR_OUTPUT);*/
/*为 PWM 子系统中的 EHRPWM 启用时钟*/
EHRPWMClockEnable (SOC_PWMSS0_regs);
/*在控制模块中启用定时器基模块时钟*/
PWMSSTBClkEnable (0);
/* EHRPWM 配置为在 EPWMBxB 引脚上生成 PWM 波形*/
EHRPWMConfigure();
while (1)
{
/* GPIOPinWrite (0x481AE000、
15、
GPIO_PIN_HIGH);*
}
}
静态空 EHRPWMConfigure (空)
{
/*时基配置*/
/*配置时钟频率*/
EHRPWMTimebaseClkConfig (SOC_ePWM_0_regs、
SoC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL、
SoC_EHRPWM_0_MODULE_FREQ);
/*配置输出波形的周期*/
EHRPWMPWMOpFreqSet (SOC_ePWM_0_regs、
SoC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL、
(unsigned int)(SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL)/7、
(unsigned int) EHRPWM_COUNT_UP、
(bool) EHRPWM_SHADOK_WRITE_DISABLE);
/*禁用同步*/
EHRPWMTimebaseSyncDisable (SOC_ePWM_0_regs);
/*禁用 SyncOut*/
EHRPWMSyncOutModeSet (SOC_ePWM_0_regs、EHRPWM_SYNCOUT_disable);
/*配置仿真行为*/
EHRPWMTBEmulationModeSet (SOC_ePWM_0_regs、EHRPWM_STOP_AFE_NEW_TB_Increment);
/*配置计数器比较 cub 模块*/
/*加载比较 A 值*/
EHRPWMLoadCMPA (SOC_ePWM_0_regs、
0、
(bool) EHRPWM_SHAD_WRITE_DISABLE、
(unsigned int) EHRPWM_COMPA_NO_LOAD、
(bool) EHRPWM_CMPCTL_OVERWR_SH_FL);
/*加载比较 B 值*/
EHRPWMLoadCMPB (SOC_ePWM_0_regs、
2、
(bool) EHRPWM_SHAD_WRITE_DISABLE、
(unsigned int) EHRPWM_COMPB_NO_LOAD、
(bool) EHRPWM_CMPCTL_OVERWR_SH_FL);
/*配置操作限定符*/
//在 CTR = CMPA 时切换*/
EHRPWMConfigureAQActionOnB (SOC_ePWM_0_regs、
EHRPWM_AQCTLB_ZRO_EPWMXBIH、
EHRPWM_AQCTLB_PRD_DONOTHING、
EHRPWM_AQCTLB_CAU_DONOTHING、
EHRPWM_AQCTLB_CAD_DONOTHING、
EHRPWM_AQCTLB_CBU_EPWMXBLOW、
EHRPWM_AQCTLB_BDONOTHING、
EHRPWM_AQSFRC_ACTSFB_DONOTHING);
/*旁路死区子模块*/
EHRPWMDB 输出(SOC_ePWM_0_regs、EHRPWM_DBCTL_OUT_MODE_BYPASS);
/*禁用斩波器子模块*/
EHRPWMChopperDisable (SOC_ePWM_0_regs);
/*禁用行程事件*/
EHRPWMTZTripEventDisable (SOC_ePWM_0_regs、(bool) EHRPWM_TZ_OneShot);
EHRPWMTZTripEventDisable (SOC_ePWM_0_regs、(bool) EHRPWM_TZ_CYCLEBYCYCLE);
/*事件触发器*/
/*每三次发生一次事件生成一次中断*/
EHRPWMETIntPrescale (SOC_ePWM_0_regs、EHRPWM_ETPS_INTPRD_THIRDEVENT);
/*在 CTR = CMPB 时生成事件*/
EHRPWMETIntSourceSelect (SOC_ePWM_0_regs、EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
/*禁用高分辨率功能*/
EHRPWMHRDisable (SOC_ePWM_0_regs);
}
据我了解、差异是引脚和输出通道。 但是,我尝试更改相关参数,似乎没有生成 PWM 信号。 我还检查我是否正确连接到该引脚、通过将 GPIO3_pin15的模式设置为7进行测试、并为此引脚设置为高电平。 我在 示波器上成功观察到信号。
请能有人帮忙、我应该少了些什么。非常感谢。
忠实地
陈爱德华