Forum: Mikrocontroller und Digitale Elektronik Interrupt Handler wird nicht aufgerufen


von Bastian W. (carter)


Lesenswert?

Hallo!

Ich versuche mit meinem Cortex M0 (NXP LPC1313) die Daten eines Gyros 
(MPU6050) über I2C auszulesen.
Mein I2C Interrupt Handler hat verschiedene States. Wenn ich nun 
versuche, das Start Bit mit Slave Adresse und R/W Bit zu senden, sendet 
er nur das Start Bit (obwohl im Dat Register der zu übertragende Wert 
eingetragen wird.
1
void I2C_M_Transfer(LPC_I2C_TypeDef *pI2C, i2c_transfer *transfer)
2
{
3
  /* Write Address and R/W bit to data register */
4
  I2C_WriteByte((transfer->slaveAddr << 1) | (transfer->txSz == 0));
5
  /* Enter to Master Transmitter mode */
6
  I2C_Start();
7
}
1
uint32_t I2C_WriteByte (uint8_t databyte)
2
{
3
  /* Make sure start bit is not active */
4
  if (LPC_I2C->CONSET & I2CONSET_STA)
5
  {
6
    LPC_I2C->CONCLR = I2CONCLR_STAC;
7
  }
8
  LPC_I2C->DAT = databyte & I2C_I2DAT_BITMASK;
9
}
1
static uint32_t I2C_Start()
2
{
3
    /*--- Issue a start condition ---*/
4
    LPC_I2C->CONSET = I2CONSET_STA;  /* Set Start flag */
5
}

Der State ändert sich (in dem Fall zu 0x8) und ein Interrupt löst aus. 
Mein I2C Interrupt Handler wird nicht aufgerufen, obwohl dieser richtig 
in der Nested Interrupt Tabelle steht. (Überprüft anhand des 
Datenblatts)
In meinem "cr_startup_lpc13xx.c" source file steht auch der richtige 
Name des Handlers, welcher in meinem "i2c.c" aufgerufen werden sollte.

Ich hoffe, jemand hat einen Lösungsansatz für mein Problem. Gerne hänge 
ich bei Bedarf auch noch die nötigen Files an.

von 6a66 (Gast)


Lesenswert?

Bastian W. schrieb:
> Der State ändert sich (in dem Fall zu 0x8) und ein Interrupt löst aus.
> Mein I2C Interrupt Handler wird nicht aufgerufen, obwohl dieser richtig
> in der Nested Interrupt Tabelle steht. (Überprüft anhand des
> Datenblatts)

Interrupts freigegeben?
In den Registern mal nachgeschaut ob auch Interrupts erzeugt werden 
(Status Bits der Controllregister)?

rgds

von Bastian W. (carter)


Lesenswert?

6a66 schrieb:
> Bastian W. schrieb:
>> Der State ändert sich (in dem Fall zu 0x8) und ein Interrupt löst aus.
>> Mein I2C Interrupt Handler wird nicht aufgerufen, obwohl dieser richtig
>> in der Nested Interrupt Tabelle steht. (Überprüft anhand des
>> Datenblatts)
>
> Interrupts freigegeben?
> In den Registern mal nachgeschaut ob auch Interrupts erzeugt werden
> (Status Bits der Controllregister)?
>
> rgds

Ah, danke! Die NVIC wurden an der falschen Stelle aktiviert, jetzt 
scheint es zu gehen :)

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.