Interrupt Handler wird nicht aufgerufen

OP #4249473
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.
Gast #4249493
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
OP #4250600
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 :)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.