0

PIC32MZ2048ECH144 を使用しています。RH8 (ピン番号 81) と RH9 (ピン番号 82) に接続された 2 つのスイッチがあります。ピン レベルで割り込みを設定するオプションが MHC に表示されないため、ポート H 用に生成された ISR を取得します。各ピンの ISR を個別に呼び出す必要があります。したがって、「system_init.c」の「SYS_Initialize」関数に次の行を追加しました。

PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_8); PLIB_PORTS_PinChangeNoticePerPortEnable(PORTS_ID_0, PORT_CHANNEL_H, PORTS_BIT_POS_9);

「system_interrupt.c」で MHC によって生成された ISR:

    void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH1(void)
    {
        PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_CHANGE_NOTICE_H);
        APP_SwitchChangeNoticed();  
    }

上記の ISR マクロを以下の行に置き換えました。

    void __ISR(_ADC1_DATA22_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH1(void)
    {
        PLIB_INT_SourceFlagClear(INT_ID_0, INT_SOURCE_CHANGE_NOTICE);
        APP_SwitchChangeNoticed();
    }

    void __ISR(_ADC1_DATA23_VECTOR, ipl3AUTO) _IntHandlerChangeNotification_PortH(void)
    {   
       PLIB_INT_SourceFlagClear(INT_ID_0,INT_SOURCE_CHANGE_NOTICE_H);
        test1();  
    }

これはうまくいきませんでした。リンクhttp://microchip.wikidot.com/faq:78を参照しました。「/pic32mx/include/proc/p32mz2048ech144.h」から ISR マクロのベクター番号を選択するのは間違っていると思います。(私は _ADC1_DATA22_VECTOR と _ADC1_DATA23_VECTOR を使用し、81 と 82 に対する値はピン番号であると考えていましたが、これも機能しませんでした。) ピンレベルの割り込み (同じポートに 2 つのピン) を設定する方法に関するヘルプやヒントは本当に素晴らしいでしょう! 私の投稿に誤りがありましたことをお詫び申し上げます。

前もって感謝します。

4

1 に答える 1

1

簡単に言えば、あなたが求めていることは、2 つの個別の ISR では直接達成できないということです。H ポート全体で使用できる変更通知 ISR ベクトルは 1 つだけです。通常は、ソフトウェア チェックを追加して、2 つのピンのどちらが異なる状態にあるかを判断することで、探しているものを実現します。もう 1 つの方法は、信号を別のポートに単純に移動することです (ボードがファイナライズされていない場合)。

関数に付ける名前は、ISR が何に反応するかには関係ありません。本当の魔法は __ISR マクロ引数にあります。

例えば:

void __ISR(_CHANGE_NOTICE_H_VECTOR, ipl3AUTO) _IntHandler1234()

_CHANGE_NOTICE_H_VECTOR;に注意してください。これは、変更通知割り込みがポート H で発生したときに、この割り込みサービス ルーチンが呼び出されることを意味します。

于 2016-06-08T19:56:43.170 に答える