Ich verwende hier drei externe Interrupts INT1, INT2 und INT4 an D8, D9
und D11. Die Zuweisung der Pins sollte passen:
1 | INT2Rbits.INT2R = 0x0000; //RD9->EXT_INT:INT2;
|
2 | INT4Rbits.INT4R = 0x0003; //RD11->EXT_INT:INT4;
|
3 | INT1Rbits.INT1R = 0x0004; //RD8->EXT_INT:INT1;
|
Die Initialisierung der Interrupts selber sieht für mich auch gut aus:
1 | IPC4bits.INT4IP = 1;
|
2 | IPC4bits.INT4IS = 0;
|
3 | IPC1bits.INT1IP = 1;
|
4 | IPC1bits.INT1IS = 0;
|
5 | IPC2bits.INT2IP = 1;
|
6 | IPC2bits.INT2IS = 0;
|
7 |
|
8 | INTCONbits.MVEC = 1;
|
Trotzdem wird INT4 nie ausgelöst. Das Signal steht am richtigen Pin an,
INT1 und INT2 funktionieren erwartungsgemäß nur am Breakpoint in
1 | void __ISR(_EXTERNAL_4_VECTOR, IPL1AUTO) _EXTERNAL_4(void)
|
2 | {
|
3 | //***User Area Begin->code: Ext INT 4***
|
4 | SYNCIsr();
|
5 | //***User Area End->code: Ext INT 4***
|
6 | EX_INT4_InterruptFlagClear();
|
7 | }
|
bleibe ich nie stehen. Was könnte da fehlen/falsch sein?
Danke!