ATMEL Sam3x DMA -> PWM

OP #4460591
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 ?
OP #4463274
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 ;)

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.