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/TMS320F28377D:C28x 微控制器多日技术讲座。 实验9 CLA。 CPU1存储 CLA 计算的数据?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/624079/ccs-tms320f28377d-c28x-microcontrollers-multi-day-workshop-lab-9-cla-cpu1-storing-data-calculated-by-the-cla

器件型号:TMS320F28377D
Thread 中讨论的其他器件:controlSUITEC2000WARE

工具/软件:Code Composer Studio

你(们)好。

我正在尝试了解 CLA 的工作原理、因此我已经学习了实验9练习、即"C2000微控制器技术讲座、版本6.1、2015年5月"的第9章、多日技术讲座。 在练习中、CLA 执行 FIR 滤波器计算。 我想澄清的是:CPU 如何"知道" CLA 计算的滤波结果? 这是通过 CLA 中断实现的吗? 在什么指令下?

任何简单的解释都将有帮助。

非常感谢您、

此致

Leo

 

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

    Leo、        

    我将从一开始就解释实验练习代码流、希望这将回答您的问题。  在 main()中完成初始化后,‘while (1)’循环被输入。  该 ADC 由 ePWM2以50kHz 的速率触发。  在 adc.c 中、请注意 ADCA1INT1中断已注释掉:

         // PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

    这个 ISR 在之前的实验中使用过、但是在这个实验练习中、将使用 CLA 任务1 ISR。  在 cla.c 中、现在请注意 ADCAINT1正被用作 CLA 任务1的触发源。

         DmaClaSrcSelRegs.CLA1TASKSRCSEL1.bit.task1 = 1;  // 1 = ADCAINT1

    生成触发器后、运行 CLA 滤波器(来自 ClaTasks.asm 或 ClaTasks_C.cla)。  当任务1滤波器代码执行完成时、CLA 触发 CPU ISR。  在 CLA.c 中、请参阅以下代码行:

         PieCtrlRegs.PIEIER11.bit.INTx1 = 1;//在 PIE 组#11中启用 CLA 任务1

          IER |= 0x0400;                                    //在 IER 中启用 INT11以启用 PIE 组11

    此时、代码在 DefaultIsr.c 中继续执行、其位置为:

         中断空 CLA1_ISR (空)  // PIE11.1 @ 0x000DE0 CLA1中断#1

    ISR 执行完成后,再次进入 main.c 中的‘while (1)’循环,并重复该过程。

    但愿这对您有所帮助。

    - Ken

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

    您好 Ken、

    非常感谢您提供的全面答案、这无疑对您有所帮助。

    因此、我的理解是、这里的关键点是"当任务1滤波器代码完成执行时、CLA 触发 CPU ISR "。 这是由于 CLA.c 文件中的以下设置实现的:

    PieCtrlRegs.PIEIER11.bit.INTx1 = 1;//在 PIE 组#11
    
    IER |= 0x0400中启用 CLA 任务1; //在 IER 中启用 INT11以启用 PIE 组11 

    换句话说、当 CLA1中的任务1已经完成时、即当任务1 (CLA1的)内的整个代码已经被执行时、上述代码给出了生成 CPU1中断的指令。

    现在、在 DefaultIsr.c 内的"interrupt void CLA1_1_ISR (void)"内、我可以看到 CLA 滤波器结果 ClaFilteredOutput 通过以下方式传递到 CPU 变量 AdcBuf:

    //--读取 CLA 滤波器结果
    * AdcBufFilteredPtr ++= ClaFilteredOutput;//读取 CLA 滤波器输出 

    因此、我假设在这个阶段、CLA 任务1已经完成、ClaFilteredOutput 的值由 CPU1知道。 希望我的理解是正确的。

    再次非常感谢、

    Leo

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

    Leo、

    是的、您的理解是正确的。  任务1完成后、CLA 触发 CPU ISR。  要证明这一点、只需注释掉:

         // PieCtrlRegs.PIEIER11.bit.INTx1 = 1;//在 PIE 组#11中启用 CLA 任务1

    您将注意到、ISR 将不会执行。  此代码行关闭 PIE IER 开关、允许中断将中断属性传递到 CPU 内核、前提是其他所需的开关已正确设置。  如需参考、请参阅《车间维修手册》第4-14页的下幻灯片和第4-18页的幻灯片。

    任务1完成后、执行流程 继续在 ISR 中执行、正如您指出的、在这里、从 ClaFilteredOutput 读取滤波器结果并将其放置在循环缓冲区中。  您将注意到、在 main.c 中创建了一个数据段(接近顶部)、用于"ClaFilteredOutput"、以便使用"Cla1ToCpuMsgRAM"将结果传递给 CPU。  此段分配给 Lab.cmd 链接器命令文件中的存储器地址。

    希望我的研讨会材料对您有所帮助。

    - Ken

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

    您好 Ken、

    再次感谢您的全面回答。 这当然有帮助。 作为参考、  

    PieCtrlRegs.PIEIER11.bit.INTx1 = 1;//在 PIE 组#11中启用 CLA 任务1 

    关闭 PIEIER 开关、如下面报告的4-14和4-18所示。

    好的。 我想我还有另一个要点、正如您所解释的:CLA 内部的"ClaFilteredOutput"通过以下命令传递给 CPU:  

    #pragma DATA_SECTION (ClaFilteredOutput、"Cla1ToCpuMsgRAM"); 

    在 Lab9项目中的 Main_9.c 顶部定义。 我认为这是我最初要寻找的东西。

    您的研讨会材料非常有用。 如果 有其他有关 CLA 运行的示例(越简单越好)、那么很高兴知道。

    再次感谢您的观看、

    此致

    Leo  

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

    Leo、

    感谢你的答复。   您可以在 controlSUITE /C2000Ware 中找到一些 CLA 代码示例。  此外 、我认为您可能会发现 下面的视频系列"控制律加速器(CLA)实践技术讲座"非常有趣、 可在中找到:

    https://training.ti.com/control-law-accelerator-cla-hands-workshop

    - Ken