Ich habe einen STM32F030, der per SPI einen DAC befeuert. Das Ganze läuft per DMA und Timer => Der Timer triggert in festen Zeitintervallen einen SPI-Transver, DMA entlastet dabei die CPU vollständig. Nun ist es so, dass der DAC 16Bit benötigt. Kein Problem also. Wenn ich jetzt weiter denke, würde ich später gern einen 3-fach DAC nehmen. Dieser benötigt dann 3x16Bit. Diese würde ich auch gern per DMA übertragen. Leider finde ich im DB keine Möglichkeit, dass der DMA 3x hintereinander "feuert" und somit 3 Übertragungen in einem Rutsch macht. OK, ein F0 ist ja nunmal wirklich kein Möglichkeitenmonster. Kann mir jemand sagen ob ein F4 sowas nativ ohne Klimmzüge kann? Habe ein F4 Discovery hier rumliegen, würde allerdings sicher 1-2 Tage brauchen bis ich das ausprobiert habe, daher wäre es echt cool, wenn mir jemand sagen könnte ob das geht.
Verstehe dein Problem nicht. Im Interrupt DMA auf das nächste Kanal umkonfigurieren und neu starten. Sollte in wenigen Zeilen geschrieben sein. Ingo L. schrieb: > OK, ein F0 ist > ja nunmal wirklich kein Möglichkeitenmonster. Das hängt von der Person ab, der die Programmierung vornimmt...
Ingo Less schrieb: > Genau das möchte ich vermeiden. Verstehe noch nicht genau das Problem. Du schubst doch den Spi Transfer per timer an, der dma schaufelt das weg. Du schmeißt ja nicht explizit den dma an. Du sagst ihm nur, kopiere x Bytes von Adresse A zu Adresse B, wenn welche da sind. Ich vermute, der 3x dac hat 3 interne dac hat? Also 3 verschiedenen register für eine Spi? Das Problem is doch, die richtige Spi Nachricht zu generieren und nicht den dma anzuschmeißen, oder?
Gegenfrage: muss das Chip Select beim DAC kurz hoch und runter getaktet werden dass er das Datenwort übernimmt? Dann geht das glaub nicht. Sonst sollte es ja reichen, einfach 6 Bytes zu senden. Schau im Datenblatt des (nicht näher von dir spezifizierten) DACs ob er so Kram wie Auto-Inkrement oder so unterstützt. Eine Alternative, wenn RAM und Datenbuszugriffe kein Problem sind, du aber ganz unbedingt dringend zwingend das über DMA machen musst: mach SPI in Software, schreib die Zustände der Pins SCK, SDO und CS als Bits in einen Array und schick den als parallele Daten per DMA auf einen GPIO-Port. Das braucht halt pro SPI-Datenbit zwei Bytes RAM und zwei bis drei Instruktionen, aber wenn du eh von F0 auf F4 wechselst ist das eh drin.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.