AT91SAM7S64 - Auslesen des Last Converted Data Register

OP #1816696
Lesenswert?

Hi,

Ich habe ein vermutlich relativ simples Problem:

Es geht um eine AD-Wandlung von einem Sensorwert von einem ADXRS300.
Nach der AD-Wandlung möchte ich gerne den Wert, der in dem Last 
Converted Data Register liegt in einer Variablen speichern um damit 
andersweitig zu arbeiten. Ich bin jetzt den ganzen Tag schon am suchen, 
ob es möglich ist den Wert aus dem Register auszulesen und in eine 
Variable zu speichern. Leider bin ich bisher nicht weiter gekommen und 
hoffe nun, dass einer von euch mir helfen kann.

Wäre für eine schnelle Antwort, vorzugsweise mit der Antwort "Ja, es 
geht so ..." dankbar. Für andere antworten auch ^^
OP #1817648
Lesenswert?

Hatte bisher versucht das Register direkt anzusprechen und in eine
1
unsigned int
 zu speichern. Der Compiler hat auch net gemeckert, aber funktioniert 
hat es trotzdem net. Stand immer nur der Wert 1023 oder bei einem 
anderen Versuch immer nur 0 drinne.

Mein letzter Versuch sieht momentan so aus:
1
value= AT91C_ADC_LDATA;

Was natürlich sein kann, ist, dass ich mich einfach ein bischen blöd 
anstelle und vor der Lösung seit gestern hocke ...

Als Anmerkung am Rande: ich bin noch nicht so erfahren im Programmieren 
von Controlern.
Moderator Persönliche Seite #1818050
Lesenswert?

Tim L. schrieb:

> Mein letzter Versuch sieht momentan so aus:
1
value= AT91C_ADC_LDATA;

Das Register heißt aber AT91C_ADC_LCDR.  Wofür der Name ADC_LDATA
überhaupt gut sein soll, erschließt sich mir nicht, die Definition
lautet auf 0x3FF.  Da es sich um einen 10-bit-ADC handelt, soll
ADC_LDATA (bzw. ADC_DATA) möglicherweise als Maske gut sein.

Wenn du mehr als nur ein Register zugreifst, könnte es sich übrigens
lohnen, die Strukturvariante zu benutzen:
1
  AT91PS_ADC adcp = AT91C_BASE_ADC;
2
...
3
  value = adcp->ADC_LCDR;

So, wie ich die Architektur des ARM verstanden habe, ist es ziemlich
aufwändig, eine 32-bit-Zahl (bspw. halt die Adresse des ADC_LCDR)
in ein Register zu laden.  Hingegen liegen die Basisadressen der
einzelnen peripherals allesamt so, dass sie sich mit einem einzigen
Befehl in ein Register laden lassen, und der anschließende Struktur-
zugriff lässt sich ebenfalls vom Compiler gut als offset-indirekte
Adressierung umsetzen.

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