Hallo NG,
zunächst mal danke, an alle die mir bei den erstern Schritten mit meinem
AT91SAM7256 Entwicklerboard geholfen haben. Greetings to: @Greg,
@gerhard, @romanua and to all others...
Jetzt klappt das auch mit dem Samba und SRAM, nachdem ich als
Linkereinstellungen die at91SAM7S256_64KRAM.xcl verwendet habe.
Allerdings ist mir etwas noch nicht ganz klar. Ich habe mir das mit den
Ein-/Ausgängen eigentlich so vorgestellt:
z.B.:
1.) Pin17 auf Ausgang
2.) Pin17 auf High -> LED an
3.) Pin17 auf Low -> LED aus
Allerdings verstehe ich leider nicht so ganz, warum das High und Low
setzten des Pin17 an 2 verschiedenen Adressen (Offset 0x34 & 0x30)
erfolgt und was es mit den Offsets 0x00 & 0x10 auf sich hat.
ldr r0, =0xFFFFF400
ldr r1, =100000000000000000b
str r1, [r0,#0x0]
ldr r1, =100000000000000000b
str r1, [r0,#0x10]
ldr r1, =100000000000000000b
str r1, [r0,#0x34]
ldr r1, =100000000000000000b
str r1, [r0,#0x30]
Wäre nett, wenn jemand erläutern könnte, was es mit den Adressen auf
sich hat.
Vielen Dank!
Peter
@peter
das setzen und löschen von bits erfolgt beim at91sam (und bei allen
anderen arm's die ich kenne) immer über 2 adressen da damit aus
verschiedenen programmteilen auf die port's bzw. sonstigen register der
div. peripherals mit nur einem befehl zugegriffen werden kann (stichwort
"atomic function").
wenn du es genauer wissen möchtest dann empfehle ich dir wieder mal
deinen blick ins datasheet.
gruss
gerhard
Das mit den zwei Adressen bringt Geschwindigkeit. Beim AVR musst du, um
ein Bit zu ändern:
- Register lesen
- Maske laden
- beide verknüpfen
- Register schreiben
Beim SAM7:
- Maske laden
- Register schreiben
Gruß
Jörn
Hallo Gerhard,
bedeutet das dann, in meinem Beispiel, dass...
ldr r0, =0xFFFFF400
ldr r1, =100000000000000000b
str r1, [r0,#0x34]
...Pin17 auf High setzt?
ldr r1, =100000000000000000b
str r1, [r0,#0x30]
...Pin17 auf Low setzt?
Für was sind dann noch diese Beiden hier:?
ldr r1, =100000000000000000b
str r1, [r0,#0x0]
ldr r1, =100000000000000000b
str r1, [r0,#0x10]
MfG
Peter
Nach der Optimierung hast du folgendes:
//Basis Adresse der PIO Registergruppe laden.
//Die eigentlichen register sind dann relative dieser Adresse an
gesprochen
ldr r0, =0xFFFFF400
//Maske fuer PIOA17 Laden
ldr r1, =100000000000000000b
//PIOA17 als IO (in Gegenteil zu Peripherie ) einstellen
str r1, [r0,#0x0]
//PIOA17 als OUT einstellen (in Gegenteil zu IN)
str r1, [r0,#0x10]
//PIOA17 auf Low ziehen
str r1, [r0,#0x34]
// PIOA17 auf High ziehen
str r1, [r0,#0x30]
Peter, am Datenblatt Lesen kommst Du nicht vorbei. Schau Dir p. 234 an.
Da steht alles.
mfg
>Peter, am Datenblatt Lesen kommst Du nicht vorbei. Schau Dir p. 234 an.>Da steht alles.
Ok. Allerdings habe ich schon wieder ein Problem. Auf arm.com haben die
scheinbar die Seite umgestellt. Könnte mir jemand einen Link zum
Datenblatt schicken?
Vielen Dank!
Peter
Sorry, folks!
mir ist gerade beim Duschen die Idee gekommen: schau auf atmel.com.
Nicht auf arm.com.
Also: noch ist nicht Hopfen und Malz verloren :-)
MfG
Peter