Forum: Mikrocontroller und Digitale Elektronik Assembler mit AT91SAM7S256


von Jacob S. (Gast)


Lesenswert?

Hallo alle zusammen.

Ich soll im Zuge meines Praktikums den AT91SAM7S256 in Assembler
programmieren können. Leider findet man im Internet nur Beispiele in C,
die mir überhaupt nicht weiterhelfen.

Auf jeden Fall versuche ich zur Zeit nur einen einzigen Port
anzusteuern an dem ein LED angeschlossen ist und bin hoffnungslos
überfordert und verzweifelt. Ich versuche gerade ein Controll-Register
zu beschreiben. In der Simulation klappt das alles auch ganz gut, aber
sobald ich meinen Code auf den AT91 übertragen habe und das Programm
Schritt für Schritt ablaufen lassen möchte sehe ich im Speicher und in
den Register überhaupt keine Veränderung.

- Daher meine Frage weshalb das so ist?
- Fehlen noch irgendwelche Initialisierungsroutinen?
- Kennt jemand vielleicht eine Seite mit einigen ASM-
  Beispielprogramm für meinen µC


Achja, ich bin natürlich noch nicht fertig mit der Konfiguration der
Ports, eben weil ich noch nicht mal ein Register beschrieben kann

(0xFFFFF400) entspricht der Adresse des (PIOA) PIO Enable Register



        #include "AT91SAM7X256_inc.h"


        NAME    main

        ASEG
        CODE32

        org 0
        B       main

        CODE32


main    NOP

        MOV   R10,#0x01
        LDR   R3,=0xFFFFF400
        STR   R10,[R3]

maine   nop
        B maine

        END     main

von Dietmar (Gast)


Lesenswert?

Das sieht doch schon manierlich aus!

Arbeite zwar mit den Philips LPC2000-Serien, aber das ist im Grunde
vergleichbar: ARM-Kern, integrierte Peripherie von Philips oder Atmel.

Ja doch, sicher helfen dir die Beispiele in C !!! Kompiliere sie und
schau dir im Assembler-Listing (*.lst) an, welchen Assembler-Code der
C-Compiler erzeugt!

Beim Simulator stehen Registerwerte und Speicher oft auf Null, bei der
echten Hardware stehen da Zufallswerte.

Gruß

Dietmar

von Jacob S. (Gast)


Lesenswert?

Das stimmt, weiß ich aber bereits, dass in der Hardware Zufallswerte
stehen. Aber dennoch, wenn ich den Befehl         MOV   R10,#0x01
ausführe, dann muss doch eine Veränderung eintreten. In der Simulation
steht dann im R10 die Zahl 1. Aber bei der Hardware passiert nichts.
Also ich glaube, da fehlt noch was in der Initialisierung.
Bei den C-Files sind ja auch aufwändige Startup-Files dabei.

von Dietmar (Gast)


Lesenswert?

Ja klar! Du glaubst nicht, sondern du weißt, das in der Initialisierung
was fehlt, das klingt schon besser:

Das Startup File brauchst du natürlich schon, aber da es in Assembler
geschrieben ist, kommt das der Sache doch sehr entgegen, oder?

von Jacob S. (Gast)


Lesenswert?

Das iat das Problem. Mit der Init kenn ich mich nicht aus. Das heißt
also, der Code, so wie er hier steht läuft alleine nicht, wäre aber
richtig.

Aber warum kommt es mir entgegen wenn ich mein MAIN-Code in Assembler
schreibe?

von Dietmar (Gast)


Lesenswert?

>Aber warum kommt es mir entgegen wenn ich mein MAIN-Code in >Assembler
schreibe?

Einfach deshalb, weil du dort ebenfalls mit Assembler zu tun hast. Das
ist doch ein erstes Assembler-Beispiel, wo es schon einiges zu sehen
gibt. Das klang doch oben noch so, als wenn du in Assembler
programmieren wolltest???

Man fügt den Main-Assemblercode einfach dort an, wo der Startup-Code zu
Ende ist bzw. wo der Sprung zum C-Init steht. So mache ich das der
Einfachheit halber, wenn ich mich selbst mit dem ARM Instruction Set
beschäftige und ein paar Zeilen Assemblercode testen möchte.

Andererseits geht es auch mit einem neuen Assemblerfile, wie z.B. dein
Beispiel oben, indem man das Startupfile dort am Anfang einbindet. Das
könnte so aussehen:

$Include Startup.s   oder   #include "Startup.s"
o.ä., je nach Syntax des verwendeten Assemblers

von Dietmar (Gast)


Lesenswert?

Sorry, ich spreche natürlich von der Startup.s, die man bei den Keil
Tools für ARM findet.

Die Suche nach Assembler Sourcecode für ARM gestaltet sich bei mir auch
oft zeitraubend. Ab und zu findet man einen Schnipsel, z.B. hier:

http://www.neko.ne.jp/~freewing/cpu/arm_olimex/

(Bitte diese Seite nach dem Laden weit nach unten scrollen!)

Dort ist ein schönes Beispiel abgebildet, wo man sich anschauen kann,
wie z.B. Unterprogramme in ARM Assembler funktionieren.

Gruß

Dietmar

von Jacob S. (Gast)


Lesenswert?

Okay, das sah ich aber nicht als Vorteil an, sondern als logisch, von
daher....
So,ich hab aber was anderes herausgefunden. Wenn ich mir fertige
Beispiele in C auf den AT91 draufmache, funktioniert alles einwandfrei.
Konnte den Code noch verändern, immer noch alles einwandfrei. Hab sogar
die Init und das main-Programm in ein C-File umgebaut. Läuft auch noch
alles. Wenn ich allerdings das C-File abspeichere und ein neues leeres
Projekt starte und die C-Datei einbinde geht nichts mehr!!!!! Warum das
denn????
Mir ist allerdings folgendes aufgefallen. Die Konfiguration über J-Link
ist diesselbe (so glaub ich jedenfalls). Allerdings gibt es bei dem von
mir verändertem Projekt noch zusätzliche Dateien, die, wenn ich ein
neues Projekt starte, nicht dabei sind. Unter dem C-File gibt es
gleichnamige Dateien mit der Endung .r79 und .pbi
Also folgendes: Der reine Quellcode mit Startup-File und Konfiguration
des Assembers kann nicht reichen. Da muss noch was fehlen, sonst würde
er ja den Code ausführen.Was könnte das sein? Ich benutze übrigens IAR

von Jacob S. (Gast)


Lesenswert?

Das heißt folgendes: Der Assembler läd den Code auf den AT91 drauf und
startet auch, aber den Code, den er ausführen soll zeigt kein Effekt.
Z.B. bei MOV ändert er nicht die entsprechenden Register die er ändern
soll. Bei der vorhin veränderten Datei (gleicher Code & gleiche
Startup)hat er dies allerdings.... so ich glaub jetzt isses klarer.
Also muss irgendwas fehlen bei neuen Projekten

von Dietmar (Gast)


Lesenswert?

Mit IAR Tools kenne ich mich nicht aus. Aber, da ist was falsch
konfiguriert! Sicher sind beim neuen Projekt vorher eingestellte
Optionen weg, Dateien fehlen, usw.. Schau dir das alte Projekt mal an,
die dortigen Optionen werden nicht generell mit in ein neues Projekt
übernommen. Kann sein, daß .r79 und .pbi Einstellungen und Optionen zum
Projekt speichern. Bitte Anleitungen zum IAR-Paket lesen!

Im Grunde sind erst mal Startup-File und Headerfile zum richtigen µC
wichtig.

von Dietmar (Gast)


Lesenswert?

Die IAR Tools haben sicher auch einen Simulator, womit man
Hardwareprobleme erst mal ausschließen kann?

von Jacob S. (Gast)


Lesenswert?

Nun, wie schon anfangs erwähnt...in der Simulation klappt das alles
wirklich gut. Nur nicht auf der Hardware. Also kann ich davon ausgehen,
dass es an IAR liegt. Kennt sich vielleicht jemand damit besser aus?

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.