Forum: Mikrocontroller und Digitale Elektronik MSP430: DMA bei I²C und Stop Condition


von Timo (Gast)


Lesenswert?

Hallo!

Würde gerne bei dem von mir eingesetzten MSP430 die DMA zum 
automatischen abholen der via I²C empfangen Daten verwenden.
Hab mir das so vorgestellt, dass ich ein Array mit ausreichender Größe 
anlege.
Bevor ich einen Befehl an das I²C-Device schicke parametriere ich die 
DMA entsprechend. Ich weiß ja wieviel Bytes ich als Antwort erwarte.
Allerdings habe ich noch ein Problem beim theoretischen Lösungsansatz,:
Wie bringe ich die DMA dazu automatisch beim letzten Byte die Stop 
Condition zu setzen? Müsste ja theoretisch die DMA nur n-1 Bytes 
(n=Anzahl der zu empfangen Bytes) lang machen und in deren ISR die Stop 
Condition setzen und das letzte Byte über die TX-ISR des I²C empfangen.

Hat jemand schon mal das Problem gelöst? Falls ja: Wie?
Oder hat jemand einen Vorschlag, wie er es lösen würde?
Oder denke ich falsch und es gibt gar kein Problem?

Danke für eure Antworten!

Tim

von Klaus (Gast)


Lesenswert?

Timo schrieb:
> Wie bringe ich die DMA dazu automatisch beim letzten Byte die Stop
> Condition zu setzen?

Das reicht häufig nicht, das letzte Byte sollte zusatzlich mit NACK 
quitiert werden. Manche Slaves hängen sonst.

MfG Klaus

von Timo (Gast)


Lesenswert?

Okay, aber das grundlegende Problem bleibt ...

Timo

von Klaus (Gast)


Lesenswert?

Timo schrieb:
> Müsste ja theoretisch die DMA nur n-1 Bytes
> (n=Anzahl der zu empfangen Bytes) lang machen und in deren ISR die Stop
> Condition setzen und das letzte Byte über die TX-ISR des I²C empfangen.

So würde ich es versuchen. Die Frage ist eigentlich: lohnt sich DMA bei 
I2C überhaupt?

MfG Klaus

von Timo (Gast)


Lesenswert?

Klaus schrieb:
> Die Frage ist eigentlich: lohnt sich DMA bei
> I2C überhaupt?

Ich hoffe es...

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.