TI中文支持网
TI专业的中文技术问题搜集分享网站

关于C2000 DSP位域操作

首先在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的值具体是多少?
程序没啥问题

赞(0)
未经允许不得转载:TI中文支持网 » 关于C2000 DSP位域操作
分享到: 更多 (0)