STM32 - DMA - Bei SPI lücken zwischen zwei Bytes

OP #2492080
Lesenswert?
• ▲
▼
Hallo!

Ich habe hier ein Core32 Modul vom MIDIBOX-Projekt liegen. Auf dem Ding 
ist ein STM32F103xx@72MHz drauf und ich habe eine Frage zum DMA.

Folgender Hintergrund: Ich habe ein zweites Board mit einem ATmega48 
@20MHz drauf, der von 12 8-channel-ADCs Werte liest. Die Daten (144 
Bytes) soll er dann alle 1ms per SPI an den STM32 übermitteln. Der STM32 
ist dabei der Master. Um die 1ms refresh-rate einzuhalten bin ich auf 
Clock-raten um die 440ns festgelegt. Leider ist die ISR meines Megas mit 
ihren wenigen Takten immernoch zu lang, um rechtzeitig den Puffer 
aufzufüllen. Also müsste der STM32 irgendwie Lücken zwischen zwei Bytes 
machen, damit die ISR genug Zeit hat. Ich habe im Datenblatt gestöbert, 
aber ich kann nichts dergleichen finden. Das Problem tritt doch bei mir 
sicehr nicht zum ersten Mal auf, oder?!

Wie kann man sowas Lösen? Kann man den DMA irgendwie passend 
konfigurieren? Oder die ISR weiter beschleunigen?

Johannes Neumann

PS: Wenn ich im STM32 keinen DMA verwende, dann kann ich natürlich 
wartezeiten einbauen und die Bytes der Reihe nach auslesen. Aber Hilfe, 
dann hab ich fast keine Rechenzeit mehr für all das, was ich mit den 
Daten noch erledigen will!
(Firma: DC3AX) #2492936
Lesenswert?
• ▲
▼
Der STM322 hat dazu keine Möglichkeit. Du könntest lediglich einen 1ms 
Timer aufziehen, der dann immer dasn nächste Byte aus einem Puffer 
sendet.
Der STM32 hat damit immer noch genug Rechenzeit übrig für alles andere.
Da man normalerweise den SysTick Timer mit 1ms fährt, kann man den SPI 
Master auch daran koppeln.

Aber es ist immer sinnvoll eine Kette auf ihr schwächstes Glied 
abzustimmen. Daher ist die Idee, den AVR zum Master zu machen sicherlich 
die sinnvollere.

Gruß
Ulrich
#2493889
Lesenswert?
• ▲
▼
> Ich habe hier ein Core32 Modul vom MIDIBOX-Projekt liegen. Auf dem Ding
> ist ein STM32F103xx@72MHz drauf und ich habe eine Frage zum DMA.
>
> Folgender Hintergrund: Ich habe ein zweites Board mit einem ATmega48
> @20MHz

Könnte der stm32 nicht auch gleich das ADC selbst machen?

Falls nicht, warum dann nicht auf dem zweiten Board auch einen stm32f103 
mit 72 MHz? Wenn es jetzt schon eng in der ISR zugeht.
OP #2495095
Lesenswert?
• ▲
▼
Roland H. schrieb:
> Könnte der stm32 nicht auch gleich das ADC selbst machen?
>
> Falls nicht, warum dann nicht auf dem zweiten Board auch einen stm32f103
> mit 72 MHz? Wenn es jetzt schon eng in der ISR zugeht.

Die PCBs waren schon da, jetzt nochmal neue herstellen zu lassen (geht 
nicht mehr zu hause, zu eng, zu viele vias) ist einfach zu teuer. 
Immerhin sind da 12 Wandler-ICs drauf.

Das Auslesen der ADCs vom STM32 zu machen, das geht von daher nicht, 
weil ich nicht genug Pins frei habe, um alle Wandler an einer Art 
"gemeinsamen, parallelen SPI" zu betreiben. Soll heißen MOSI, SCK und 
Enable gehen an alle ADC chips, aber die MISOs kommen getrennt zurück. 
So mache ich es jetzt mit dem AVR. Geht gut.
Daisy-Chaining ála Schieberegister geht bei den Wandlern leider nicht. 
Daher die Entscheidung mit dem Slave-Board.

Ich versuche mich jetzt erstmal an der AVR->Master Version. Das klingt 
vielversprechend und sollte mein Problem eigentlich perfekt lösen.

Johannes Neumann

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.