Forum: Mikrocontroller und Digitale Elektronik AT91SAM7


von Peter Pippinger (Gast)


Lesenswert?

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

von gerhard (Gast)


Lesenswert?

@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

von Jörn K. (joern)


Lesenswert?

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

von Jörn K. (joern)


Lesenswert?

zu langsam ;)

von Peter Pippinger (Gast)


Lesenswert?

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

von romanua (Gast)


Lesenswert?

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

von Peter Pippinger (Gast)


Lesenswert?

>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

von Peter Pippinger (Gast)


Lesenswert?

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

von romanua (Gast)


Lesenswert?

>schau auf atmel.com

genau

mfg

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.