首先在PFC程序中定义了一个故障标志结构体变量SystemFaultFlag,后级通过一个光耦传递一个硬件故障位给PFC,程序中是这么写的
…
#define LLCFaultState GpioDataRegs.GPADAT.bit.GPIO13
…
PFC程序直接利用位域操作进行赋值:
SystemFaultFlag.bit.LLCFault = LLCFaultState;
这样程序执行异常(这个硬件位实际却是存在干扰),PFC无端关闭驱动,但是没有任何标志位,改用if条件语句判断之后,能够正常执行。
DSP用的28035
请问,这样操作有什么问题?位域操作是怎么编译的?有没有相应的手册?
Seven Han:这样定义是没有问题的,程序执行有什么样的异常呢?
首先在PFC程序中定义了一个故障标志结构体变量SystemFaultFlag,后级通过一个光耦传递一个硬件故障位给PFC,程序中是这么写的
…
#define LLCFaultState GpioDataRegs.GPADAT.bit.GPIO13
…
PFC程序直接利用位域操作进行赋值:
SystemFaultFlag.bit.LLCFault = LLCFaultState;
这样程序执行异常(这个硬件位实际却是存在干扰),PFC无端关闭驱动,但是没有任何标志位,改用if条件语句判断之后,能够正常执行。
DSP用的28035
请问,这样操作有什么问题?位域操作是怎么编译的?有没有相应的手册?
Xinxi Tang:
回复 Seven Han:
一开始能够正常运行,但是过一段时间,PFC只关闭驱动,但是不报任何故障位,上位机也观测到这一点。而且ePWM寄存器的值一直在变,TZ配置的CBC保护,能够封锁驱动的配置都传到上位机看过了,都正常,没有封锁驱动信号的。除了没有驱动,其他都很正常
这句话去掉,程序就能够正常运行。
哦,除了GPIO配置没去确认,也没理由会有影响
首先在PFC程序中定义了一个故障标志结构体变量SystemFaultFlag,后级通过一个光耦传递一个硬件故障位给PFC,程序中是这么写的
…
#define LLCFaultState GpioDataRegs.GPADAT.bit.GPIO13
…
PFC程序直接利用位域操作进行赋值:
SystemFaultFlag.bit.LLCFault = LLCFaultState;
这样程序执行异常(这个硬件位实际却是存在干扰),PFC无端关闭驱动,但是没有任何标志位,改用if条件语句判断之后,能够正常执行。
DSP用的28035
请问,这样操作有什么问题?位域操作是怎么编译的?有没有相应的手册?
mangui zhang:
回复 Xinxi Tang:
是不是与volitile有关系
首先在PFC程序中定义了一个故障标志结构体变量SystemFaultFlag,后级通过一个光耦传递一个硬件故障位给PFC,程序中是这么写的
…
#define LLCFaultState GpioDataRegs.GPADAT.bit.GPIO13
…
PFC程序直接利用位域操作进行赋值:
SystemFaultFlag.bit.LLCFault = LLCFaultState;
这样程序执行异常(这个硬件位实际却是存在干扰),PFC无端关闭驱动,但是没有任何标志位,改用if条件语句判断之后,能够正常执行。
DSP用的28035
请问,这样操作有什么问题?位域操作是怎么编译的?有没有相应的手册?
Xinxi Tang:
回复 mangui zhang:
我的故障位是个全局变量,这句话执行完过一会儿就会执行故障标志位判断,中间只有几行电压保护的判断语句。(在同一个函数中,这个函数放在AD中断中,优先级比较高)
void Protection()
{
…
SystemFaultFlag.bit.LLCFault = LLCFaultState;
…
if(0 != SystemFaultFlag.all) { PWMOutputsDisable(); STOPSTATE; FAULTSTATE; }
…
}
照理说检测到故障就会立即保护,而且后面的“STOPSTATE; FAULTSTATE; ”两句话也没有执行所以我有点奇怪。
首先在PFC程序中定义了一个故障标志结构体变量SystemFaultFlag,后级通过一个光耦传递一个硬件故障位给PFC,程序中是这么写的
…
#define LLCFaultState GpioDataRegs.GPADAT.bit.GPIO13
…
PFC程序直接利用位域操作进行赋值:
SystemFaultFlag.bit.LLCFault = LLCFaultState;
这样程序执行异常(这个硬件位实际却是存在干扰),PFC无端关闭驱动,但是没有任何标志位,改用if条件语句判断之后,能够正常执行。
DSP用的28035
请问,这样操作有什么问题?位域操作是怎么编译的?有没有相应的手册?
Young Hu:
回复 Xinxi Tang:
可以看一下SystemFaultFlag.all的值具体是多少?
程序没啥问题
TI中文支持网



