I2C maximale performance

OP #4782757
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
#4782894
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren