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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.