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.

[参考译文] RTOS/TMS320F28075:任务和中断中的 EALLOW/EDIS 管理

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/626020/rtos-tms320f28075-eallow-edis-management-in-tasks-and-interrupts

器件型号:TMS320F28075

工具/软件:TI-RTOS

您好!

我正在使用 SYS/BIOS、并且需要在 Hwi 中断中使用 EALLOW/EDIS。

我的问题是、Hwi 中断中的 EALLOW/EDIS 序列可能会干扰任务中的 EALLOW/EDIS (较低优先级)。

例如、假设这是任务1中的代码:

   EALLOW;

   EPwm2Regs.TBCTL.bit.FREE_SOFT = 2;
   EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0;
   EPwm2Regs.TBPRD =(PWM_CLOCK_FREQUENCY / VGATE_PWM_FREQUENCY)- 1;
   EPwm2Regs.CMPA.bit.CMPA =(EPwm2Regs.TBPRD >> 1);
   EPwm2Regs.AQCTLA.bit.CAU = 2;
   EPwm2Regs.AQCTLA.bit.PRD = 1;
   EPwm2Regs.DBCTL.bit.POLSEL = 2;
   EPwm2Regs.DBCTL.bit.OUT_MODE = 3;
   EPwm2Regs.DBRED.bit.DBRED = PWM_CLOCK_FREQUENCY /(1000000000/VGATE_PWM_DEAD_TIME);
   EPwm2Regs.DBFED.bit.DBFED = EPwm2Regs.DBRED.bit.DBRED;
   EPwm2Regs.TBCTL.bit.CTRMODE = 0;

   GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;
   GpioCtrlRegs.GPAMUX1.bit.GPIO3=1;

   EDIS;

这是 Hwi 中断函数中的代码:

EALLOW;

DmaRegs.control.bit.run = 1;

EDIS;

如果 DmaFunction 恰好在行之后挤占了 Task1

"   EPwm2Regs.AQCTLA.bit.PRD = 1;"

DmaFunction 中的 EDIS 指令禁用寄存器访问。 因此、任务1中的其他行无效!

我已经看到有诸如 Hwi_disable、Hwi_restore、Swi_disable、ECC 的函数。 以避免 DINT/EINT 出现类似的问题。

是否有任何 EALLOW_DISABLE 或 EALLOW_RESTORE (或类似的功能)可以安全地管理 SYS/BIOS 中的 EALLOW 位?

谢谢你。

此致、

演示

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

    EALLOW 位是 ST1寄存器的一部分、在中断进入时自动存储

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

    此致、

    演示