Hi, Ich versuche einen Sensor über I2C interruptgesteuert auszulesen. Als Software benutze ich MPLAB v8.86 und der Debugger ist ein MPLAb ICD3 Mein Problem ist, dass der I2C1 Interrupt nicht auslöst (Breakpoint in der ISR)der Quelltext sieht wie folgt aus. #include <p32mx795f512l.h> #include <plib.h> #pragma FPLLIDIV = DIV_2, FPLLMUL = MUL_20, FPLLODIV = DIV_1 // Stellt den Controller auf 80 MHz ein void main (void) { IEC0bits.I2C1MIE = 1; //Enable I2C1 Master Interrupt IEC0bits.I2C1SIE = 1; IEC0bits.I2C1BIE = 1; IFS0bits.I2C1MIF = 0; //Delete I2C1 Interrupt Flag IPC6bits.I2C1IP = 1; //I2C1 Interrupt Priorität IPC6bits.I2C1IS = 0; //I2C1 SUB Priorität I2C1BRG = 98; //Baud Register auf 400 khz (80000000 / (2 * 400000)) - 2 startI2C(0x68,0x01); while(1); } void __ISR(25, ipl2) I2CInterrupt1(void) //I2CM1 Master interrupt { IFS0bits.I2C1MIF = 0; } void startI2C(char adresse, char bus) { switch(bus) { case 0x01: //I2C1TRN = adresse; //TRISAbits.TRISA14 = 0; //TRISAbits.TRISA15 = 0; //I2C1CONbits.SCLREL = 1; //I2C1CONbits.A10M = 0; I2C1CONbits.DISSLW = 0; //0 Slew Rate für 400 khz I2C1CONbits.SMEN = 0; //SM Bus ausschalten I2C1CONbits.ON = 1; //I2C1 Bus anschalten I2C1CONbits.SEN = 1; //Startbedingung Senden break; } } Das Interrupt flag wird nach der Startbedingung gesetzt aber die ISR wird nicht ausgelöst. Meine Frage wäre jetzt ob ich einen Fehler im Quelltext habe (evtl gibt es ein Interrupt Enable bit, dass ich vergessen habe) Oder ob es an Einstellungen von MPLAB liegen könnte Gruß Lukas
Hi, Falls jemand das gleiche Problem hat, Ich habe das Problem gelöst: Im Datenblatt gibt es keinen Hinweis auf ein globales Interrupt Flag in einem Register aber über Assembler kann es gesetzt werden die Code Zeile lautet folgendermaßen: asm volatile ("ei"); Des weiteren habe ich festgestellt, dass man den Interrupt multi vectored mode (MVEC) aktivieren muss um mit mehreren Interrupts agieren zu können. INTCONbits.MVEC = 1 ; Gruß Lukas
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.