工具/软件: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; }此致