工具/软件:Code Composer Studio v 7.3 TMS320F28035项目
Code Composer Studio v 7.3、 TMS320F28035项目
您好! 我使用混合 CLA 汇编器和 CLA C 文件制作了项目。 结果、如果 CLA C 代码大小大于550个命令(在"汇编器"视图中)、则会在 MVECT 和 程序空间中给出错误的位置。 如果 CLA C 代码的大小低于550条命令、则编译良好。
也就是说, 我在编译相同的代码后收到的代码,只有在错误的代码中,我添加了许多 MNOP 命令以克服550的大小
Cla1Task3是 C 函数 ,两个变体(好的和坏的)的稳定 MVECT 都是指示性的:
EALLOW;
Cla1Regs.MVECT1 =(uint16)(&Cla1Task1 -&Cla1Prog_Start)* sizeof (uint32);
Cla1Regs.MVECT2=(uint16)(&Cla1Task2 -&Cla1Prog_Start)* sizeof (uint32);
Cla1Regs.MVECT3 =((UINT16)(Cla1Task3)-(UINT16)&Cla1Prog_Start); //这是 C 函数
Cla1Regs.MVECT4 =(uint16)(&Cla1Task4 -&Cla1Prog_Start)* sizeof (uint32);
Cla1Regs.MVECT5 =(uint16)(&Cla1Task5 -&Cla1Prog_Start)* sizeof (uint32);
Cla1Regs.MVECT6 =(uint16)(&Cla1Task6 -&Cla1Prog_Start)* sizeof (uint32);
Cla1Regs.MVECT7 =((UINT16) Cla1Task7 -(UINT16)&Cla1Prog_Start); //这是 C 函数
Cla1Regs.MVECT8 =(uint16)(&Cla1Task8 -&Cla1Prog_Start)* sizeof (uint32);
//将 CLA 程序代码从其加载地址复制到 CLA 程序存储器
//完成后、将程序存储器分配给 CLA
//
//确保分配之间至少有两个 SYSCLKOUT 周期
// CLA 的存储器以及中断进入的时间
//即使加载和运行地址相同,也调用此函数!
Memcopy (&Cla1funcsLoadStart、&Cla1funcsLoadEnd、&Cla1funcsRunStart);
这是 MNOPS 的代码,编译不当,无法正常工作:
中断空 Cla1Task3 (空)
{
_mdebugstop();
//=========== 下面填充 DCAC 和 PFC 的 ADC 变量
dwInv_Voltage=(AdcResult.ADCRESULT11 - AdcResult.ADCRESULT10)<< 12; // A0-B0通道10 usin out
dwInv_Current_1=(AdcResult.ADCRESULT7 - AdcResult.ADCRESULT6)<< 12;// A2-B2 通道 6 isin out
VBUS=AdcResult.ADCRESULT14 <<12;// Vbus A15通道14
SubA1B1=(AdcResult.ADCRESULT4 -AdcResult.ADCRESULT5)<<13; //使用中的不同
VL_fb=AdcResult.ADCRESULT4 << 13; // Vsin 实数
SubA3B3=(AdcResult.ADCRESULT8 -AdcResult.ADCRESULT9)<<13; //以不同的方式显示
// 这是 MATH_EMAVG_CLA.h 中 用于定义 VbusFloat 和 Vbus 平均值的数据
//m.out =(((m.in - m.out)* m.M.Multiplier)+ m.out)
VbusFloat=(float)(AdcResult.ADCRESULT14);
VbusFloat=VbusFloat* 0.000244140625 ;//I2 乘以1/(2^12)将其转换为标么浮点
VbusAvgFloat =(((VbusFloat - VbusAvgFloat)* VbusAvgMultiplier)+ VbusAvgFloat);
VbusAvg=(无符号长整型)(VbusAvgFloat * 16777216);
//从 PFC_BL_ICMD_CLA_C.h
/**
*使用 PFC 升压开关感应为 PFC 级执行电流命令计算。 这个宏
*需要使用 PFC_BL_ICMD_CLA_C 结构。 应初始化结构
*使用 PFC_BL_ICMD_CLA_C_init 宏。 宏使用计算值的倒数
*_meinvf32 CLA C 内在函数。 所述内在函数牺牲了中的一些浮点精度
*减少时钟周期。 如果需要更高的精度或泛化、请更改
*常规除法运算符的内在函数。
*
// v.out = v.Vpfc * v.VoutMaxOverVinMax * v.Duty;
// v.out =(v.out > limit_pFC_BL_ICMD)? V.out:limit_PFC_BL_ICMD;
// v.out =(v.VacRect * v.VinSqr * v.Vcmd * v.VmaxOverVmin)*__meminf32 (v.out) *((v5.Vpfc * v.VoutMaxOverVinMax)- v.VacRect);
DutyFloat=((float)(DutyA))*0.000000059604644775390625;
VrectFloat=((float)(Vrect))*0.000000059604644775390625;
VbusVcmdFloat=(float)(VbusVcmd)*0.000000059604644775390625;
PFCcmdFloat = VbusFloat * VoutMaxOverVinMax * DutyFloat;
PFCcmdFloat =(PFCcmdFloat > limit_PFC_BL_ICMD)? PFCcmdFloat:limit_PFC_BL_ICMD;
PFCcmdFloat =(VrectFloat * VinvSqr_c * VbusVcmdFloat * VmaxOverVmin)*_meinvf32 (PFCcmdFloat) *(((VbusFloat * VoutMaxOverVinMax)- VrectFloat);
PFCCMD=(无符号长整型)(PFCCMDFloat * 16777216);
//sine_analyzer.Vin=0;
//======================================== 正弦振幅器仅在非2P2Z 2时工作(电压控制请查看 blpfc_isr_cla.asm====
//=========== 从 c:\ti\controlSUITE\libs\app_libs\solar\v1.2\cla\include\SINEAALYZER_DIFF_wPWR_CLA.h==
if (VloopCtrla == VoltCurrent LoopExecRatio){
if (sine_analyzer.Vin > sine_analyzer.Threshold)
{
Sine 分析器.CURR_VIN_NORM = Sine 分析器.Vin;
Sine 分析器.CURR_iin_norm = Sine 分析器.Iin;
Sine 分析器.CURR_SIGN = 1;
}
其他
{
Sine 分析器.CURR_VIN_NORM =晶圆(sine_analyzer.Vin);
Sine 分析器.CURR_iin_norm =晶圆(sine_analyzer.Iin);
Sine 分析器.CURR_SIGN = 0;
}
}否则
//================================================================ vinvSqr ========================================
/**计算缩放输入信号的回波平方。
从 BLPFC_invrmssqr_cla_c.h @返回 structure out 参数。 *
//=========== 使用2P2Z 2 (电压控制)进行 Sine _ANALOR 作业后的下一个 tact 上的 VinVsqr 计算
{
VrectRmsFloat=(float)(VrectRMS);
VrectRmsFloing=VrectRmsFloing*0.000000059604644775390625;
VinSqr_c =(PFC_InvRmsSqr_Vmin1_CLA > VrectRmsFloat)? PFC_InvRmsSqr_Vmin1_CLA:VrectRmsFloat;
vinvSqr_c =__meinvf32 (vinvSqr_c)* pFC_InvRmsSqr_VminOverVmax1_CLA;
vinvSqr_c = vinvSqr_c * vinvSqr_c;
vinvSqr_c =((vinvSqr_c < limit_PFC_INVRMSSQR)? vinvSqr_c:limit_pFC_INVRMSSQR);
vinvSqr=(unsigned long)(vinvSqr_c * 16777216);
}
_mnop (); __mnop (); __mnop (); __mnop ();__mnop (); __mnop (); _mnop (); __mnop (); __mnop (); __mnop ();__mnop (); __mnop ();
_mnop (); __mnop (); __mnop (); __mnop ();__mnop (); __mnop (); __mnop(); __mnop(); __mnop();
}