Forum: Mikrocontroller und Digitale Elektronik ATMEL Sam3x DMA -> PWM


von Marco H. (damarco)


Lesenswert?

Hallo,

ich stehe gerade auf dem Schlauch bei den versuch per DMA das 
Tastverhältnis an den PWM Controller zu senden.

Im Prinzip ganz einfach ;)
1
g_pdc_tx_packet.ul_addr = (uint32_t) (&(buf[0]));  // source Adresse 
2
g_pdc_tx_packet.ul_size = BUFFER_SIZE;             // Anzahl der Blöcke
3
pdc_tx_init(PDC_PWM, &g_pdc_tx_packet, 0);         // init 
4
5
pdc_enable_transfer(PDC_PWM, PERIPH_PTCR_TXTEN);  // start des Transfers


Nun aber vorher weiß der PWM Controller das die Daten aus den Puffer für 
das Tastverhältnis sein sollen ?


PDC_PWM ist die Basisadresse und wie geht es von dieser zu den 
entscheiden Registern ? Oder lassen sich nur bestimmte Register per DMA 
setzen ?
1
pwm_channel_init(PWM, &pwm_channel_instance);

Hier ist dies klar. Die Funktion setzt die entsprechenden Register aus 
der Basisadresse PWM.

Leider sind die Beispiele der API nicht sehr ergiebig zum Verständnis. 
Auf Seite 972 der Referenz ist erkenntlich das eigentlich fast alle 
Register per DMA sich setzen lassen. Vielleicht kann hier jemand den 
Knoten lösen ?

von Marco H. (damarco)


Lesenswert?

Ich kann es auflösen :)

Per DMA lässt sich nur das Tastverhältnis setzen. Periode, Dead Time 
etc. muss die CPU erledigen.

Es funktioniert nur mit Channels im Sync Mode.

Es bedarf weitere Konfigurationen.
1
/* set sync Channels and set Update Period   */
2
pwm_sync_init(PWM, PWM_SYNC_UPDATE_MODE_2,PWM_SCUP_UPR(0));

UPDM: Synchronous Channels Update Mode muss auf 2 stehen
PWM_SCUP_UPR stellt ein nach wie vielen Perioden der Wert übernommen 
wird. Achtung wert ist immer +1. Also es dauert mindestens immer eine 
Periode bis das neue Tastverhältnis wirksam wird. Dadurch lassen sich 
nur Tastverhältnisse von 50% erreichen.
1
/* set request Mode   comparison not set, value (1 << 0) choose   comparison unit  */
2
  pwm_pdc_set_request_mode(PWM, PWM_PDC_UPDATE_PERIOD_ELAPSED, (1 << 0));

Damit lässt sich einstellen unter welchen Bedingungen der PDC den 
nächsten Wert senden darf.

für weitere Informationen ist die Referenz zu rate zu ziehen. Sie ist 
sehr umfangreich ;)

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.