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
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
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.
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?
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?
>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
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
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
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
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.
Die IAR Tools haben sicher auch einen Simulator, womit man Hardwareprobleme erst mal ausschließen kann?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.