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.

[参考译文] TMS320F2.8335万:ePWM中断

Guru**** 2535150 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/615532/tms320f28335-epwm-interrupt

部件号:TMS320F2.8335万

您好,

我正在尝试使用查找表和ePWM中断创建spwm。 当计数器等于零时,将生成中断,并且它必须更新EPWM1,2和3的CMPA和CMBB。

当我观察ePWM输出端口时,它显示CMPx的值是查找表中的第一个值,它不会更新。

(EPWM1:CMPA=CMPB=25, EPWM2:CMPA=CMPB=4675, EPWM3:CMPA=CMPB=4675)。

以下是书面节目:

//
* main.c
*/

#include "DSP2833x_Device.h"
#include "DSP2833x_gPIO.h"
#include "DSP2833x_gPIO.h"
#include "DSP2833x_ePWM.h"
#include "2000_main.h"
#include <stdlib.h.h.#include <stdio.3346,3346,3346,3346,3346,3346,3346,3346,3346,3347,3346,3346,3347,3347,3345,334,1364,332,44,334,1364,332,44,334,1364,332,45,332,45,332,45,332,45,332,45,332,45,332,45,332,45,332,45,332,45,332,45,334,1364,332,45,332,45,332,45,332,45,332,45,334,1360,334,1364,332,45,332,45,332,45,332,45,332,45,33



<xmt-block0>3346 93,111,131,1533346 93,111,131,153</xmt-block>3346<xmt-block1>3346 177,203,231,2613346 177,203,231,261</xmt-block>3346<xmt-block2>3346
		293,327,363,4013346 293,327,363,401</xmt-block>3347<xmt-block3>3346 440,482,525,5703346 440,482,525,570</xmt-block>3347<xmt-block4>3347 617,666,716,768334.5334万 617,666,716,768</xmt-block>136.4332万<xmt-block5>4.4334万 821,876,933,99136.4332万 821,876,933,991</xmt-block>4.4334万</s>36.4332万 4.5332万4.5332万4.5332万4.5332万4.5332万4.5332万4.5332万4.5332万4.5332万4.5332万4.5334万36.4332万4.5332万4.5332万4.5332万4.5332万4.5334万36.0334万36.4332万4.5332万4.5332万4.5332万4.5332万931.11131153亿1772.03231261亿2933.27363401亿4404.8252557亿6176.66716768亿8218.76933991亿
		
		
		4675,4745,4813,4881,4947,5012,5076,5138,5199,5259,5317,5374,5429,5482,5534,5534,563,5680,5725,5768,597,5923,595757577,597,6019,6047,6073,619,619,6173,68,609,619,6173,65,574,657,647,557,647,557,647,557,647,557,647,557,647,647,557,647,647,647,557,647,647,557,647,557,647,557,647,557,647,557,647,647,557,647,557,647,557,647,557,647,557,647,554,647,557,647,554,647,647,554,647,554,647,554,647,554,647,554,647,647,554,647,554,6234,647,6</s>4745 481348814947501250765138519952595317537454295482553.4553万456.3568万572.5576万859.7592万359.5757万7759.7601万604.7607万361.9619万6173686.09619617亿655.74657647亿5576.47557647亿5576.47557647亿5576.47647557亿6476.47647557亿6476.47557647亿5576.47557647亿5576.47557647亿6475.57647557亿6475.57647557亿6475.57647554亿6475.57647554亿6476.47554647亿5546.47554647亿5546.47554647亿6475.54647554亿623.4647万
		
		
		
		
		31.25304296亿3,2882,2801,2720,2640,2560,2480,2401,2323,2245,2167,2090,2014,1939,1864,1790,1718,1646,
		1575,1437,1369,1303,1238,1174,1112,1 519.91933876亿 4404.01363327亿 ,8217.68716666亿 2932.61231203亿 ,6175.70525482亿 1771.53131111亿
		,9377,3345,3160,
3160,3160,3160,3160,3160,3160,3160,3160,3160,3160,4360,4160,4160,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4360,4160
		
		1575,1505,1437,1369,1303,1238,1174,1112,1 519.91933876亿 ,8217.68716666亿 ,6175.70525482亿
		,93,77,63,5.2425万,2935,2926,2935,
		25,26,2935,4252,63,77292625,26,2935,4252,63,77,62935,<xmt-block3>42524404.01363327亿 931.11131153亿 4404.8252557亿 ,1772.03231261亿
		,1771.53131111亿 ,2932.61231203亿 6176.66716768亿 ,2933.27363401亿 8218.76933991亿 ,1051,1112,1174,1238,1303,1369,1437,1505,155,164,164,164,264,2801,174,2801,174,1304,2801,284,1304,1304,1304,1304,1304,136,195,182,164,2801,284,2801,284,1301,284,1301,284,1301,284,1304,134,134,130</s>1112 1174123813031369143.715万515.5164万1.64164264亿280.1174万280.1174万130.428万128.413万13041304130.413万413.6195万1.8216428亿128.428万128.413万128.413万128.413万128.413万41.3413413亿
		
		3125,3206,3287,3368,3449,3530,3690,3770,3849,4005,4083,4236,4311,4386,4460,4534,
		4745,4813,4881,4947,5012,5076,5138,5199,5199,5139,5374,5374,
		6195,6195,5719,5764,5764,6195
		
		,6195,5764,6195,5764,6195,
UINT16 lt3[240]={4675,4745,4813,4881,4947,5012,5076,5138,5199,5259,5317,5374,5429,5482,5534,5584,5633,56805725,5768,5810,5849,58877,5923,59577,588,647,609,647,647,647,647,647,647,647,647,647,647,557,647,557,647,647,647,557,647,647,647,647,647,557,647,557,647,647,557,647,557,647,647,647,647,57,557,647,574,647,574,647,574,647,647,574,647,554,647,647,647,554,647,647,647,647,647,57,57,647,647,57,57,57,57,647,55</s>4745 48134881494750125076513851995259531753745429548255345584563.3568万0.5725万576858105849588775923595.77588647亿6096.47647647亿6476.47647647亿6476.47647557亿6475.57647647亿6475.57647647亿6476.47647557亿6475.57647647亿5576.47557647亿4764.7647万575.57647574亿6475.74647574亿6476.47574647亿5546.47647647亿5546.47647647亿64.7647万5764.7647万5.7647万
		
		
		
		
		
		519.91933876亿 ,8217.68716666亿 ,6175.70525482亿 ,2933.27363401亿
		,4404.01363327亿
		
		,1772.03231261亿 ,8218.76933991亿 ,931.11131153亿 4404.8252557亿 ,2932.61231203亿 6176.66716768亿 ,1771.53131111亿 ,
		1575,1646,1718,1790,1864,1939,2014,2090,2167,2245,232.324万2408.0258万2,2963,3044,
		3125,3206,3287,3368,3449,3530,3610,3690,3770,3849,3927,4005,4083,4160,4236,4460,446.0453万CM1.pa.1mwpa.1cm1

= 1mpa.mwpa.mwpa.1cm1 = 1cm1mwpa.mwpa.mwpa.mwpa.mwpa.mwpa.cm1






EPwm3Regs.CMBB = lut3[i];
i++;
if (i == 240) i=0;

EPwm1Regs.ETCLR.bit.INT =1;

PieCtrlRegs.PIEACK.ALL = PIEACK_Group3;
}

void main(void)
{
	InitSysCtrl();D0xInt



= IFR;




InitPieVectorTable();

EALLOW;
PieVectorTable.EPWM1_INT =&epwm1_timer_ISR;
EDIS;

IER || M_INT3;

PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;

EINT;
ERTM;

EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; //停止所有TB时钟
EDIS;

EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; 		// EPWM1A
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;			// EPWM1B
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;			// EPWM2A
GpioCtrlRegs.GPAMUX1.bit.3A Ctrl3 = 1;			// RegWMUX1.pipoEP1= 1
			
;MPIMP1			
= 1 = 1;MPIMP1 = 1 = 1 = 1 = 1;MPIMPIMP1 = 1 = 1 = GPIOMP1 = 1 = 1 = 1 = 1 = 3 = 1 = 1 = 1 = 1 = 1 = 1 			//正在启用上拉
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0;
GPIOCtrl5;GIOCtrl= 0。
EDIS;

EPwm1Regs.TBPRD = 6250;						
EPwm1Regs.TBCTR = 0x0000;
EPwm1Regs.TBCTL.Bit.CTRMODE = 2;			//上-下
EPwm1Regs.PHCTL.Bit.SYNCOTB= 3;			//禁用EPwm1Regs.CTL.CEL.

			//禁用
EPwm1Regs.TBCTL.bit.CLKDIV =0; 			///1
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; 		///1
EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;			// Shadow Mode
EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
EPw1Regs.CMPTL.bit.LOADALOADAMODE = 0;			//加载CR=0EPw1Regs.CMPS.CM1RC=



				0
				;加载CM1= 0;加载= 0加0加0
			//禁用
EPwm1Regs.AQCSFRC.Bit.CSFB = 0;//			禁用
EPwm1Regs.AQSFRC.Bit.RLDCSF = 0;//			加载cTR=零
EPwm1Regs.DBCTL.bit.out模式=3; EPw1Regs.DBCTL.bit.in_Reg_= 0;

EPmED = 0; DB1EPI.DB1EP.DBC= 0;EPT1.Ep模式= 0.1Ep

= 0.1Ep = 0.1Ep = 1.p= 1.p= 0.1Ep
EPwm1Regs.ETSEL.bit.SOCAEN = 0;			//禁用
EPwm1Regs.ETTBPRD.Bit.SOCBEN = 0;			//禁用
EPwm1Regs.ETSEL.bit.inten = 1;			//启用
EPwm1Regs.ETTBPRD.Bit.INTSEL = 1;			//ctr= 0 = 0
			




= 0
;2位EPI.CT2EP= 0;0 = 0 = 0;0 = 0 = 0;0 = 0;0;0;0 = 0 = 0;0;0 = 0;0;0 = 0;0;0 = 0;0;0 = 0;0;0;0;0;0;0 = 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
EPwm2Regs.TBCTL.bit.PHSEN = 0;
EPwm2Regs.TBCTL.bit.CLKDIV = 0;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm2Regs.CMPCTL.bit.SHDWODE = 0;EPwm2Regs.CMDE.0

EPwm2Regs.CMPCTL.bit.LOADAMODE = 0;
EPwm2Regs.CMPCTL.bit.LOADBMODE = 0;
EPwm2Regs.CMPA.Halft.CMPA = 0;
EPwm2Regs.CMBB = 0;
EPwm2Regs.AQCTLA.ALL = 144;
EPwm2Regs.AQCTLB.ALL = 1536;
EPwm2Regs.AQCSFRC.bit.CSFFA = 0;
EPwm2Regs.AQCSFRC.bit.CSFFB = 0;
EPwm2Regs.AQSFRC.Bit.RCSF = 0;DBwm2Regs.EPCTL.bit.Cout
= 3;
EPwm2Regs.DBCTL.bit.in_mode = 0;
EPwm2Regs.DBCTL.bit.POLSEL = 2;
EPwm2Regs.DBFED = 10;
EPwm2Regs.DBRED = 10;
EPwm2Regs.ETSEL.bit.SOCAEN = 0;
EPwm2Regs.ETSEL.bit.SOCBEN = 0;
EPwm2Regs.ETSEL.bit.inten = 1;
EPwm2Regs.ETSEL.bit.INTSEL = 1;
EPwm2Regs.ETPS.bit.INTPRD = 1;

EPwm3Regs.TBPRD = 6250;
EPwm3Regs.TBCTR = 0x0000;
EPwm3Regs.TBCTL.bit.CTRMODE = 2;
EPwm3Regs.TBCTL.bit.SYNCOSEL = 3;
EPwm3Regs.TBCTL.bit.PHSDIR = 0;
EPwm3Regs.TBCTL.bit.TBCSEN = 0;
EPwm3Regs.TBCTL.bit.CLKDIV = 0;
EPwm3Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm3Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm3Regs.CMPCTL.bit.SHDPCMODE = 0;EPwCM3REG0.ADE.0

EPwm3Regs.CMPCTL.bit.LOADBMODE = 0;
EPwm3Regs.CMPA.Halft.CMPA = 0;
EPwm3Regs.CMBB = 0;
EPwm3Regs.AQCTLA.ALL = 144;
EPwm3Regs.AQCTLB.ALL = 1536;
EPwm3Regs.AQCSRC.bit.CSFFA = 0;
EPwm3Regs.AQCSRC.bit.CSFFB = 0;
EPwm3Regs.AQSFRC.bit.RLDCSF = 0;
EPwm3Regs.DBCTL.bit.out模式= 3;
EPwm3Regs.DBCTL.bit;EPw_mode.0
EPwm3Regs.DBCTL.bit.POLSEL = 2;
EPwm3Regs.DBFED = 10;
EPwm3Regs.DBRED = 10;
EPwm3Regs.ETSEL.bit.SOCAEN = 0;
EPwm3Regs.ETSEL.bit.SOCBEN = 0;
EPwm3Regs.ETSEL.bit.inten = 1;
EPwm3Regs.ETSEL.bit.INTSEL = 1;
EPwm3Regs.ETPS.bit.INTPRD = 1;


EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; //启动所有同步的计时器
EDIS
;} 

在DefaultIsr.c文件中:

中断无效EPWM1_INT_ISR(void)

}

我也复制了  

EPwm1Regs.ETCLR.bit.INT = 1;

PieCtrlRegs.PIEACK.ALL = PIEACK_GROUP3; 

到DefaultIsr文件,但它不起作用。


此致,

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

    目前,此代码不会运行,因为您在PIE表中只分配了一个中断服务例程,但启用了多个中断(EPWM1-3)。 EPWM1触发您的位置(epwm1_timer_isr)中的ISR,其他程序转到DSP2833x_DefaultIsr.c文件中的默认例程,每个例程都包含一个Estop指令,该指令中止代码,因此一切都停止。 这就是为什么您只加载一次值的原因。

    如果要测试此情况,您只需注释掉启用PWM2和3中断的两行,如下所示:
    PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
    // PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
    // PieCtrlRegs.PIEIER3.bit.INTx3 = 1;

    这只会使PWM1中断处于活动状态,并且在我的计算机上,它会按照您的预期运行,并循环显示lut1值。

    此致,

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


    此致,

    Pouriya