Forum: Mikrocontroller und Digitale Elektronik I2C maximale performance


von Sebastian T. (sebastian_tsch)


Lesenswert?

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

von Christoph (gizmo)


Lesenswert?

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).

von Sebastian T. (sebastian_tsch)


Lesenswert?

Super, das probiere ich mal aus, danke.

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.