Hallo, ich bräuchte Hilfe für eine Übungsaufgabe, mit der ich nicht so richtig zurecht komme und ergänzen muss. 68332 - 1MB FEPROM - 256 KB SRAM Aufgabe: (im Anhang) Bei einem 68332 soll nach Ablauf des PIT das Register D0 in einer ISR inkrementiert werden, das Programm dazu ist im EPROM. Stack 1 KB. EVT so durch ergäzen des ORG Befehls so legen, dass aus dem ROM gebootet wird. EVT und SSP so legen, dass sie beim Label STACK beginnen. IPC soll bei $200 beginnen. Eintrag fü den Exceptionvektor $60 des PIT hinzufügen. Ich müsste jetzt an den 6 Stellen mit ... noch etwas ergänzen, würde mich freuen wenn Ihr mir helfen könnt.
>Ich müsste jetzt an den 6 Stellen mit ... noch etwas ergänzen,
Mach doch, hier hält Dich keiner davon ab.
Ich kenne den '332 relativ gut. Was ist nicht klar? Den Code solltest du vielleicht als .asm-Datei posten... so kann man den net so gut anschauen ;) Gruss
Danke erstmal für deine Antwort, wie ich den Code jetzt als .asm Datei posten soll weiß ich ehrlich gesagt nicht. (bin neu, auch auf dem Gebiet) Was nicht klar ist, ist was in die Exception Vektor Tabelle reingehört, hab ehrlich gesagt kein plan wie man des macht. Danke
Nochmals zu dem was unklar ist, ich hätte folgendermaßen ergänzt, weiss aber nicht ob es richtig ist. INCLUDE initareg.inc ***EVT ORG $0 SSP DC.L STACK + 1024 IPC DC.L $200 aber des wars dann auch schon was mir dazu einfällt.
Ja, das ist fase richtig. Also offenbar weisst du schon, dass nach dem Reset die ersten beiden Longwords zum System Stack Pointer werden (A7 im Supervisor Mode), bzw. zum Programmcounter. Ich empfehle dir folgendes: ORG $0 DC.L STACK (Das war soweit richtig) DC.L $400 ORG $400 ;dein Programmcode Das aus folgendem Grund: Die Länge der Vektortabelle ist maximal 1024 Bytes (256 Vektoren * 4 Bytes). Da sie ab Adresse $0 beginnt, reicht sie bis $3FF, und ab $400 kann dein eigentliches Programm beginnen. Damit der PIT funktioniert, musst du im SIM erst mal einen Interrupt-Arbitrationslevel eingeben (Im SIMCR die letzten 4 Bits), sofern du mehrere Interrupts hast. Wenn nur der PIT aktiv ist, reicht es, wenn du den Standard-Level von $F beibehältst. Dann musst du dem PIT einen Interrupt-Vektor zuweisen (PICR) und einen Interupt-Level (1..7). Nehmen wir an, du gibst dem PIT den Vektor Nr. $80. Dann musst du in der Interrupt-Vektortabelle beim Vektor Nr. $80 die Adresse deines Interrupt-Programms eintragen. Klar? Dann über das PITR normal den PIT initialisieren & starten (schau im Manual auf S. 47). Dann noch die Interrupts freigeben (über das SR), und es sollte funktionieren. Grüsse
Danke für deine Antwort, hat mir weitergeholfen, wenn ichs richtig verstanden hab dann siehts folgendermaßen aus: ***EVT ORG $0 DC.L STACK (muss da nicht noch +1024 hin, da er 1KB sein soll?) DC.L $400 ORG $180 (da mein Exception Vektor $60 ist) DC.L ISR ***Program COUNT ORG $400 MOVE.B #$0C,SYPCR MOVE.W #$1000,RAMBAR *Initialize PIT MOVE.W #$0760,PICR ;Vektor = $60 und IPL = 7 MOVE.W #$0102,PITR *Initialize CPU32 registers CLR.L D0 *Main LOOP BRA LOOP ***ISR ISR ADD.L #1,DO RTE STACK DC.W 0 END COUNT wär schön wenn Ihr noch mal drüberschaut
Hoi Waldi, sorry dass ich mich so spät erst melde. Hab mir 'Ein Fall für Zwei' angeschaut ;) (Matula ist einfach cool ;)) Also: > DC.L STACK (muss da nicht noch +1024 hin, da er 1KB sein soll?) Ja da hast du natürlich Recht. Der Stack wächst beim '332 (wie bei allen 68k's) von oben nach unten - also DC.L STACK + 1024. Sonst siehts eigentlich gut aus. Sollte funktionieren (sollte! wie das halt bei Software so ist.... ;)). Schau dir evtl. mal noch folgende App Note von Motorola an: http://www.freescale.com/files/microcontrollers/doc/app_note/AN437.pdf?fpsp=1&WT_TYPE=Application%20Notes&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation (sch... Link :p) Dann hast du den PIT sicher voll im Griff. Morgen wünsche ich dir noch viel Glück bei deiner Prüfung. Berichte dann wies gegangen ist ;) Grüsse und schönen Abend
danke dass du noch mal zurückgeschrieben hast, heut um 13:00 werd ichs wissen wies gelaufen is. bis später
so, hat ein bisschen gedauert, war ehrlich gesagt schwerer als angenommen, mal sehen was dabei rauskommt. Es ist ein ziemlich ähnliches Programm drangekommen, da hab ich dank deiner Hilfe dann doch was zusammenbekommen. Danke noch mal für deine Hilfe Schönen Gruss
Hallo! Ich habe auch Fragen zu der Aufgabe. In der Lösung der Aufgabe wurde in der Zeile über Stack folgendes eingefügt: ORG $100400 also so: ORG $100400 ;$100400…1007FE STACK DC.W 0 ;Fill memory with $0000 und der erste Eintrag in der VectorTable ist nicht STACK + 1024 sondern: ORG 0 DC.L STACK ;Init Stack Der PC wird also auf 1kB nach Beginn des int. SRAM gestellt und dort eine Konstante #0 definiert? Meine Frage warum? Wieso wird nicht A7 mit dem Wert von STACK geladen? vielen Dank
Also, der Stack wächst nach unten, deshalb muss der SP auch mit einem Wert initialisiert werden, der ausreichend hoch ist, sodass nichts anderes überschrieben wird. Aer ich verstehe deine Frage nicht so ganz .... ?
Ja, der Stack wächst mit fallenden Adressen. Meine Frage(n): Für welchen Wert ist STACK der Platzhalter? für §100400? Und wozu "DC.W 0"? Ist es nur ein Dummy? Könnte in der Zeile sonstwas stehen?
Also, das DC.W 0 ist sinnlos, denn das definiert NUR an der Adresse, an der es steht, eine Null. Der Programmierer wollte aber hier, wie man dem Kommentar entnehmen kann, den Speicher (besser gesagt den Stack) zuerst mit 0 initialisieren. Das kann man machen, bringt aber nichts, und funktioniert in der Form, wie das in deinem Code steht, auch gar nicht, weil so, wie gesagt, nur eine einzelne Null gespeichert wird. Wenn du den Stack ab Adresse $100400 haben möchtest, dann schreibe doch: org $0 dc.l $100400 dc.l start start: ; hier beginnt dein programm Der Stackpointer, also A7, wird dann mit der Konstanten $100400 initialisiert und wächst nach unten. Blöd ist es, wenn du an Adresse $100400 wichtige Daten hast. Dann kannst du festlegen: der Stack darf max. 1024 Bytes gross werden, somit wird der Stackpointer nicht mit $100400 initialisiert, sondern mit $100400 + 1024 = $100800. Damit hast du $400 Bytes 'Luft' bis zur Adresse $100400. Klar soweit? Gruss
Klar! Danke! ...man vergleiche das Datum vom Vorposter mi dem heutigen...Prüfungszeit)
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.