Forum: Mikrocontroller und Digitale Elektronik GPIO-Port via DMA-Transfer setzen


von DMA-Anfänger (Gast)


Lesenswert?

Hallo zusammen,

ich beschäftige mich momentan mit den Möglichkeiten der DMA-Komponente 
im STM32F407 (STM32F4Discovery).

Hierbei möchte ich eine sich ständig wiederholende Sequenz von Outputs 
auf einem GPIO-Port generieren, wobei die CPU möglichst wenig belastet 
werden soll. Die Sequenz soll mit maximal möglicher Geschwindigkeit 
ablaufen.

Ich stelle mir den Ablauf so vor:

- Die Sequenz liegt als Array von 32bit Werten im Speicher, wobei die 
unteren 16bit jedes Wertes den Registerbereich "BSRRL" und die oberen 
16bit den Registerbreich "BSRRH" repräsentieren. (Das BSRR-Register 
dient dem Setzen/Rücksetzen der GPIO-Pins (untere 16bit für Setzen & 
obere 16bit für Rücksetzen.))

- Per DMA wird nun Wert für Wert aus dem Array transferiert und 
nacheinander das BSRR-Register entsprechend gesetzt. Auf diese Weise 
ergibt sich eine Sequenz von Ausgangswerten am GPIO-Port.

Meine Fragen:
-------------

- Ist sowas prinzipiell möglich? Auf Seite 164/165 des Reference-Manuals 
ist das "DMA request mapping" einsehbar. Dort konnte ich jedoch keinen 
GPIO-Port als Peripherie finden.

Hier der Link zum Ref.Man.:
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/DM00031020.pdf

- Darüber hinaus bietet das DMA2-Modul noch die Möglichkeit des Memory 
to Memory Transfers. Könnte man mit dieser Möglichkeit arbeiten? Leider 
bietet dieser Modus keinen Circular-Mode.

Vielleicht hat jemand sowas auch schonmal umgesetzt und kann mir 
Denkanstöße geben? Mir würde auch schon das eine oder andere 
zielführende Stichwort sehr helfen.

Viele Grüße und Danke!
DMA-Anfänger ;-)

von DMA-Anfänger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

zwischenzeitlich habe ich ein kleines Projekt zum laufen bekommen, 
welches Portpins via DMA sequenzartig schalten kann. Hierbei triggert 
ein Timer den DMA, welcher dann das ODR-Register des Ports beschreibt.

Falls jemand zufällig auf diesen Thread stößt und ein ähnliches 
"Problem" hat, habe ich das Coocox Projekt in den Anhang getan. Das 
Beispiel lässt sich natürlich auch leicht abändern.

Gruß
Dma-Anfänger

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.