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.
我们使用 CLA 来加快电力电子系统的控制律执行、并通过切换 GPIO 来了解 CLA 上的执行时间。 我们有一个系统使用 EPWM1来触发 ADC 测量、EOC 进行 ADC 测量、然后触发 CLA 任务1。 这一切都按预期运行。 最初、我刚刚切换了 CLA 任务中的一个 LED 以检查所花费的时间、这里是 CLA 任务代码:-
//----------------------------------------------------------------------------- // // Task 1 - PWM control loop // // Description: PWM control logic can be implemented here. // //----------------------------------------------------------------------------- __attribute__((interrupt)) void Cla1Task1 ( void ) { // // Turn ON Loop1 Profiling GPIO // GPIO_writePin(16,1); loop1_task(); // // Turn OFF Loop1 Profiling GPIO // GPIO_writePin(16,0); }
此任务按预期每20us 触发一次、但 LED 的开启和关闭切换需要~2us。 这看起来很长一段时间、尤其是对于 CLA 而言、它应该是一个非常快速的外设。 CLA 直接控制 hte GPIO、我们得到的结果是:-
有没有任何想法、为什么在 CLA 任务中像这样打开和关闭 LED 会花费如此长的时间来执行?
我还应该说、当我测量如上所示的 GPIO 引脚时序时、"loop1_task ();"已被注释掉、因此我们只看将 GPIO 引脚16设置为高电平然后将其设置为低电平的线路的时序。
Iain、
对于因在美国休假期间不在办公室而造成的回复延迟、我深表歉意。
Driverlib 函数对硬件进行抽象化、以方便使用、但这样做的代价是需要花费更多的周期而不是直接写入寄存器。 此外、driverlib 的"调试"版本将比"发布"版本花费更多的周期。
为了解决这个问题、可以直接写入寄存器。 C2000Ware 中有一个使用 HWREG 宏通过 CLA 代码执行此操作的示例:
突出显示的行将向 GPIOA.SET 寄存器位相应的 GPIO2 (0x4 = b0100)写入 SET 寄存器
此致
洛里
您好、Lori:
感谢您为我进行深入了解。 我将在星期四回到实验室、所以我将尝试一下、并告诉您它如何影响速度。
此致、
伊恩
您好、Lori:
我刚刚尝试了使用 HWREG 命令、这使情况好多了! 对于只通过 HWREG 将 GPIO 设置为高电平并立即再次设置为低电平的 CLA 任务、我们得到以下测量行为:-
我们现在看到一个大约16ns 的高脉冲。 我们有一个120MHz 内部时钟、看起来大约需要两个时钟周期来设置为高电平、然后两个周期再次设置为低电平。
非常感谢您对此提供的帮助、
祝你一切顺利、Iain