Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage DMA STM32


von Fragender (Gast)


Lesenswert?

Hallo,
ich möchte gerne den I2C mit dem DMA eines STM32F303 betreiben.
Hierzu ist mir was im Reference Manual aufgefallen, was nicht ganz 
verstehe.
Und zwar kann man im DMA direkte Registeradressen einstellen, auf die 
das DMA-Modul zugreift (z.B. die Datenregister des I2C-Moduls).
Zusätzlich können beim I2C-Modul im Register CR1 die Bits RXDMAEN bzw. 
TXDMAEN gesetzt werden.
Was bewirken diese beiden Bits nun genau? Müssen diese gesetzt werden, 
wenn ich das ganze mit DMA betreibt?

Im Reference Manual steht hierzu folgendes (Seite 870):
DMA (Direct Memory Access) can be enabled for transmission by setting 
the TXDMAEN bit in the I2C_CR1 register. Data is loaded from an SRAM 
area configured using the DMA peripheral (see Section 13: Direct memory 
access controller (DMA) on page 263) to the I2C_TXDR register whenever 
the TXIS bit is set.

bzw. für RX:

DMA (Direct Memory Access) can be enabled for reception by setting the 
RXDMAEN bit in the I2C_CR1 register. Data is loaded from the I2C_RXDR 
register to an SRAM area configured using the DMA peripheral (refer to 
Section 13: Direct memory access controller (DMA) on page 263) whenever 
the RXNE bit is set. Only the data (including PEC) are transferred with 
DMA.

Hier noch ein Link zum Reference Manual:
http://www.st.com/content/ccc/resource/technical/document/reference_manual/4a/19/6e/18/9d/92/43/32/DM00043574.pdf/files/DM00043574.pdf/jcr:content/translations/en.DM00043574.pdf

Schonmal Vielen Dank für eure Hilfe!

von Peter II (Gast)


Lesenswert?

Fragender schrieb:
> Zusätzlich können beim I2C-Modul im Register CR1 die Bits RXDMAEN bzw.
> TXDMAEN gesetzt werden.
> Was bewirken diese beiden Bits nun genau? Müssen diese gesetzt werden,
> wenn ich das ganze mit DMA betreibt?

ohne die CPU oder die Doku zu kennen, was könnte wohl RXDMAEN bedeuten?`

RX_DMA_EN  -> Recive DMA Enable

damit würde ich schlussfolgern, das man zum Empfang mit DMA das bit 
setzen muss.

von Vincent H. (vinci)


Lesenswert?

Der DMA Controller bietet für jede seiner beiden Einheiten eine Reihe an 
Kanälen an, meist 7 oder 8 verschiedene, alle frei konfigurierbar. 
Grundsätzlich muss bei der Konfiguration eines Kanals zwischen 2 
Szenarien unterschieden werden.

1.) Der Kanal wird via Software getriggered.
2.) Der Kanal wird via Hardware getriggered.

Für den 2.) Fall bietet jeder Kanal eine Reihe verschiedener Requests 
an, wie für I2C etwa einen RX- und einen TX- Request. Setzt man die 
entsprechenden Bits für diesen Requests, so wird der Kanal "intern mit 
der I2C Schnittstelle verbunden" und reagiert von nun an auf Events die 
von der I2C Schnittstelle ausgehn.

Nun will man natürlich nicht, dass die I2C den entsprechenden DMA Kanal 
triggered, ohne dass man diesen überhaupt nutzen will. Aus diesem Grund 
muss es für I2C eigene "DMA-Enable" Bits geben.

Für den DMA muss es das "Enable" Bit ebenfalls geben, da man den DMA ja 
auch komplett ohne Request nutzen kann, um etwa Daten von A nach B zu 
kopieren.

Zur Nutzung des DMAs mit der I2C Schnittstelle müssen alle "Enable" Bits 
entsprechend gesetzt werden.

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.