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

继续 28335 EPWM 比较器更新,强制类型转换 问题

原问题如下:

DSP28335 在更新EPWM 比较寄存器的时候,要把算完的小数 乘以 PWM周期,然后送给 CMPA 这里 是不是要强类型转换成整数? 是用int16  还是 Uint16啊???

下面是更新EPWM 比较寄存器,这样写对不对啊???????

int32 Tmp_a;    

      Tmp_a=p->PeriodMax*(p->MfuncC1);

       EPwm1Regs.CMPA.half.CMPA = (int16)Tmp_a;    

       EPwm1Regs.CMPB=(int16)Tmp_a;

其中 MfuncC1 存得是调制信号,正常时应该是0-1之间的数,不过也不排除有些时候可能会在0-1之外一点点。

或者在更新CMPA比较值的时候是否可以直接写:

EPwm1Regs.CMPA.half.CMPA =p->PeriodMax*(p->MfuncC1);

它是否会自己自动进行数据类型转换啊?

怎样写好呢????

原答案如下:

sys.param.Mfunc_c1 = _IQmpyI32int(sys.param.DutyA, EPwm1Regs.TBPRD);

建议用这样的语句使用

IQ是定点,F28335不需要用IQ库,用的目的是各个芯片的版本兼容,你可以看一下IQmath,h中,对于F28335, IQmath type= float, 就是靠硬件直接算出来的,对于定点的芯片,需要IQ转换。所以你可以不包含此库。

 

按照前边两位高人所说,修改更新比较器语句如下:

EPwm1Regs.CMPA.half.CMPA = _IQmpyI32int(p->MfuncC1, EPwm1Regs.TBPRD);

修改后报如下错误:

undefined              first referenced                                                                                      symbol                  in file                                                                                          ———                  —————-                                                                                     __IQmpyI32int     D:\\tidcs\\c28\\DSP2833x\\v131\\zhengliu_by_380\\epwm_updown_aq\\Debug\\Example_2833xEPwmUpDownAQ.obj

试着在开头增加包含头文件“IQmathLib.h”之后还是不对,我的工程目录下没有“IQmath,h”

我的CMD文件里有这样的句子:

 FLASHC      : origin = 0x328000, length = 0x008000     /* on-chip FLASH */

 

 IQmath              : > FLASHC      PAGE = 0                  /* Math Code */
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD

想问下如何解决啊 ?还有 TI有没有 关于在28335 下 这种调用IQ 函数的说明文档啊 ?

guoqiang wang:

回复 Jones Chen:

不是的啊,这就是您 在上一个问题中给我的答案,我放在我的程序中,报错误,上一个帖子的题目是“28335 EPWM 比较器更新,强制类型转换 问题”

这里报的错误信息中确实是说了“__IQmpyI32int ”没有,但是这个函数是在IQmathLib.h中有定义的,但是我包含这个头文件一样报错。

而且我不想只为了这一个EPWM更新 就多包含一个文件,只想知道更新的时候强制类型转换 如何写法合适

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » 继续 28335 EPWM 比较器更新,强制类型转换 问题
分享到: 更多 (0)