原问题如下:
“
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 函数的说明文档啊 ?