工具/软件:Code Composer Studio
大家好、我遇到了一个问题、可以帮我吗?
我目前正在使用28069并使用 CLA 来计算从 ADC 读取的数据的 RMS 值。 代码如下所示
_interrupt void Cla1Task3 (void) { V_AC = 3.3*AC_VOLTGE_GAIN*(AdcResult.ADCRESULT2-AC_VOLTGE_BIAS)/4095; RMS_v_ac_sum += v_ac*v_ac; RMS_COUNT++; if (rms_count >= count_for_rms_Calc){ rms_v_ac =__sqrt (rms_v_ac_sum/rms_count); RMS_COUNT = 0; RMS_v_ac_sum = 0; } }
首先、一切都正常、直到我修改了 CPU 中的数据、如下所示。 在此代码中、我计算了相位并相应地修改了"input_state"。
中断 void PWM_int()
{
PLL();
if (theta>phase1 && prev_theta
一
我发现 CLA 无法正确计算 RMS 值、我发现此问题与"input_state"相关、input_state 定义如下
#pragma DATA_SECTION (INPUT_STATE、"Cla1DataRam1");
unsigned char input_state;
如果我将其 DATA_SECTION 更改为"CpuToCla1MsgRAM"、CLA 将再次正常工作。 我想 CPU 修改此数据部分中的现有数据可能会导致问题、但我不知道原因、您能帮我吗?
CLA 初始化代码如下所示
void initcla(){
EALLOW;
Cla1Regs.MVECT1 =(uint16)((uint32)&Cla1Task1 -(uint32)&Cla1Prog_Start);
Cla1Regs.MVECT2 =(uint16)(((uint32)&Cla1Task2 -(uint32)&Cla1Prog_Start);
Cla1Regs.MVECT3 =(uint16)(((uint32)&Cla1Task3 -(uint32)&Cla1Prog_Start);
Cla1Regs.MVECT4 =(uint16)(((uint32)&Cla1Task4 -(uint32)&Cla1Prog_Start);
Cla1Regs.MVECT5 =(uint16)(((uint32)&Cla1Task5 -(uint32)&Cla1Prog_Start);
Cla1Regs.MVECT6 =(uint16)(((uint32)&Cla1Task6 -(uint32)&Cla1Prog_Start);
Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_ADCINT1;
Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_ADCINT2;
Cla1Regs.MPISRCSEL1.bit.PERINT3SEL = CLA_INT3_ADCINT3;
Cla1Regs.MPISRCSEL1.bit.PERINT4SEL = CLA_INT4_ADCINT4;
memcpy (&Cla1funcsRunStart、&Cla1funcsLoadStart、(uint32)&Cla1funcsLoadSize);
Cla1Regs.MMEMCFG.bit.PROGE = 1;
Cla1Regs.MCTL.bit.IACKE = 1;
Cla1Regs.MIER =(M_INT1 | M_INT2 | M_INT3 | M_INT4 | M_INT5 | M_INT6);
EALLOW;
Cla1Regs.MMEMCFG.ALL = CLA_PROG_ENABLE|CLARAM0_ENABLE|CLARAM1_ENABLE|CLARAM2_ENABLE|CLA_RAM2_ENABLE|CLA_RAM1CPUE;
Cla1Regs.MCTL.bit.IACKE = 1;
EDIS;
}
此致