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/TMS320F28379S:如何通过引脚配置 μ EPWM7​​SYNCOUT 信号输出?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/796970/ccs-tms320f28379s-how-i-can-config-epwm7-syncout-signal-output-by-a-pin

器件型号:TMS320F28379S

工具/软件:Code Composer Studio

我​​通过 OUTPUTAR 在 GPIO 上配置 EPWM7 SYNCOUT 输出、但我在 GPIO58上看到一个无变化的低电平。 这是我的代码。

void EPwm7_Init( void ){
InitEPwm7Gpio();
//比较器输出直接通过XBar连接到EPwm同步信号输入端

//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
EALLOW;
//写入 EALLOW 受保护的寄存器需要此操作
PieVectTable.EPWM7_INT =&epwm7_ISR;
PieVectTable.EPWM7_TZ_INT =&epwm7_tzint_ISR;
EDIS;

EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
EPwm7Regs.TBCTL.bit.CLKDIV = 0;
EPwm7Regs.TBCTL.bit.HSPCLKDIV = 0;

EPwm7Regs.TBPRD = 50000; //设置计时器周期
EPwm7Regs.TBPHS.ALL = 0; //相位为0
EPwm7Regs.TBCTR = 0;

//设置 TBCLK
EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
EPwm7Regs.TBCTL.bit.PHSEN = TB_ENABLE;//同步到来时、TBCTR=TBPHS
EPwm7Regs.HRPCTL.bit.PWMSYNCSEL = 1;// 0 PWMSYNC = PRD_eq 信号脉冲 1 PWMSYNC = CNT_ZERO 信号脉冲

EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//这些位选择 EPWMxSYNCO 信号源。 0表示 EPWMxSYNC TB_SYNC_IN
// TB_SYNC_IN=0 TB_CTR_ZERO
EPwm7Regs.TBCTL.bit.HSPCLKDIV=0; //时钟与 SYSCLKOUT 的比率
EPwm7Regs.TBCTL.bit.CLKDIV = 0;
// TBCLK = SYSCLKOUT /(HSPCLKDIV×CLKDIV)
EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

//设置比较
EPwm7Regs.CMPA.bit.CMPA = 55;// 40/8*(10^7)= 500ns

EPwm7Regs.AQCTLA.bit.ZRO = AQ_SET; //在 CAU 当CTR = 0时,强制EPWM1A输出高电平 Ω 时设置 PWM1A
EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR; // 当CTR = CMPA且计数器CTR增计数时,强制EPWM1A输出低电平 Ω

//低电平有效 PWM -设置死区
EPwm7Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm7Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm7Regs.DBRED.bit.DBRED = 5;
EPwm7Regs.DBFED.bit.DBFED = 5;
EDIS;

EALLOW;
// EPwmXbarRegs
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0 = 0;// CMPSS1.CTRIPH -> MUX0输出-> TRIP4MUXENABLE 开关
EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX0 = 1;// TRIP4MUXENABLE 启用 MUX0
EPwmXbarRegs.TRIPOUTINV.bit.TRIP4 = 0;//高电平有效

EPwm7Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_TRIPIN4; // DCAH =比较器1输出 DCAH的电平高低由比较器1的输出决定
// EPwm7Regs.DCTRIPSEL.bit.DCALCOMPSEL = DC_TZ2; // DCAL = TZ2 DCAL的电平高低由TZ2决定 μ A
EPwm7Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; // DCAEVT1 = DCAH 高电平(随着比较器输出变为高电平将变为有效)
// // DCAH高电平时产生DCAEVT1事件
//

EPwm7Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT_FLT;
EPwm7Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_异 步;//采用异步路径
EPwm7Regs.DCACTL.bit.EVT1SYNCE = 1; ////同步已启用:

////与 DCAEVT1同步:166ns 延迟。 跳闸时间:31ns
EPwm7Regs.TZCTL.bit.DCAEVT1 = TZ_NO_CHANGE;

//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
// DCAEVT1的事件过滤配置(目前已禁用)
EPwm7Regs.DCFCTL.bit.SRCSEL = DC_SRC_DCAEVT1;
EPwm7Regs.DCFCTL.bit.Blanke = DC_BLANK_ENABLE;
EPwm7Regs.DCFCTL.bit.PULSESEL = DC_PULSESEL_ZERO;//针对消隐和捕捉对齐的脉冲选择
EPwm7Regs.DCFCTL.bit.BLANKINV = 0;

EPwm7Regs.DCFOFFSET = 0;//消隐窗口偏移= CMPA (n+1)
EPwm7Regs.DCFWINDOW = 70;//消隐窗口长度-初始值


EDIS;
EPwm7Regs.ETSEL.bit.INTSEL = ET_CTRL_CMPA; //选择“零时 INT”事件
EPwm7Regs.ETPS.bit.INTPRD = et_1st; //在第1个事件发生时生成 INT
EPwm7Regs.ETSEL.bit.INTEN = 1; //启用 INT

EALLOW;
GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 01; //
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 01; // gpio58 -> OUTPUTXBAR1 (O)
SyncSockRegs.SYNCSELECT.BIT.SYNCOUT = 2;// 0:EPWM7​​SYNCOUT
OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX14 = 3;
OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX14 = 1;

EDIS;

} 

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

    大家好、TaoTao、

    您是否为 ePWM7模块提供了软件同步或同步?  我认为您不会按照配置的方式获得同步、除非您有其中一个。

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

    感谢你的答复。

    我使用 CMPSS.CTRIPH 提供 DCAEVT1.SYNC 来同步 epwm7。 DCAEVT1.SYNC 是否被视为 EPWMxSYNCI? 能否通过配置 EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN 在 GPIO 上看到 DCAEVT1.SYNC;
    当我调试上述代码时、我可以根据需要看到 ePWM 输出、但我看不到 ePWM 同步信号。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    否、DCAEVT1.SYNC 不能被视为 Syncin。

    SyncOut 可由 Syncin 或者诸如 cnt = 0或者 CMPB、CMPC 或者 CMPD 等事件生成。

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

    您好!

    感谢您的回复、 我似乎理解了。  我会跟进这项质询,稍后我会试验及答覆。