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.
首先在PFC程序中定义了一个故障标志结构体变量SystemFaultFlag,后级通过一个光耦传递一个硬件故障位给PFC,程序中是这么写的
...
#define LLCFaultState GpioDataRegs.GPADAT.bit.GPIO13
...
PFC程序直接利用位域操作进行赋值:
SystemFaultFlag.bit.LLCFault = LLCFaultState;
这样程序执行异常(这个硬件位实际却是存在干扰),PFC无端关闭驱动,但是没有任何标志位,改用if条件语句判断之后,能够正常执行。
DSP用的28035
请问,这样操作有什么问题?位域操作是怎么编译的?有没有相应的手册?
我的故障位是个全局变量,这句话执行完过一会儿就会执行故障标志位判断,中间只有几行电压保护的判断语句。(在同一个函数中,这个函数放在AD中断中,优先级比较高)
void Protection()
{
...
SystemFaultFlag.bit.LLCFault = LLCFaultState;
...
if(0 != SystemFaultFlag.all)
{
PWMOutputsDisable();
STOPSTATE;
FAULTSTATE;
}
...
}
照理说检测到故障就会立即保护,而且后面的“STOPSTATE; FAULTSTATE; ”两句话也没有执行所以我有点奇怪。
问题找到了,写程序犯了个低级错误,当时图省事,就这么简单的一句话写了一下,实际这个信号有干扰,第一次干扰检测到高电平,第二个周期立马被正常的低电平覆盖掉,所以会出现这个问题,查问题的时候,没注意FaultState=1;这句话被别人注释掉了,观测不到这个信号,一直以为没有执行到下面关驱动这段代码,所以找错了方向。
void Protection()
{
...
SystemFaultFlag.bit.LLCFault = LLCFaultState;
...
if(0 != SystemFaultFlag.all)
{
PWMOutputsDisable();
STOPSTATE;
//FAULTSTATE;
}
...
}