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