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/TMS320F28335:设置计时器 ISR

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/590636/ccs-tms320f28335-setting-a-timer-isr

器件型号:TMS320F28335

工具/软件:Code Composer Studio

您好!

我正在使用全桥逆变器。 我在20kHz 频率下成功地使用正弦表获得了4个 PWM 信号、以实现开环输出。 它使用 ePWM ISR 从正弦表更新占空比。  我目前正在研究闭环解决方案。 我正在尝试使用 ADC 计算输出60Hz 波形的 RMS 值。 当我尝试将 Timer1设置为16.67ms (60Hz)时、我 的 EPWM ISR 将被忽略。  我无法  同时运行两个 ISR。 下面是我的一些代码(主代码和计时器 ISR)、用于查看是否有人可以发现问题:

void main (void)

InitSysCtrl();// DSP2833x_sysctrl.c 中的基本内核初始化

EALLOW;

SysCtrlRegs.WDCR= 0x00AF;//重新启用看门狗

EDIS;//0x00AF 要不禁用看门狗、预分频器= 64

DINT;//禁用所有中断

GPIO_SELECT();

Setup_ePWM ();//init of ePWM1A

InitPieCtrl();// PIE 表的基本设置;来自 DSP2833x_PIECTRL.c

InitPieVectTable();// PIE 中的缺省 ISR

InitAdc()

EALLOW;

PieVectTable.TINT0 =&CPU_timer0_ISR;

EDIS;

InitCpuTimer();//基本设置 CPU Timer0、1和2

ConfigCpuTimer (&CpuTimer0、150、833);

CpuTimer0Regs.TCR.bit.TSS = 0;

EALLOW;

PieVectTable.EPWM1_INT =&ePWM_COMPARE_ISR;

EDIS;

PieCtrlRegs.PIEIER1.bit.INTx7=1

PieCtrlRegs.PIEIER3.bit.INTx1 = 1;

IER |= 1;\

IER |= M_INT1;

EINT;

ERTM;

//配置 ADC

AdcRegs.ADCMAXCONV.ALL = 0;//在 SEQ1上设置1 conv

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3;//将 ADCINA3设置为第1个 SEQ1转换器

AdcRegs.ADCTRL2.bit.ePWM_SOCA_SEQ1 = 1;//从 ePWM 启用 SOCA 以启动 SEQ1

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//启用 SEQ1中断(每个 EOS)

值= 1;

while (1)

while (CpuTimer0.InterruptCount = 0)

CpuTimer0.InterruptCount = 0;

EALLOW;

SysCtrlRegs.WDKEY = 0x55;//服务 WD #1

EDIS;

中断 CPU_timer0_ISR ()

CpuTimer0.InterruptCount++

值++;

EALLOW;

SysCtrlRegs.WDKEY = 0xAA;//服务 WD #2

EDIS;

PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

感谢您的任何帮助、

Joe    

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

    Joseph、

    我的想法是、您要清除 中断 Y 中的一个中断 X 的标志、反之亦然。

    1.注释掉计时器 ISR 初始化、并确保问题消失。

    2.将定时器 ISR 添加回、在您单步执行中断时观察中断标志行为。

    默认情况下应禁用嵌套中断、以便一个中断可以延迟另一个中断、但正确设置不应错过任何中断。 需要注意的一点是、如果中断 X 非常长、中断 Y 可能会在被处理前多次跳闸。


    此致、
    Cody