This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28069:CPU 读取/写入 CLA 数据

Guru**** 2039090 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/851262/ccs-tms320f28069-cla-data-read-write-by-cpu

器件型号:TMS320F28069

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

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这将需要进一步调查、以找出出错的地方。  

    • 检查生成的.map 文件以查看变量 input_state 已由链接器分配给哪个存储器地址。  
      • 它应位于 ClaDataRam1内。  对照数据表中的存储器映射检查此项
    • 运行 C28x 代码、使其超过 MMEMCFG 被分配的位置。  使用寄存器视图、确认 CLARAM1CPUE 和 RAM1E 均已设置。
    • 运行 C28x 代码、使其超过修改 input_state 的位置。  确认内存中的变量已正确修改。  这将显示 C28x 具有写入访问权限。
    • 重置并重新启动项目、这次在读取 INPUT_STstate 后使用 CLA 代码中的断点执行几条指令。  使用调试器、确认 CLA 正确读取值。  这将告诉 CLA 是否具有对变量的读取访问权限、或者它是否正在从另一个位置读取错误的值。

    阅读以下两个常见问题解答、了解它们是否适用:

    更多常见问题解答可在此处找到:

    此致

    Lori

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    于-

    我一周内没有收到您的回复、因此我将假定问题已经解决。  如果是这种情况、请按"已验证答案"按钮。  如果情况并非如此、请使用其他信息回复。

    如果您有新问题、请启动新帖子。  

    谢谢你

    Lori

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的及时回复。  

    我稍后会尝试您的建议、但最近我还有其他需要改进的地方。

    此致、再次感谢。