主题中讨论的其他器件:C2000WARE
你(们)好
我想知道如何计算两个中断调用之间的可用时钟周期。
例如、假设我运行了一个100kHz PWM 中断。 将 PWM 模块配置为递增计数模式时、我们 使用90000000 / 100000 = 900来计算 TBPRD 值。
这是否意味着两个 PWM 调用之间只有900个时钟周期。?
此致
Damith
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.
你(们)好
我想知道如何计算两个中断调用之间的可用时钟周期。
例如、假设我运行了一个100kHz PWM 中断。 将 PWM 模块配置为递增计数模式时、我们 使用90000000 / 100000 = 900来计算 TBPRD 值。
这是否意味着两个 PWM 调用之间只有900个时钟周期。?
此致
Damith
Damith、
一个中断有效地将处理器从主任务中移开、以"处理一个中断"、这通常是一小段时间敏感 代码。 这与主代码无关、因此必须在中断执行前保存 CPU 的工作寄存器、并在中断完成后恢复到之前的值。 存储和恢复需要数十个周期、并且应记录在案。 https://software-dl.ti.com/C2000/docs/c28x_context_save_restore/html/index.html
此外、我关于主代码/ISR (中断服务例程、有时也称为中断)代码的一点是、您通常需要在每个 ISR 调用之间执行多项操作、因此您的时钟周期将进一步分频。
F28069处理器功能强大、适用于许多应用。 而不要过度看 CLA、它可以独立于 CPU 运行、并且可以有效地使 ISR 调用之间的时钟周期加倍。 但是、如果您只需要更高的时钟速度或更多内核、则还有许多其他 C2000器件可用。 https://www.ti.com/microcontrollers-mcus-processors/microcontrollers/c2000-real-time-control-mcus/products.html#p3164=180;925
此致、
Cody
尊敬的 Cody
非常感谢您的详细解释。 这真的很有帮助。
现在、让我解释一下我的实际问题。
我正在尝试以100kHz 的速度为逆变器运行控制环路。 我将为此使用100kHz PWM 中断。
对于此项目、我使用以下 c2000ware 库。
Sogi_PLL_1PH 库。
正弦分析器库
数字控制库。
RampGen 库
在这些库中、我使用两个 SPLL_1PH_Sogi_run s、四个 DCL_runPID_C s、一个正弦分析器函数和一个 rampgen 函数。 除此之外、还有一个正弦和余弦函数正在运行。
所有这些都包含在100kHz 中断中。
在没有 SPLL 函数的情况下代码运行正常、但一旦我将 SPLL 插入到代码中、它就会停止运行。
我猜我在单次运行中会耗尽时钟周期来执行此操作。
根据您的答案、我可以使用 CLA 有效地使时钟周期加倍。 我以前从未使用过 CLA。
我想了解更多信息。
我使用的算法应在100kHz 的单次运行中按顺序运行上述函数。
CLA 作为一种单独的 CPU 运行、对吧?、
因此、如果我想将一些负载传输到 CLA、那么最好的传输方式是什么、以保持顺序行为不变。
除此之外、您能否建议一种方法来计算我在代码中使用的函数所消耗的时钟周期。
此致
Damith
观察时钟周期的最简单方法是将 GPIO 切换作为代码中的特定点来执行。 然后使用示波器测量时间。
CLA 是第二个内核、通常人们会将某些任务卸载到它。 我相信、数字控制库中的某些内容实际上是为了在 C28x 内核或 CLA 内核上运行而编写的。 CLA 指南 https://software-dl.ti.com/C2000/docs/cla_software_dev_guide/index.html
使用 GPIO 切换时、您应该会看到您是否正在运行 ISR。 此外、还有一个指示中断是否溢出的标志。 这意味着器件会尝试设置 IFR 标志、但 IFR 标志已设置。 我也建议检查该标志。
此致、
Cody