Forum: Mikrocontroller und Digitale Elektronik PIC32MX350: INT4 wird nie ausgelöst


von Harstad (Gast)


Lesenswert?

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!

von Harstad (Gast)


Lesenswert?

OK, Ursache gefunden: Das Interrupt-Flag für ISR2 wurde nie gelöscht - 
warum dann INT1 und INT2 weiter funktioniert haben, INT4 aber nicht, ist 
mir zwar nicht ganz klar, aber damit funktioniert es jetzt.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Hört sich nach Priotität an.
"INT0 darf einen mit höherer Nummer unterbrechen".
Andersrumm nicht.
Kommt beim STM32 auch zum tragen und ist für gewöhnlich einstellbar.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Wie ist denn der Befehlsdurchsatz von so einer MIPS32-Implementierung 
von Microchip ? Gibts Befehlssatzextensions für SIMD oder DSP ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.