1

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 は、プリスケーラ 1、タイマ周期 80 で 80MHz で動作します。

私の最初の試行では、LED は 4 秒ごとにトグルしました(ISR = 4us ごと)。

PBCLK7のPostscaler を 2 から 1に変更することで、2 秒に到達できることがわかりました。(現在、CPU コアは 80MHz ではなく 160MHz で動作します)。

しかし、タイマー期間を 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);
}
4

1 に答える 1