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