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/TMS320F28377D:将 GPIO 信号复制到另一个 GPIO 输出引脚

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/959184/ccs-tms320f28377d-copy-gpio-signals-to-another-gpio-output-pins

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

您好!

我有两个 PWM 信号 PWM1和 PWM2、它们使用"//*模型初始化函数*/"生成。 我想读取 引脚的状态 (PWM1A 为 GPIO0、PWM2A 为 GPIO2) 并将它们写回引脚(GPIO4作为 PWM3A、GPIO5作为 PWM3B) 、而无需初始化 PWM3。 我使用了不同的 GPIO 寄存器、如下面的代码所示、但我没有得到完全相同的 GPIO0和 GPIO2产生的信号。  GPIO4和 GPIO5的信号输出会有一些延迟、有时在特定占空比下、当我更改 PWM1和 PWM2的 CAMP 寄存器的值时、我不会从引脚 GPIO4和 GPIO5获得任何输出信号。 那么、请帮帮我。  

#include "StackedTwoPhase.h"
#include "StackedkedTwoPhase_Private .h"

/*块信号(默认存储)*/
B_StackedTwoPhase_T StackedTwoPhase_B;

//实时模型*
RT_MODEL & StackedTwoPhase_T StackedTwoPhase_M





********************** StackedPhuackedPhuPhase_Stoc相 位*(st_M =



************************************************* /数字输入'*/
{

StackedTwoPhase_B.I1 = GpioDataRegs.GPADD.bit.GPIO0;

}

/* S 函数(c280xgpio_di):' /数字输入1'*/
{

StackedTwoPhase_B.I2 = GpioDataRegs.GPADD.bit.GPIO2;

}

// MATLAB 函数:' /MATLAB Function1'包含:
* constant:' /constant'
*/




/* MATLAB 函数结束:' /MATLAB Function1'*/

/* S-function (c280xgpio_do):' /数字输出'*/
{

if (StackedTwoPhase_B.I1)

GpioDataRegs.GPASET.BIO4=1;

否则

GpioDataRegs.GPACLEAR.BIO4=1;

}

// S 函数(c280xgpio_DO):' /数字输出1'*/
{

if (StackedTwoPhase_B.I2)

GpioDataRegs.GPASET.BIO5=1;

否则

GpioDataRegs.GPACLEAR.BIO5=1;

}

/*增益:' /TMPRD'包含:
*常量:' /constant'
*/
RTB_TMPRRD = StacTwoPhase_P.TMPRRD_Gain * StackedTwoPhase_P.constant_value;

// S 函数(c2802xpwm):' /ePWM1'*/

/*-更新 ePWM1的 CMPA 值-*/
{
EPwm1Regs.CMPA.bit.CMPA =(uint16_T)(RTB_TMPRRD);
}

// S 函数(c2802xpwm):' /ePWM2'包含:
*常量:' /Phase_2'
*/
EPwm2Regs.TBPHS.bit.TBPHS = 499;

/*-更新 ePWM2的 CMPA 值-*/
{
EPwm2Regs.CMPA.bit.CMPA =(uint16_T)(RTB_TMPRRD);
}


//


注册模型函数*/* void for ePWM16_t *




//初始化's (void)*/* pixedinuinuinuinuinu_gcum_do' /数字输出'*/
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;

EDIS;

//开始 S 函数(c280xgpio_do):' /数字输出1'*/
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;

EDIS;
//开始 S 函数(c2802xpwm):' /ePWM1'*/
EALLOW;
CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;

/***初始化 ePWM1


计数器模块***/{/*//时基控制寄存器 EPwm1Regs.bit.TBCLKSYNC0


= 0;TBIT.TMPR0 = TBIT.TMPR0;TCMOP.TCMOPR0 = TMPR0 = TBR0;TBIT.TMPR0 = TBIT.TMPR0 / TMPR0 = TBIT.TBR0 = TCMON.TMPR0;TMPR0 = TBIT.TMPR0 = TCMOPTM0;TMPR0 = TMPR0 = TMPR //相位加载使能
EPwm1Regs.TBCTL.bit.PHSDIR = 0;//相位方向位
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;//高速 TBCLK 预分频
器 EPwm1Regs.TBCTL.bit.CLKDIV = 0;//所有


~

时间 TBDCL = 0*/ TBDCLK 预分频器 EPwCLK = 0XM1RP.TBR = 0;/ TBDCLKCLK = 0XTBR = 0/ TBDCLKT.TBR = 0/ TBR = 0/ TBDCLKCLKCLK = 0*所有时间/ TBR (TBR) /EPwm1Regs.TBPRD
= 999;//时基周期寄存器

/*//时基相位寄存
器 EPwm1Regs.TBPHS.bit.TBPHS = 0;//相位偏移寄存
器*/
EPwm1Regs.TBPHS.ALL =(EPwm1Regs.TBPHS.ALL &~μ




s)| EPwm1Regs.TBCC.0*/ PRC 计数器0x0000-计数器0x0000*/减计数器0x0000*/减计数器0x0000*/减计数器0x0000.TBRD/减计数器计数器计数器计数器 //
//计数器比较控制寄存
器 EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;//比较 A 寄存器块运行模式
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;//比较 B 寄存器块运行模式
EPwm1Regs.CMPCTL.bit.AMODE
= 0;//比较 B 寄存器块运行模式 EPwM1REGP.AMODE = 0;EPWMODE.AMODP.0;EPWMODE.ADDR.AMOD0 = 0;EPwM1REP.AMODP.AMODP.AMODP. //活动比较 B 加载
*/
EPwm1Regs.CMPCTL.ALL =(EPwm1Regs.CMPCTL.ALL &~





~0x5F)| 0x0;// EPwm1Regs.CMPCTL2.bit.SHDWCMODE = 0;//比较 C 寄存器块操作模式 EPwm1Regs.CMTL2
= 0xCMDCMDP.RDC0.0;EPwCMDCMDCMDCMDP.0 = 0xCMDCMDCMDCMWCL.RCOM.W0 = 0xM0/ EPwCMDP.RCMDCMDCMDP.0 //计数器比较 A 寄存器
EPwm1Regs.CMPB.CMPB = 0;//计数器比较 B 寄存器
EPwm1Regs.CMPC = 0;//计数器比较 C 寄存
器 EPwm1Regs.CMPD = 0;//计数器比较 D 寄存器

/*-设置操作
-寄存器限定符(AQwLA.CLA)子模块-/ EPwm1Regs.CMPD = 0;//针对
所有 EPwlb. //输出 B 的动作






限定器控制寄存器//动作限定器软件强制寄存器 EPwm1Regs.AQSFRC.bit.RLDCSF = 0;//从影子选项重新加载*/ EPwm1Regs.AQSFRC.ALL =(EPwm1Regs.AQSFRC.ALL &~0xC0)| 0x0;/EPWM1Reger.AQSFRC.FCS0*=(EPwm1Regim1.QFCR.R
) //输出 A
EPwm1Regs.AQCSFRC.bit.CSFB 上的持续软件强制= 0;//输出 B 上的持续软件强制
*/
EPwm1Regs.AQCSFRC.ALL =(EPwm1Regs.AQCSFRC.ALL &~0xF)| 0x0;

/*- Setup Dead-Band-Control

=(EPwmRdB/Db.DB-Control =)*/ Db.Dbt dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/dB/ //死区输出模式控制
EPwm1Regs.DBCTL.bit.IN_MODE = 0;//死区输入选择模式控制
EPwm1Regs.DBCTL.bit.POLSEL = 2;//极性选择控制
EPwm1Regs.DBCTL.bit.HALFCMRCLE = 0;//半

~
个位 REDP.DBCTRL = 0xDBW1RED.DBRCLD;//所有 EPwmRd.DBC20=0XD.DBRCM.DBRCLD = 0xDBCTRL = 0xDBW1RED.DBRMCTL.DBW1RED.RED.RED.RED.RED.RED.RED.RED.RED.RED.RE //死区发生器上升沿延迟计数寄存
器 EPwm1Regs.DBFED.bit.DBFED = 20;//死区发生器下降沿延迟计数寄存器

/*-设置事件触发(ET)子模块-*/
//事件触发器选择和预分频寄存


器 EPwm1CASC.ETSEL.bit.EEPwSEL.EN=1;EPwSEL.CASTM1CASEPM= 0 = 1;EPwSEL.EN.SOLE.EN.EN.EN.SOEPM4 = 1;EPwSEL.CASTEPwSEL.CASTOL.CAST_1 = 1 = 1;EPM.EN.EN.EN.EN.SOEPM4; //转换开始 A 选择
EPwm1Regs.ETPS.bit.SOCAPRD = 1;// EPWM1SOCA 周期选择

EPwm1Regs.ETSEL.bit.SOCBEN = 0;//转换开始启用

EPwm1Regs.ETSELCMP = 0;EPwm1RP.EPTM.SOSELCMP
= 0;EPwm1RP.EPT.EPS.EEPn 位/EPwM1RTE.EPT.EPS.1RP.EEPn =


1;EPwmSESL.EPM.EPT.EPS.1RP.1RP.1RP.1RP.EEPn 位= 0;EPwM1M1RP.EPT.EPS.EN.EPT.EPT.EPS.EPS.EPT.EPS.EN.EPM1.TESL.1RP.1RP.1RP.1RP.1
EPwm1Regs.ETSEL.bit.INTSEL = 4;//转换开始 A Select

EPwm1Regs.ETPS.INTPRD = 1;// EPWM1INTn 周期选择
*/
EPwm1Regs.ETSEL.ALL =(EPwm1Regs.ETSEL.ALL &~
~0xFF7F 周期选择*;/EPwm1RP.PWM.0*



=)/EPwPC1.01 =(EPwm1RP.0*)/EPwCMP.0X1RP.0*)| EP1RP.EPTMR1RP.0*=(EPW1RP.ETRS.PC.ALL =(EPW1RP.0*)/EPW1P.0*) // PWM 斩波使能
EPwm1Regs.PCCTL.bit.CHPFREQ = 0;//斩波时钟频率
EPwm1Regs.PCCTL.bit.OSHTWTH = 0;//一次性脉冲宽度
EPwm1Regs.PCCTL.bit.CHPDCRY = 0;// chdopt 1WCL.Ep

=~0;//所有

跳变频(0* EpwmCL.0*)= 0* EPwmCL.0*(EPwmRETP.0*)

//跳闸区域选择寄存器

//跳闸区域控制寄存
器 EPwm1Regs.TZCTL.bit.TZA = 3;// EPWM1A
上的 TZ1至 TZ6跳闸动作。EPwm1Regs.TZCTL.bit.TSB = 3;// EPWM1B 上的 TZ6跳闸动作= TZ1
;EPWCT1.TZT1 =
3;EPT1 = TZEVTZ1 = TZ1。EPT1.TCAREG3;EPT1.TZ1 = TZ1 = TZEVTZ1。 // DCAEVT2
EPwm1Regs.TZCTL.bit.DCBEVT1上的 EPWM1A 操作= 3;// DCBEVT1
EPwm1Regs.TZCTL.bit.DCBEVT2上的 EPWM1B 操作
*/ EPwm1Regs.TZCTL.BIT.DCBEVT2上的 EPWM1B 操作*=
~0;// ETRIP.T1RET.EDRT.T1RET.ETRS.T0 = 0 = 0;//

ETRIP.TRIP.TRIP

= 0 = 0 = 0;// ETRIP.TRIP.TRIP.TRIP.TRIP.TRIP.TRIP.TRIP.T1RT.E1.T0*= 0 = 0.TRIP.TRIP.TRIP.TRIP.TRIP.TRIP.TRIP.TRIP.TRIP.T1RT.E1.T //跳匣区域逐周期启用
EPwm1Regs.TZEINT.BIT.DCAEVT1 = 0;//数字比较 A 事件1内部启用
EPwm1Regs.TZEINT.BIT.DCAEVT2 = 0;//数字比较 A 事件2内部启用
EPwm1Regs.TZEINT.BIT.B0;数字比较
1 = EBIT.DCBEVT1 = 0;EBIT.DCT2 = 0 //数字比较 B 事件2内部使能
*/
EPwm1Regs.TZEINT.ALL =(EPwm1Regs.TZEINT.ALL &~0x7E)| 0x0;

//数字比较 A 控制寄存器
EPwm1Regs.DCACTL.bit.EVT1SYNCE = 0;// EPT1RDC1RDC1RDC1RDC1RDC1RDC1RECS.EP.EP.TACTL.EP.EP.EP.DC1RDC1SYNCE

= 0;// EPT1RDC1RDC1RDC1RDC1RDC1 = EP.DC1RDC1RDC1RECS.EP.EP.TAC1.TAC1.TAC1.TAC1.TACTL.EP.EP.TAC1.DC1REC.EP.EP.TAC1.TAC1.TAC1.
// DCAEVT1源信号
EPwm1Regs.DCACTL.bit.EVT2FRCSYNCSEL = 0;// DCAEVT2强制同步信号
EPwm1Regs.DCACTL.bit.EVT2SRCSEL = 0;// DCAEVT2源信号
*;
// EPWM1Regs.DCACTL



= 0xDC1RP.EPT0*/ DCMEP1RP.EPT1.RP.0 = 0;/ DCMEP1RP.DC1RP.EPT1.TCM.EP.0 = 0;/ DCMEP1RP.DR1.T1RP.EPT1.T1RP.DCM.EP.0*= 0 ~0;/ DCMEP1RP.DR1.DC1.DC1.TCMEP1RP.EPT1.TCM.EP.DR1.T1RP.DR.EP.DR1.T1RCM. // DCBEVT1 SOC 使能
EPwm1Regs.DCBCTL.bit.EVT1FRCSYNCSEL = 0;// DCBEVT1强制同步信号
EPwm1Regs.DCBCTL.bit.EVT1SRCSEL = 0;// DCBEVT1源信号
EPwm1Regs.DCBEVL


= 0xCbT1RP.EPT2.0;/ DCBEVT1RDCRT2RP.EPT2.0 = 0xCRT2 = 0 ~EPT0RES.DCB0R0;EPT0R0 = DCB0/ DCBEVTCB0R20RBTL = 0 = 0;EPT0R20RCTL = 0 = DCBDCBEPT2 = 0 = 0 = DCBEPT0/ DCB0RCTL = DCBEPT0RTE.DCB0RTE.DCB0RTE.

/*//数字比较跳闸选择寄存
器 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 0;//数字比较 A 高 COMP 输入选择

EPwm1Regs.DCTRIPSEL.bit.DCALCOMPSEL = 1;//数字比较 A 低 COMP 输入选择 EPwm1Regs.DCTRIPSEL.bit.DCAMPSEL = 1;数字比较 A 低 COMPREP.DCOMPSEL
= 0;数字比较 DCOMPRCOMPL = 0
//数字比较 B 低 COMP 输入选择





*/
EPwm1Regs.DCTRIPSEL.ALL =(EPwm1Regs.DCTRIPSEL.ALL &~ 0xFFFF)| 0x1010;

//跳匣区域数字比较器选择寄存
器 EPwm1Regs.TZDCSEL.bit.DCAEVT1 = 0/
数字比较
器0 = 0;数字比较 DCS1RDCSRF.T0 = 0;数字输出 //数字比较输出 B 事件1
EPwm1Regs.TZDCSEL.bit.DCBEVT2 = 0;//数字比较输出 B 事件2
*/
EPwm1Regs.TZDCSEL.ALL =(EPwm1Regs.TZDCSEL.ALL &~0xFFF)| 0x0;

// EEPwm1Regs.TCCEL.ALL =
(EPwCLT.EP.EP.TFPWCTL =禁用 EPwmCL.TRF0
)寄存器;// EPwm1位/EPwCL1.PM1.Cf1位/EPwCLT.EP.EP.EP.Cf1 //针对消隐和捕捉对齐
的脉冲选择 EPwm1Regs.DCFCTL.bit.BLANKINV = 0;//消隐窗口反转
EPwm1Regs.DCFCTL.bit.SRCEL = 0;//滤波器块信号源选择
*/
EPwm1Regs.DCTL.ALL =(EPwmCFCTL.bit.SRCSEL = 0);//滤波器块信号源选择*~
= 0xDCFDCW 偏移0XDCW = 0XDCW;EPWM1RF1REGP.DC0XDC0XDCF = 0;EPT.EPT.DC10/偏移 DRF1RF1RCOL = 0XDC0XDC0XDC0XDC10/偏移
//数字比较滤波器窗口寄存

器//数字比较捕捉控制寄存器
EPwm1Regs.DCCAPCTL.bit.Cape = 0;//计数器捕捉使能
*/
EPwm1Regs.DCCAPCTL.ALL =(EPwm1Regs.DCCAPCTL.ALL &~0x1)| 0x0;

// EPwm1Regs.EPCFG =
EPw401.00n 位/EPWCCRPMB.0b = EPw40b = EPwHRCHRCnv1.00n 位/EPwMB;EPW1.SWRPMB.0b = EPwMb = EPWCCRPMB.0b = EPwKb = EPwMb
// EPWMB 输出选择位
*/
EPwm1Regs.HRCNFG.ALL =(EPwm1Regs.HRCNFG.ALL &~0xA0)| 0x0;

//使用所有比较值和 TBPRD 的链接值更新链接寄存器*//
////如果模型中存在 ePWM 寄存器,则不抛出错误* EPwmRCLK.EPWCLK.INK.EPWCLK/

EPwm1Regs.EPWMXLINK.BIT.CMPALINK = 0;
EPwm1Regs.EPWMXLINK.BIT.CMBLINK = 0;
EPwm1Regs.EPWMXLINK.BIT.CMPCLINK = 0;
EPwm1Regs.EPWMXLINK.EPWMXLINK = 0;EPWMXLINK = 0位
EDIS;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
}

//开始 S 函数(c2802xpwm):' /ePWM2'包含:
*常量:' /Phase_2'
*/
EALLOW;
CpuSysRegs.PCLKCR2.bit.EPWM2 = 1;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;

/***初始化 ePWM2模块***/
{
/*//时基控制寄存
器 EPwm2Regs.bit.TBCLKSYN


= 0;TBIT.TCMOS0 = 0;TBR0/ TBR0/ TBIT.TCMOS2计数器= 0;TBR0/ TBR0/ TBIT.TCCTRS0 = TBR0/ TBR0/ TBIT.TBR0/ TBR0/ TBR0/ TBR0/ TBR0/ TBRTCM0 =位 EPn = TCCTRM0/ TBRTBR0.TBR0.TBIT.T //相位加载使能
EPwm2Regs.TBCTL.bit.PHSDIR = 0;//相位方向位
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;//高速 TBCLK 预分频
器 EPwm2Regs.TBCTL.bit.CLKDIV = 0;//所有


~

时间 TBDCL = 0*/ TBDCTRL = 0/ TBM2CLK 预分频器 EPwCLKCLKCLK = 0;/TBR = 0XMCLKCLKCLK.TBR = 0XMCLK.TBR = 0/ TBR = 0/ TBR = 0XMCLK.Tb.Tb.Tb.TBR = 0/所有时间/ TBR (TBR) /EPwm2Regs.TBPRD
= 999;//时基周期寄存器

/*//时基相位寄存
器 EPwm2Regs.TBPHS.bit.TBPHS = 0;//相位偏移寄存
器*/
EPwm2Regs.TBPHS.ALL =(EPwm2Regs.TBPHS.ALL &~μ




s)| EPwm2Regs.TBCC.0*计数器/减计数器0x0000*/减计数器0x0000*/减计数器0x0000.TBRC.T/减计数器0 /*
//计数器比较控制寄存
器 EPwm2Regs.CMPCTL.bit.SHHDWAMODE = 0;//比较 A 寄存器块运行模式
EPwm2Regs.CMPCTL.bit.SHDWBMODE = 0;//比较 B 寄存器块运行模式
EPwm2Regs.CMPCTL.bit.AMODE
= 0;/ ADDRV0/ ADDRODE = 0;EPwM2LODP.AMODP.AMODE = 0 //活动比较 B 加载
*/
EPwm2Regs.CMPCTL.ALL =(EPwm2Regs.CMPCTL.ALL &~





~0x5F)| 0x0;// EPwm2Regs.CMPCTL.bit.SHDPCMMODE = 0;//比较 C 寄存器块操作模式 EPwm2Regs.CMT2.TCL0.0 = 0xCMD/ EPwCMD/ EPCR2.TCL0.T0;EPmRd/ EPmRd/ EPwCMD/ EPwCMD.Rd.Rd.Rd.Rd.Rd= 0xM2MCMTCMD/ Rd.Rd.Rd.Rd.Rd.Rd.Rd.Rd.Rd.CMTCMDCMDCMDCMDCMDCMD/位
//计数器比较 A 寄存器
EPwm2Regs.CMPB.bit.CMPB = 0;//计数器比较 B 寄存器
EPwm2Regs.CMPC = 0;//计数器比较 C 寄存
器 EPwm2Regs.CMPD = 0;//计数器比较 D 寄存器

/*-设置操作
-寄存器限定符(AQWCLA)子模块-ePWM2Regimer.CMPD = 0;// EPwq2LAG.q.Control = 0;//针对
所有 EPwlb. //输出 B 的动作






限定器控制寄存器//动作限定器软件强制寄存器 EPwm2Regs.AQSFRC.bit.RLDCSF = 0;//从阴影选项重新加载*/ EPwm2Regs.AQSFRC.ALL =(EPwm2Regs.AQSFRC.ALL &~0xC0)| 0x0;/EPWM2Reger.AQSFRC.FCS0*/连续动作寄存
器 //输出 A
EPwm2Regs.AQCSFRC.bit.CSFB 上的持续软件强制= 0;//输出 B 上的持续软件强制
*/
EPwm2Regs.AQCSFRC.ALL =(EPwm2Regs.AQCSFRC.ALL &~0xF)| 0x0;

/*- Setup Dead-Band-Control

=(EPwmRdB/Db.DB-Control =)*/ Db.Dbt DCM.DCMDCM.DE/ DCMDB-MODULL.DULL.DULL.DCMDCM.ADR/ DULES.ADR=(EPwd/ D/ //死区输出模式控制
EPwm2Regs.DBCTL.bit.IN_MODE = 0;//死区输入选择模式控制
EPwm2Regs.DBCTL.bit.POLSEL = 2;//极性选择控制
EPwm2Regs.DBCTL.bit.HALFCMCLE = 0;//半

~
个位 RECLD.EEPwm2Regs.DBC20=0xDBRd.DBRd.EEPw2Rd.DBCTRL = 0Xn (所有) //死区发生器上升沿延迟计数寄存
器 EPwm2Regs.DBFED.bit.DBFED = 20;//死区发生器下降沿延迟计数寄存器

/*-设置事件触发(ET)子模块-*/
//事件触发器选择和预分频寄存

器 EPwm2CASREP.ETSEL.bit.EEPwSEL.EN=4
;EPwSEL.CASTM0=EN.EN.EN.EN=4;EPwSEL.CASTICAL = 1 = EN.EN.EN.EN.EN.EN.EN.EN.EN.EN.EN.ENTRFICAL 位= 1;EPM.EN.EN.EN.EN.EN.EN. //转换开始 A 选择
EPwm2Regs.ETPS.bit.SOCAPRD = 1;// EPWM2SOCA 周期选择

EPwm2Regs.ETSEL.bit.SOCBEN = 0;//转换开始启用

EPwm2Regs.ETMS.bit.EEPw2PRC.EEPn
= 0;EPwm2PRC.EPS2.tn = EPw/ EPwM2PRC.EPM.EN.EPM2.tn 位转换
开始


EPwm2Regs.ETSEL.bit.INTSEL = 4;//转换开始 A Select

EPwm2Regs.ETPS.INTPRD = 1;// EPWM2INTn 周期选择
*/
EPwm2Regs.ETSEL.ALL =(EPwm2Regs.ETSEL.ALL &~
~0xFF7INTn 周期选择*)*/ EPwm2Regs.ETPL.0*=(EPwm2RP.0*)/EPwCMPS.TRPm0*=(EPW0X1RP.0*)



// PWM 斩波使能
EPwm2Regs.PCCTL.bit.CHPFREQ = 0;//斩波时钟频率
EPwm2Regs.PCCTL.bit.OSHTWTH = 0;//一次性脉冲宽度
EPwm2Regs.PCCTL.bit.CHPDCRY = 0;// chmCL.E0*

所有~

(EPwm2REP.ETRL = 0*)+ 0*(EPwmCL.EmCL.E0*)

//跳闸区域选择寄存器

//跳闸区域控制寄存
器 EPwm2Regs.TZCTL.bit.TZA = 3;// EPWM2A
EPwm2Regs.TZCTL.bit.TSZ1 = 3;// TZ1至 TZ6跳闸动作在 EPWM2A EPwm2Regs.TZCTL.bit.TSB = 3;// EPT2.TZEVTZ2至 TZ6跳闸动作在 EPT2.TZ2
上= 3;EPT2.TZ2 = TCAREG2.TMR2.TMR2.TMR2 = 3
;EPT2.TMR2.TMR2.TMR2.TMR2.TMR2.TMR2.TMR2.TMR2.T2 // DCAEVT2
EPwm2Regs.TZCTL.bit.DCBEVT1上的 EPWM2A 动作= 3;// DCBEVT1
上的 EPWM2B 动作
* EPwm2Regs.TZCTL.bit.DCBEVT2 = 3;// DCBEVT2上的 EPWM2B 动作**/ EPwm2Regs.TCB0*
/~

ETRIP = 0xW0* TRIP.ETRIP.TRIP.T0/ ETRIP.T0.T0.ETRIP.ETRIP.ETRIP.E0.TRIP.TRIP.E0.TRIP.TRIP.E0.T20.ETRIP.ETRIP.TRIP = 0;// ETRIP.ETRIP.TRIP.TRIP.E0.TRIP.TRIP.TRIP.TRIP.TRIP.TRIP.T

//跳匣区域逐周期启用
EPwm2Regs.TZEINT.BIT.DCAEVT1 = 0;//数字比较 A 事件1内部启用
EPwm2Regs.TZEINT.BIT.DCAEVT2 = 0;//数字比较 A 事件2内部启用
EPwm2Regs.TZEINT.BIT.B0
= 0;数字比较 A 事件2 InT.DCBEVT0 = 0;EINT.DCBI = 0;EINT.DBIT.DCT2 = 0 //数字比较 B 事件2内部使能
*/
EPwm2Regs.TZEINT.ALL =(EPwm2Regs.TZEINT.ALL &~0x7E)| 0x0;

//数字比较 A 控制寄存器
EPwm2Regs.DCACTL.BIT.EVT1SYNCE = 0;// EPT1RDC1RDC1SYSRC.EP.TAC1.TDC0/
EP.DC1RDC0/ EFRTACTRS.TACTL.EP.DC1RDC1RDC0/ EFRTACTRS.TACTRS.TACTL.EP.DC1SYENTRS.TACTRC.EP.DC1
= EP.DC1RDC1RDC0/ EFRTACTRS.TACTL.EP.DC1RCMOC.EP.DC1REC.EP.DC1REC.EP.DC
// DCAEVT1源信号
EPwm2Regs.DCACTL.bit.EVT2FRCSYNCSEL = 0;// DCAEVT2强制同步信号
EPwm2Regs.DCACTL.bit.EVT2SRCEL = 0;// DCAEVT2源信号
*/
EPwm2Regs.DCACTL ~



= 0;/ DCMEP1RP.DC0*= 0;/ DCMEP2RP.EPT1.DC0* 0 = 0;/ DCMEP2RP.DC0* n = 0;/ DCMEP2RP.DC0* n = 0;DCMEP2RP.EPTC.EP.DC0* n // DCBEVT1 SOC 启用
EPwm2Regs.DCBCTL.bit.EVT1FRCSYNCSEL = 0;// DCBEVT1强制同步信号
EPwm2Regs.DCBCTL.bit.EVT1SRCSEL = 0;// DCBEVT1源信号 EPwm2Regs.DCBEVT2REP.0
= 0xCBTC.0/ EPT2RP.EPT2.TCB0/ DCB0RDCRT2RP.EPT2.RES.ERT2
=

0 ~0;EPT2RP.DCB0RP.DCB0/ DCBEV2信号源= 0xCRT2RDCRT2RP.DCB0RP.DCB0/所有 DCB0RCTL = 0;EPT2.DCB0RCTL = 0RCTL = 0 = 0;EPT0RCTL = 0RCTL = 0 = 0 = 0

/*//数字比较跳闸选择寄存
器 EPwm2Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 0;//数字比较 A 高 COMP 输入选择

EPwm2Regs.DCTRIPSEL.bit.DCALCOMPSEL = 1;//数字比较 A 低 COMP 输入
选择 EPwm2Regs.DCTRIPSEL.BIT.DCOMPSEL = 1;数字比较 A 低 COMPSEL 位= 0;DCOMPRCOMPRCOMPL = 0;DCOMPRCOMPREP.DCMP= 0
//数字比较 B 低 COMP 输入选择





*/
EPwm2Regs.DCTRIPSEL.ALL =(EPwm2Regs.DCTRIPSEL.ALL &~ 0xFFFF)| 0x1010;

//跳匣区域数字比较器选择寄存
器 EPwm2Regs.TZDCSEL.bit.DCAEVT1 = 0/
数字比较器0;EPT2.TDCSR2.T0
= 0;数字比较 DCT2 = 0;数字事件 DCTDCTDCOM.DCT2;数字比较 DCT2 = 0 = 0 //数字比较输出 B 事件1
EPwm2Regs.TZDCSEL.bit.DCBEVT2 = 0;//数字比较输出 B 事件2
*/
EPwm2Regs.TZDCSEL.ALL =(EPwm2Regs.TZDCSEL.ALL &~0xFFF)| 0x0;

// EEPwm2Regs.TbLPM1.Cfb
=禁用 EPwCL.EPT.EPM2寄存器;// EPwCLT.Cf.EPM2
//针对消隐和捕捉对齐
的脉冲选择 EPwm2Regs.DCFCTL.bit.BLANKINV = 0;//消隐窗口反转
EPwm2Regs.DCFCTL.bit.SRCEL = 0;//滤波器块信号源选择
*/
EPwm2Regs.DCFL.ALL =(EPwm2Regs.EPT.0XDCF =~0)
;//滤波器块信号源偏移量= 0XDCW = 0XDCW;EPW2RF2RF0XDC0XDC0XDC0XDC0XDC0XDCF = 0;EDRV0XDC0XDC0XDC0XDC0XDCF
//数字比较滤波器窗口寄存

器//数字比较捕捉控制寄存
器 EPwm2Regs.DCCAPCTL.bit.Cape = 0;//计数器捕捉使能
*/
EPwm2Regs.DCCAPCTL.ALL =(EPwm2Regs.DCCAPCTL.ALL &~0x1)| 0x0;

// EPwm2Regs.EPCFG

= EPw0b = EPwM0.HRCNTL.EPMB.0b;EPWHRCHRCHREST.EPMB.0b = EPwM0b = EPwM0b = EPwM0b = EPWAB.EPMB.EPMB.EPMB.EPMB.EPMB.EPMB.0 // EPWMB 输出选择位
*/
EPwm2Regs.HRCNFG.ALL =(EPwm2Regs.HRCNFG.ALL &~0xA0)| 0x0;

//使用所有比较值和 TBPRD 的链接值更新链接寄存器*//
////如果模型中存在 ePWM 寄存器,则不抛出错误* EPwmLMK.EPWCLK.EPWINK/

EPwm2Regs.EPWMXLINK.BIT.CMPALINK = 1;
EPwm2Regs.EPWMXLINK.BIT.CMBLINK = 1;
EPwm2Regs.EPWMXLINK.BIT.CMPCLINK = 1;
EPwm2Regs.EPWMXLINK = 1;EPWMXLINK = 1位;EPWMXLINK = 1;EPWCLIN.CMPCLINK = 1
EDIS;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
}
}

//模型终止函数*
/ void StackedTwoPhase_terminate (void)
{
//(无需终止代码)*


//*
//*生成代码的文件尾部。
*
*[EOF]
*/ 

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

    穆罕默德

    我有点困惑、您是如何复制信号的? 状态并将其写回来实现的?

    NIMA

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

    你好、Nima、

    感谢您的回复。

    是的、我是说读取 GPIO0和 GPIO2引脚的状态、并立即将它们写回 GPIO4和 GPIO5引脚。 当我更改 CMPA 值以将 ePWM1和 ePWM2的占空比从0.1更改为0.9时,对于某些值,我在 GPIO04和 GPIO05引脚中看不到任何信号,而使用其他值,我得到的信号与 GPIO0和 GPIO2引脚所需的信号不同。 BTW、信号 ePWM1和 ePWM2之间存在相移。 请查看新上传的图片。

    我还在使用 MATLAB 中的嵌入式支持包来生成代码。

    此致、

    穆罕默德

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

    穆罕默德  

    您所做的工作将始终存在延迟。 要使信号通过 GPIO 输入电路、然后通过 SW 进行读取、然后通过 SW 写回、然后通过 GPIO 输出电路、您将始终具有此延迟。

    NIMA

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

    NIMA、

    感谢您抽出宝贵的时间做出响应。 我明白了!

    老实说、我的主要目的是实际组合和比较两个 PWM 信号、例如 PWM1A 和 PWM2A、以获得第三个 PWM 信号 、即 PWM3A 和 PWM3B。

    换句话说、我想使用栅极逻辑来比较这两个信号。 例如:

    (PWM1A XOR PWM2A = PWM3A)、和(PWM1A  NXOR  PWM2A = ePWM3B)。

    因此、我考虑将 GPIO 引脚用作输入和输出信号。 那么、您能不能建议我采用更高效的方式吗?

    此致、

    穆罕默德

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

    [引用用户="Mohammed Alharbi"]

    老实说、我的主要目的是实际组合和比较两个 PWM 信号、例如 PWM1A 和 PWM2A、以获得第三个 PWM 信号 、即 PWM3A 和 PWM3B。

    换句话说、我想使用栅极逻辑来比较这两个信号。 例如:

    (PWM1A XOR PWM2A = PWM3A)、和(PWM1A  NXOR  PWM2A = ePWM3B)。

    [/报价]

    完美、现在我知道您要做的事情、我可以更好地指导您。

    您必须使用 CLB、CLB 非常适合这种情况。

    您可以通过 CLB 访问 EPWM1、2、3、您可以使用 EPWM1A 和 EPWM2A 作为 CLB 逻辑块的输入(使用 CLB3)、然后在 CLB 模块的 LUT 中实现逻辑、然后通过 CLB 输出相交(覆盖)将信号输出到 EPWM3A。

    它将没有延迟。 内置硬件支持。

    NIMA

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

    training.ti.com 上提供了大量 CLB 文档(用户指南、应用报告等)+视频教程+ 20多个示例(基于 driverlib)。

    NIMA

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

    感谢 Nima 的帮助。 我会尝试研究如何使用建议的方法来执行这些操作。

    此致、

    穆罕默德

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

    欢迎穆罕默德。