我正在使用 MPLABX + Harmony 框架为 PIC32MZ1024EFK064 编写代码。
我的目标是每微秒触发一次 ISR。为了测试这一点,我在 ISR 1000000 次循环后切换了一个 LED:
uint32_t xxx = 0;
void __ISR(_TIMER_2_VECTOR, ipl1AUTO) IntHandlerDrvTmrInstance0(void)
{
xxx++;
if(xxx > 1000000){
xxx = 0;
blink();
}
PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_TIMER_2);
}
Timer2 以 80MHz 运行,预分频器为 1,定时器周期为 80。
在我第一次尝试时,LED 每 4 秒切换一次(ISR = 每 4us)。
我发现通过将 PBCLK7 的Postscaler 从 2 更改为 1可以达到 2 秒。(现在 CPU 内核运行在 160MHz 而不是 80MHz)。
但即使我将计时器周期更改为 1,我的 LED 也只会每 2 秒切换一次。
知道如何在这里进一步加快速度吗?
更新:
子程序blink()
太慢了。通过直接操作寄存器,它工作在1us
void __ISR(_TIMER_2_VECTOR, ipl1AUTO) IntHandlerDrvTmrInstance0(void)
{
LATBINV = 1<<8;
PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_TIMER_2);
}