目前在调试3138控制的一款电源,需要实现输入欠压快速保护功能。
使用Front End 2 采样输入电压,并在digital comparator0 中将Front End 2 输出的absolute value与设定值进行比较。目前的问题是:当digital comparator0 的比较条件满足后,无法重复进入快速中断函数中的Fault interrupt中,只能进入1-2次中断。
代码如下:
1.初始化digital comparator0:
FaultMuxRegs.DCOMPCTRL0.bit.FE_SEL=2; //select Front End2 absolute data
FaultMuxRegs.DCOMPCTRL0.bit.COMP_POL=0; //lower than
FaultMuxRegs.DCOMPCTRL0.bit.THRESH=127; //40V
FaultMuxRegs.DCOMPCTRL0.bit.INT_EN=2; //enable interrupt
FaultMuxRegs.DCOMPCTRL0.bit.COMP_EN=1; //enable Comp
FaultMuxRegs.DCOMPCTRL0.bit.CNT_CLR=1; //clear the detection count in
FaultMuxRegs.DCOMPCTRL0.bit.CNT_CONFIG=0;
FaultMuxRegs.DCOMPCTRL0.bit.CNT_THRESH=0; //immediately interrupt
2.fast interrupt函数中,关闭digital comparator0,关闭DPWM输出。
if(fir_index == 26)
{
temp = FaultMuxRegs.FAULTMUXINTSTAT.all; //read to clear the interrupt flag
if(temp & 0x2000) //digital comparator 0 Vin_Uvp
{ FaultMuxRegs.DCOMPCTRL0.bit.INT_EN= 0;
FaultMuxRegs.DCOMPCTRL0.bit.COMP_EN= 0;
FeCtrl0Regs.EADCDAC.bit.DAC_VALUE = 0;
LoopMuxRegs.GLBEN.all = 0;
MiscAnalogRegs.GLBIOEN.all |= 0xFF;
MiscAnalogRegs.GLBIOVAL.all &= 0xFFFFFF80;
fault_type = ELSESTATUS; supply_state = STATE_FAULT; }
}
temp = FaultMuxRegs.FAULTMUXINTSTAT.all;//read to clear the interrupt flag;
3. 在STATE_IDLE状态中,对digital comparator进行了重新开启。
FaultMuxRegs.DCOMPCTRL0.bit.INT_EN= 1; //re-enable digital Comp 0
FaultMuxRegs.DCOMPCTRL0.bit.COMP_EN= 1; //re-enable digital Comp 0
请各位多多指教。
Curly Li:
Hi,
你好,也可以在TI的另一个论坛进行提问。
http://e2e.ti.com/