主题中讨论的其他器件:C2000WARE
您好!
在我的代码中、我将使用由 PWM 触发的 ADC 中断以50us 的速度运行我的例程。 我的代码与交流感应电机控制相关。
在每50us 产生一次 ADC 中断、并且获取 ADC 值后、我使 ISR 标志为真。 我在 while 循环中使用该标志来检查和运行我的代码。
在 while 循环中、我将调用一些使用电机控制库和 IQmath 宏/函数库的函数。
在 while 循环中、我将使用电机控制和 IQmath 宏、如 ACIFE_MACRO、_IQsinPU 等、并进行一些计算。
当我在 RAM 中运行代码时、代码会正常运行、我在 while 循环中切换 GPIO、该循环以每50us 切换一次。 但当我在闪存中运行代码时、GPIO 不会在50us 时切换、而是在200us 时切换至250us。
通过注释和取消注释例程中的某些部分,我发现当我注释 ACIFE_MACRO ()时, GPIO 被切换为100us。
然后、我取消对 ACIFE_MACRO 的注释并注释例程中使用的_IQsinpu、_IQcospu 宏、然后 GPIO 以150us 切换。
参考 HVACI_Senorless_2833x、我使用了#pragma CODESECTION 来复制 while 循环中的例程函数。
当我使用它并取消注释 ACIFE_MACRO 和_IQsinpu、_IQcospu 时、GPIO 在150us 切换。
因此、我在代码中添加了 ACIFE_MACRO、_IQsinpu 和_IQcospu 并使用了#pragma CODESECTION、然后 GPIO 按预期在50us 切换。
这是它在代码中的样子
空 main ()
{
...
while (1)
{
if (adcisrflag)
{
//切换 GPIO 并执行一些例程
//希望在下一个 adcisr 之前完成例程
}
}
}
_interrupt ADC_ISR ()//ADC ISR 每50us 触发一次
{
adcisrflag = 1;
}
我认为 ACIFE_MACRO、_IQsinpu/_IQcosPU 可能需要更多时间来运行。
您能提出解决这个问题的方案吗?
谢谢、此致。