Forum: Mikrocontroller und Digitale Elektronik Taster an AT91SAM7


von Peter P. (axis)


Lesenswert?

Hallo NG,

wie kann ich denn eine der beiden Taste auf meinem AT91SAM7256 abfragen?

bis jetzt versuche ich:

  ldr r0, =0xFFFFF400

taste  ldr  r1, [r0, #0x08]
  and   r1, r1, #10000000000000000000b
  cmp  r1, #10000000000000000000b
  bne  taste

Leider tut sich nichts. Es sollte halt eine der beiden Tasten (an PA19 
oder PA20) abgefragt werden...

Verständnisfrage: Sind automatisch alle PINS, die nicht über 0xFFFFF410 
auf Ausgang gesetzt sind, auf Input? Wenn nicht -> wie kann man denn 
dann PINS für die Eingabe konfigurieren?

Vielen Dank für jeden Hinweis!
Peter

von Tobias R. (tobiasrohde)


Lesenswert?

Nach einem Reset, sind bei den AT91 alle PIOs als Eingänge mit aktivem 
Pullups konfiguriert.

Warum benutzt du keinen Compiler?

Grüße

von Peter P. (axis)


Lesenswert?

> Warum benutzt du keinen Compiler?

Ich weiß nicht, ich mache so viel den ganzen Tag mit irgendwelchen 
Hochsprachen. Irgendwie vergisst man bei all den GHz was da eigentlich 
für eine Leistung dahinter steckt. Auf dem ARM möchte ich mich halt ein 
bischen abreagieren. Ausgabe klappt jetzt schon ganz gut.

Ein kleines Beispiel für das Warten auf einen Tastendruck würde mich 
sehr freuen.

Grüße,
Peter

von Peter P. (axis)


Lesenswert?

Jetzt habe ich im Manual gesehen, dass ich wahrscheinlich an der 
falschen Stelle nach Änderungen an den Pins suche. Gefunden habe ich:

0x003C Pin Data Status Register(3) PIO_PDSR Read-only

aber funktionieren tuts trotzdem nicht. Kann mir jemand sagen, was ich 
falsch mache?

  ldr r0, =0xFFFFF400

taste  ldr  r1, [r0, #0x3c]
  and   r1, r1, #10000000000000000000b
  cmp  r1, #10000000000000000000b
  bne  taste

von Greg (Gast)


Lesenswert?

Hallo Peter,

hast du daran gedacht, dem PIO den Takt zuzuführen?
Ich weiß das Register nicht aus dem Kopf, aber dort kannst du den Takt 
für den PIO (USB, etc.) freischalten.

Nach einem Reset ist das Bit 0 -> kein Takt.


Gruß,
Greg.

von Peter Pippinger (Gast)


Lesenswert?

>hast du daran gedacht, dem PIO den Takt zuzuführen?
>Ich weiß das Register nicht aus dem Kopf, aber dort kannst du den Takt
>für den PIO (USB, etc.) freischalten.

>Nach einem Reset ist das Bit 0 -> kein Takt.

Für was ist der Takt genau notwendig?
Benötigt man den Takt nur für Input?
Gilt der Takt für alle Pins, oder kann man das festlegen?

...Weil dia Ausgabe auf meine LEDs funktioniert ja bereits...

Danke!

von Greg (Gast)


Lesenswert?

Hallo Peter,

der Takt wird für das gesamte PIO-Modul geschaltet.
Ich schalte stets den Takt zu, wenn ich auf das PIO-modul zugreifen 
will.


Gruß,
Greg.

von Peter P. (axis)


Lesenswert?

Hallo NG,

jetzt habe ich wieder mal alles mögliche probiert. Aber leider klappt es 
immer noch nicht.

Im Manual-PDF (AT91 ARM Thumb-based Microcontrollers) habe ich auf
Seite 81 (Kap 15.5) genau das gefunden, was ich machen will. Kann mir 
mal bitte jemand verraten, wie ich die Beispiele oben mit der Tabelle 
darunter in Verbindung sehen darf? Ich denke, dann könnte ich wieder ein 
paar Schritte weiterkommen...

Vielen Dank!
Peter

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

du brauchst zwingend einen Takt im PIO Block sonst werden keine Eingänge 
eingelesen. Ausgänge funktionieren dagegen. Das ganze hängt damit 
zusammen das man in schnellen Logikdesigns alle internen Signale 
synchron zum Takt haben will weshalb Eingangssignale mit einem FF 
synchronisiert werden und dazu brauchts eben einen Takt -> PMC

Matthias

von Peter P. (axis)


Lesenswert?

>synchronisiert werden und dazu brauchts eben einen Takt -> PMC

Ok, verstehe ich das richtig - Du meinst den 
Power-Management-Controller?

Da gibt es mehrere Clocks... welche muss ich mir denn genauer anschauen?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

es geht um die Peripheral Clocks. Wenn du das Register das diese 
aktiviert auf 0xFFFFFFFF setzt werden alle Peripheriegeräte mit Takt 
versorgt. Nicht optimal sollte aber erstmal helfen.

Matthias

von Peter P. (axis)


Lesenswert?

@Matthias

hey, das ist ja total GENIAL! Die Taste tuts! Habe am Anfang noch:

  ldr r0, =0xFFFFFC00

  ldr r1, =0xFFFFFFFF
  str r1, [r0, #0x10]

hinzugefügt. Und das klappt! VIELEN DANK!

Eine Frage hätte ich aber noch: wenn 0xFFFFFFFF in 0xFFFFFC00 nicht so 
optimal ist - was wäre denn dann Optimal?

von Dominic R. (dominic)


Lesenswert?

Mal ein Schuß in's Blaue:
0x4

Gruß,

Dominic

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.