I2C maximale performance

OP #4782757
Hi,

Ich versuche möglichst wenig overhead bei der Verwendung eines I2C Bus 
Systems auf einem STM32F4 zu erzeugen, doch ich bin mir da nicht sicher, 
was am sinnvollsten ist.
Bei der Verwendung des DMA muss ich trotzdem ziemlich lange warten bei 
Dingen wie
1
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) {
2
      if (--timeout == 0) {
3
        return 1;
4
      }
5
    }

etc., was mir das ganze ziemlich nutzlos erscheinen lässt. Bei SPI kann 
ich ja einfach den DMA aufsetzen und ich erhalte alle Daten mit einem 
Interrupt. Gibt es keine Möglichkeit das ganze Handshaking mit dem DMA 
zu lösen? Sollte ich auf den DMA verzichten und die I2C Datenaquirierung 
in die main loop nehmen, wärhend alles andere wichtige mit Interrupts 
und hoher priorität gelöst wird?

Grüsse Sebastian
#4782894
Für die I2C Events gibts doch auch Interrupts.

Du kannst zum Beginn den Interrupt aktivieren anstatt in der Schleife 
auf das Event zu warten.
Dann im Interrupt den DMA starten und gleichzeitig den Interrupt 
deaktivieren (braucht man dann ja bis zum nächsten Start nicht mehr).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.