Forum: Mikrocontroller und Digitale Elektronik dsPIC "intelligenter" DMA?


von Patrick B. (p51d)


Lesenswert?

Hallo miteinander

Ich habe eine kleine Frage zu DMAs: DMA funktioniert ja in etwa so, dass 
man ein Array von Daten übergibt und dieser arbeitet dann das Ganze für 
SPI, UART... ab.
Da es aber bei vielen SPI-Anwendungen nicht ein reines SPI ist, sondern 
noch weitere Kontroll-Leitungen vorhanden sind (Frame-Sync, Load bei 
DACs), habe ich mich gefragt, ob man das Senden an eines DACs ebenfalls 
mittels DMA lösen kann?

Mein Problem:
Ein dsPIC33FJ soll einen 4-Kanal DAC über das SPI alle 1ms mit neuen 
Daten füttern.
CS geht auf 0 und "gleichzeitig" geht FrameSync kurz auf 1 und wieder 
auf 0. Dann werden die 16Bit für den DAC hinausgeschoben. Anschliessen 
CS wieder auf 1. Das ganze für jeden der 4 DAC's wiederholen. Am Schluss 
soll der DAC die neuen Werte an die Ausgänge übertragen -> Load kurz auf 
0 und wieder auf 1. Und das alle 1ms.

Kann man Zusätzliches Bitgewackel auch mit dem DMA lösen oder ist das 
nur für das SPI Modul gedacht?

Sry für die Fragen aber ich beschäftige mich zum ersten mal mit DMA.

Besten Dank für die Hilfe
MFG
Patrick

von MCUA (Gast)


Lesenswert?

>DMA funktioniert ja in etwa so, dass man ein Array von Daten übergibt..
Nein.
Der DMA-Controller nimmt (irgentwie von aussen oder von innen 
getriggert) Daten entgegen, und schickt die direkt in das Memory hinein.
Dazu gibt es verschiedene Techniken.
Mal wird die CPU dafür für einige Takte angehalten, mal ist abwechselnd 
CPU u DMA aktiv, mal geht der Transfer 'spurlos' (ggfs über DPRAM) an 
der CPU vorbei.
Je leistungsfähiger der Transfer desto aufwändiger und teurer der uC.
WAS das für Daten sind, ist dem DMA-Controller egal.

von Patrick B. (p51d)


Lesenswert?

Aber das Bitgewackel ist nicht möglich?
Der DMA kann ja nicht wie eine Funktion programmiert werden...

Patrick

von DJ T. (Gast)


Lesenswert?

Der DMA-Controller macht ja nur den Datentransfer vom Speicher zum Modul 
bzw. vom Modul zum Speicher. Dazu bekommt der DMA-Controller einen 
Trigger vom Modul (z.B. UART Tx leer, ADC-Wert fertig usw).
D.h. die Logik für Deine Steuerleitung müßte im SPI-Controller selber 
vorhanden sein, der DMA hat damit nichts am Hut. Wenn's der 
SPI-Controller nicht kann, dann hilft auch der DMA nicht.

von Frank K. (fchk)


Lesenswert?

Patrick B. schrieb:

> Ein dsPIC33FJ soll einen 4-Kanal DAC über das SPI alle 1ms mit neuen
> Daten füttern.
> CS geht auf 0 und "gleichzeitig" geht FrameSync kurz auf 1 und wieder
> auf 0. Dann werden die 16Bit für den DAC hinausgeschoben. Anschliessen
> CS wieder auf 1. Das ganze für jeden der 4 DAC's wiederholen. Am Schluss
> soll der DAC die neuen Werte an die Ausgänge übertragen -> Load kurz auf
> 0 und wieder auf 1. Und das alle 1ms.

Einige dsPIC33 haben ein DCI (Data Communication Interface), das z.B. 
für Audio-Codecs verwendet werden kann. Stichwort I2S oder AC97. Wenn Du 
einen passenden Codec verwendest, macht das DCI die ganzen Geschichten 
mit MCLK,LRCLK/FSYNC etc automatisch, und es wird so einfacher bzw 
überhaupt erst möglich, das per DMA zu realisieren.

fchk

von Patrick B. (p51d)


Lesenswert?

Ich habe es gerade nachgeschaut. Der dsPIC33FJ128MC804, den ich 
verwende, hat ein DCI, aber leider sind nur CSCK, COFS, CSDI und CSDO 
vorhanden. Dann müsste ich das Load-Bit extern lösen.
Die Analogausgabe ist auch nicht für Audio gedacht, aber wenn man damit 
den DAC ansteuern kann...

von Maik W. (werner01)


Lesenswert?

Hallo,

Der dspic33fj64GP802 u. 804 hat einen 16b Stereoaudiodac und son AC97 
Singsbums..
Vieleicht hilft Dir die Info weiter..

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.