请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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:EPWM7SYNCOUT OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX14 = 3; OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX14 = 1; EDIS; }