Erstellen eines Modells flexiblen und einfachen Nutzung von DMA (Direct Memory Access) in User-Code und anderen modm-Modulen.


Zusammenfassung

Die meisten Mikrocontroller haben eine DMA-Einheit, welche unabhängig von der CPU auf Speicher zugreifen kann und Daten kopieren kann. Durch die Nutzung von DMA kann beispielsweise Peripherie wie SPI mit Daten zum senden versorgt und die empfangenen Daten gespeichert werden ohne dass die CPU hierbei belastet wird, wovon in modm [2] bisher kein Nutzen gemacht wird.

Einige sehr zeitkritische Anwendungen können ohne DMA gar nicht implementiert werden, beispielsweise eine Ansteuerung von WS2812-LEDs mit Bitmustern aus SPI.

Im Rahmen dieses Projekts soll ein API für Abstraktion von DMA-Einheiten entwickelt werden welches sowohl flexibel im Bezug auf mögliche DMA-Einheiten ist, als auch universell in modm-Modulen wie Gerätetreibern und im User-Code einsetzbar ist. Die Abstraktion sollte mindestens für STM32 Mikrocontroller implementiert werden, weitere Implementierungen könnten später erfolgen.

Anschließend können die vorhandene Treiber für STM32-Peripherie (SPI, UART, …) für DMA erweitert oder angepasst werden.

Aus dem Vorgängerprojekt vom modm, xpcc, existiert eine DMA-API [1], die sich allerdings als suboptimal herausgestellt hat.

Tätigkeitsfelder und Technologien

  • C++17
  • STM32 Speicherarchitektur, sowie weitere mögliche weitere Architekturen
  • STM32 Peripherie: DMA, Timer, SPI, UART, …
  • Low-level Programming in modm.io

Referenzen und Links

  • [1] https://xpcc.io/api/classxpcc_1_1stm32_1_1_dma_base.html
  • [2] https://modm.io