Problem Xmega Pattern Generator

Gast #4198063
Lesenswert?
• ▲
▼
Hallo,

hat schon mal jemand die AWEX-Einheit im Modus "Pattern Generator" (PGM) 
erfolgreich benutzt?

Habe das Problem, dass der Port_C konstant nur den Portwert ausgibt und 
auf AWEX-PGM nicht reagiert.
Aus dem Datenblatt werde ich nicht ganz schlau. Muss ich DTIEN, 
AWEX.OUTOVEN
(erfolglos probiert) setzen? Was fehlt?
Mit dem Debugger habe ich gesehen, dass das Flag DTHSBUFV gesetzt und 
danach wieder zurück gesetzt wird - PGM müsste also laufen...
Wieso kommt am Port nix an?

Ich habe:
- Xmega 64A3U
- AWEX.CTRL= "PGM"
- beschreibe AWEX.DTHSBUF mit verschiedenen Werten (über DMA: 
funktioniert)
- Timer C0 läuft mit TCC0.PER= Periodendauer, TCC0.CTRLB= 0

Danke für Hinweise.
(Firma: matzetronics) #4198870
Lesenswert?
• ▲
▼
Alexxx schrieb:
> Hat niemand einen Hinweis??

Leider nicht für Pattern Generation, wenn du ein funktionierendes 3 
Kanal mit DTI Unit Beispiel suchst, kann ich dir allerdings helfen.

> Aus dem Datenblatt werde ich nicht ganz schlau. Muss ich DTIEN,
> AWEX.OUTOVEN
> (erfolglos probiert) setzen?
Für meine Anwendung (Sinus Antrieb für BLDC) setzte ich DTIEN für die 
drei Kanäle und lasse AWEX.OUTOVEN unbenutzt (nicht gesetzt). Ich 
schalte statdessen die Ausgänge der PWM ab oder an übers Portregister.
Gast #4198992
Lesenswert?
• ▲
▼
Ich habe das Problem - durch probieren - selbst gelöst!
Für Andere (die evtl. irgend wann später durch googeln hier landen):
Die DTI-ENABLE-Bits (in AWEXx.CTRL) müssen für den 
Pattern-Generator-Mode ZUSÄTZLICH gesetzt werden, damit das Pattern auf 
den jeweiligen Portpins erscheint! (Die Output-Override-Bits dürfen 
NICHT gesetzt sein)
PS: Das Timer-Overflow-Interruptflag kann gleichzeitig benutzt werden um 
eine DMA zu triggern, die aus einer Tabelle AWEXx.DTHSBUF mit Patterns 
"füttert"

Knut B. schrieb:
> Code???

Da ich den Code in zwei Dateien habe - eine ist eine art Bibliothek, 
kann ich den Code schlecht als Anhang schicken, deshalb zusammenkopiert:

//**********************************************************************
void Setup_Pattern_Generator(AWEX_t *awex, float frequency, uint8_t 
startvalue)
{
  PORT_t    *port;
  TC0_t    *tptr;

  port= AWEX2Port(awex);    // ermittelt die Portadresse der 
AWEX-Ausgänge
  port->DIRCLR= 0xFF;
  port->OUT= startvalue;
  awex->CTRL= AWEX_PGM_bm;
  awex->CTRL |=   AWEX_DTICCAEN_bm | AWEX_DTICCBEN_bm | AWEX_DTICCCEN_bm 
| AWEX_DTICCDEN_bm;  // nur Pattern Generation
  awex->OUTOVEN= 0;    // Port in Portmodus, KEIN Override!
  awex->DTHSBUF= startvalue;  // PGM-Buffer= startvalue
  awex->DTLSBUF= 0;    // Port in Portmodus, KEIN Override!
  port->DIRSET= 0xFF;    // Ausgänge einschalten
  tptr= AWEX2Timer(awex);    // ermittelt die Adresse des Timer_0 der 
AWEX-Einheit
  if(frequency > 0)
    tptr->CTRLA= SetupIntervallTimer_F(tptr, frequency);  // 
konfiguriert einen Timer auf eine definierte Ausgangsfrequenz
}
//********************************************************************** 
***
/** @brief initialisiert Pattern-Ausgabe aus einer Tabelle
*/
void setup_value_output(void)
{
  // Setup Output-Tabelle
  FillBlock(&output_tab[0], 0x20, OUTTAB_MAXLEN); // Tabelle füllen
  Setup_Pattern_Generator(&AWEXC, 49.0*OUTTAB_MAXLEN, output_tab[0]);
  // Setup DMA: Quelle ist Tabelle, Ziel ist AWEXC.DTHSBUF
  SetupDmaChannel(&DMA.CH0, &output_tab[0], (uint8_t *)(&AWEXC.DTHSBUF), 
1, OUTTAB_MAXLEN, true);
        // Die DMA wird mit dem Pattern-Takt getriggert
  DMA.CH0.TRIGSRC= DMA_CH_TRIGSRC_TCC0_CCA_gc;
}

PPS: wenn jemand Interesse an meinen selbst gebastelten 
Peripherie-Routinen hat, gleich melden!

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.