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!