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/TMS320F2.8379万D:ISR

Guru**** 2558250 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/634401/ccs-tms320f28379d-isr

部件号:TMS320F2.8379万D
主题中讨论的其他部件:C2000WARE

工具/软件:Code Composer Studio

你好

我用了一些例子,得到了PWM1A,PWM2A,PWM1B和PWM2B。

1.但我确实得到了ISR_时间段......

2.这是一个警告:说明资源路径位置类型

#1.0247万-D创建输出部分"IQmathTables"而不包含部分ECAP_CAPTY_PWM_cpu01 C/C++问题

这是我的计划


#include "F28x_Project.h"
#include "IQmathLib.h"
#define PWM_PRD 5000;
#define PHI 0;
#pragma data_section(sine_table,"IQmathTables");
_iq30正弦表[512];
void InitEPwm1示例(void);
void InitEPwm2示例(void);
__interrupt void epwm1_isr (void);
Void主(void)

InitSysCtrl();
伊尼特·格皮奥();
EALLOW;
Initepwm1gpio();
Initepwm2gpio();
EDIS;
色调;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectorTable();
EALLOW;
PieVectorTable.EPWM1_INT =&epwm1_ISR;
gpioCtrlRegs.GPBDIR.bit.GPIO52 = 1;
InitEPwm1Example();
InitEPwm2Example();

EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
EINT;//启用全局中断INTM
ERTM;//启用全局实时中断DBGM
对于(;;)

ASM (" NOP");
}
}
__interrupt void epwm1_isr (void)

静态无符号int索引=0;
GpioDataRegs.GPBDAT.bit.GPIO52 = 1;
EPwm1Regs.CMPA.bit.CMPA = EPwm1Regs.TBPRD -
_IQsat (_IQ30bumpy ((sine_table[index]+_IQ30 (0.9999))/2,
EPwm1Regs.TBPRD),EPwm1Regs.TBPRD,0);
如果(index++>511)索引=0;
//EPwm1Regs.ETCLR.bit.INT =1;//清除ePWM1中断标志
//PieCtrlRegs.PIEACK.ALL =4;//为PIE组3 int确认ACK
//EPwm1Regs.TBPHS.bit.TBPHS = 0;
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACG.ALL = PIEACK_Group3;
GpioDataRegs.GPBDAT.bit.GPIO52 = 0;
}
void InitEPwm1example()

EPwm1Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm1Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm1Regs.TBCTR = 0;//清除计数器
////设置比较值0 //
EPwm1Regs.CMPA.bit.CMPA = PWM_PRD;// set比较值
EPwm1Regs.CMPB.bit.CMBB =5000;
////设置计数器模式//
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;//向上和向下计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相加载
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
//EPwm1Regs.TBCTL.bit.PRDLD = TB_shadow;
//EPwm1Regs.TBCTL.bit.SYNCOSEL =TB_CTR_ZERO;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//与SYSCLKOUT的时钟比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置阴影//
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZE;//零加载
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
////设置操作//
EPwm1Regs.AQCTLA.bit.CAU = AQ_set;//在事件A上设置PWM1A,up // count
EPwm1Regs.AQCTLA.bit.ZRO = AQ_Clear;//清除事件A上的PWM1A,//向下计数
EPwm1Regs.AQCTLB.bit.CBU = AQ_Clear;//在事件B上设置PWM1B,运行//计数
EPwm1Regs.AQCTLB.bit.ZRO = AQ_set;//清除事件B上的PWM1B,//向下计数
////中断,我们将在此处更改比较值//
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//在零事件上选择INT
EPwm1Regs.ETSEL.bit.inten = 1;//启用INT
EPwm1Regs.ETPS.bit.INTPRD = ET_3;//在第三个事件上生成INT
}
void InitEPwm2Example()

EPwm2Regs.TBPRD = PWM_PRD;//设置计时器周期801 TBCLK
EPwm2Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm2Regs.TBCTR = 0;//清除计数器
////设置比较值0 //
EPwm2Regs.CMPA.bit.CMPA = 5000;// set比较值
EPwm2Regs.CMPB.bit.CMPB = 2500;
////设置计数器模式//
// ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;//向上和向下计数
EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相加载
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
//EPwm1Regs.TBCTL.bit.PRDLD = TB_shadow;
//EPwm1Regs.TBCTL.bit.SYNCOSEL =TB_CTR_ZERO;
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV =0;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=0;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//与SYSCLKOUT的时钟比率
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
////设置阴影//
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZE;//零加载
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
////设置操作//
EPwm2Regs.AQCTLA.bit.CAU = AQ_set;//在事件A上设置PWM1A,up // count
EPwm2Regs.AQCTLA.bit.ZRO = AQ_Clear;//清除事件A上的PWM1A,//向下计数
EPwm2Regs.AQCTLB.bit.CBU = AQ_Clear;//在事件B上设置PWM1B,运行//计数
EPwm2Regs.AQCTLB.bit.ZRO= AQ_set;//清除事件B上的PWM1B,//向下计数
////中断,我们将在此处更改比较值//
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//在零事件上选择INT
EPwm2Regs.ETSEL.bit.inten = 1;//启用INT
EPwm2Regs.ETPS.bit.INTPRD = ET_3;//在第三个事件上生成INT
}