工具/软件: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 位?
谢谢你。
此致、
演示