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.