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);
}