Xmega - Wozu ADC Result Register doppelt?

Gast #2713116
Lesenswert?

Hallo, beim Programmieren des AD Wandlers eines ATXMega32A4U ist mir das 
doppelte Vorhandensein der Result-Register aufgefallen, nämlich 
gesammelt auf den IO-Adressen dez. 528-535 und nochmal separat für jeden 
virtuellen Kanal. Was hat es damit auf sich- Datenblatt und App-Note 
schweigen sich aus... ?

Gruß Reinhard S.
Gast #2714032
Lesenswert?

Die XMega Familie soll die Fähigkeit bieten die Hardware zu 
abstrahieren. Der erste Breich wo die Register gesammelt sind ist für 
den klassischen Programmierer gedacht.

Die zweite Möglichkeit das Register anzusprechen (über Kanal-Offset und 
Adresse) ist Atmels "New World Order". Damit ist es möglich eine 
Funktion zu schreiben, die das Offset des Kanals bekommt und darüber den 
Kanal anspricht. Dieser Funktion ist es dann egal ob es Kanal 0,1,2 oder 
3 ist.

Auf dem PC würde man z.B. eine Basisklasse (in C++) definieren und die 
Kanäle davon ableiten oder einfach eine "Port-Tabelle" pro Kanal 
benutzen. Auf dem uC sind aber Resourcen und/oder Zeit kanpp. Deswegen 
hat Atmel die Hardware abstraktionsfreudiger gemacht.
Gast #2714042
Lesenswert?

Ja danke Horst, klingt logisch. Also sind die Register jeweils 
gleichwertig/gespiegelt bzw. man kann auf ein-und dieselbe Speicherzelle 
(Register) über zwei unterschiedliche IO-Adressen zugreifen !?
Gast #2714084
Lesenswert?

Hi

Also ich finde im Manual (ab S.386) 4 Register, CH0DATAH, CH0DATAL, 
CH1DATAH und CH1DATAL. Und für jedes Register sind zwei Belegungen für 
Right- und Left-Adjust angegeben. Wo sind jetzt die doppelten Register?

MfG Spess
#2788721
Lesenswert?

Einerseits möchte man mit einem DMA Kanal gleich mehrere ADC/DAC Kanäle 
in/aus dem Speicher schreiben und andererseits möchte man dem 
Programmierer die Möglichkeit geben indirekt über Zeiger auf einen 
DAC/ADC Kanal zuzugreifen. So wie dies Horst als "New WSorld Order" 
beschrieben hat.

Zb. hat man im Speicher ein Stereo-WAVE liegen, also abwechselnd immer 
ein Sample für Linken und Rechten Kanal. Man möchte aber die DMA 
Resourcen schonen und nicht mit zwei, eventuell nicht-synchronen, DMA 
Kanälen diesen Sound ausgeben. Also benutzt man eine einzigen DMA Kanal 
der mit 4-Bytes-Burst Modus synchron gleich beide DAC Kanäle füttert. 
Dazu müssen aber die beiden DAC Daten Register im Speicher linear 
aufeinanderfolgen.

Gleiches Spiel beim ADC. Man möchte mit einem DMA Kanal gleich 4 ADC 
Kanäle eines ADCs in den SRAM speichern.

Andererseits möchte man in Software über indirekte Zeiger, die zur 
Laufzeit dynmisch sein können, den gleichen Konfigurationscode für 
unterschiedliche DAC/ADC Kanäle merhfach benutzten. Dazu müssen alle 
Register wie ein Record im Adressbereich gemappt werden.

Also ziemlich logisch durchdacht die Sache.

Gruß Hagen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren