STM32F103 + I2C + MPU6050 - DMA

Gast #3932264
Lesenswert?
• ▲
▼
Hallo,

habe folgendes Problem:
Ich will den MPU6050 über DMA auslesen, der Controller hängt nach dem 
zweiten DMA-Durchlauf (sprint aus der externen [EXTI0] Interruptroutine 
hinein) beim Ausdruck:
/* While the bus is busy */
while(I2C_GetFlagStatus(MPU6050_I2C, I2C_FLAG_BUSY));

Jetzt habe ich bereits gesehen, dass es ähnliche Probleme damit gab, 
deren Lösungen unterschiedlich waren.
Allerdings funktioniert das Auslesen ohne dem DMA-Block über 
MPU6050_I2C_BufferRead(...) gut.

Der einzige Unterschied, der mir aufgefallen ist, ist, dass beim 
einfachen Auslesen des letzten Bytes das Acknowledge vorher deaktiviert 
wird und eine Stop-Condition gesendet wird:
    if (NumByteToRead == 1)
    {
      /* Disable Acknowledgement */
      I2C_AcknowledgeConfig(MPU6050_I2C, DISABLE);
      /* Send STOP Condition */
      I2C_GenerateSTOP(MPU6050_I2C, ENABLE);
    }

Fällt jemanden etwas dazu ein?
Gibt es eine einfache Problemlösung?
(main-File im Anhang; DMA-Auslesen angelehnt an:
http://letanphuc.net/2014/06/stm32-mpu6050-dma-i2c/)
Angehängte Dateien:
Gast #3932586
Lesenswert?
• ▲
▼
Dieses Problem ist ein interessant ärgerliches.

Wenn ich MPU6050_GetRawAccelGyro() in der EXTI-ISR aufrufe, funktioniert 
es.
Wenn ich die DMA-Routine durchlaufen lasse (also Initialisierung und auf 
DMA-Ende-Interrupt warten), geht das einmal gut, danach ist Schluss.

Ich habe auch schon versucht, das letzte Byte ohne DMA auszulesen (also 
nur 13 statt 14 Bytes über DMA), damit ich das so wie im 
MPU6050_I2C_BufferRead() für das letzte Byte im 
DMA1_Channel5_IRQHandler() implementiere - das bringt aber auch nichts.

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.