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.