This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/AM3354:GPIO3_15上的 eHRPWM0B 输出

Guru**** 2606725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/652913/ccs-am3354-ehrpwm0b-output-on-gpio3_15

器件型号:AM3354

工具/软件: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进行测试、并为此引脚设置为高电平。 我在 示波器上成功观察到信号。  

请能有人帮忙、我应该少了些什么。非常感谢。

忠实地

陈爱德华   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么要对引脚多路复用器进行注释? 如果 eHRPWM0B 被引脚多路复用至 GPIO3_15、则不能在这个引脚上输出 eHRPWM0B。 必须在模式1中进行引脚多路复用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Biser:

    感谢您的快速响应。 我使用
    GPIO_PMUX_OFFADDR_VALUE (3、15、1);
    是已经在 Mode1中将引脚进行引脚多路复用、还是应该使用
    HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_McASP0_FSX)= CONTRAL_CONF_MUXMODE (1);
    而是? 我尝试执行后面的操作、但仍然没有来自该引脚的输出。

    此致、

    Edward

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅此处提供的示例: e2e.ti.com/.../2397259