Das stimmt und um das zu vermeinden, habe ich mir kompletten Befehlsatz für 8-bit AVR's runtergeladen und schnell überflogen: http://www.atmel.com/dyn/resources/p...ts/doc0856.pdf . Dort gibt es sogar sehr viele gleiche Mnemonics, wie bei PIC's. Weil das Programmieren für mich nur ein Mittel ist, um meine Hardware "lebendig" zu machen, möchte ich mir zuerst die gleich, wie bei PIC's, funktionierende zig Befehle auszufiltern und verwenden. Wenn es nötig wird, werde ich mein Befehlsatz zukünftig nach Bedarf erweitern.
Übrigens, in "Operation" für jeden Befehl sind sehr ännliche Symbole verwendet, wie in meinen PAD's. Ich sehe daher als Anfänger den Wiki Artikel "PIC Assembler": http://www.rn-wissen.de/index.php/PIC_Assembler nach Änderung den Befehlen und Register für AVR's völlig anwendbar. Lediglich war der Titel damals schon vorgegeben, sonst würde er heissen: "Assemblerprogrammierung".
Als erste Übungen um ASM Programme für AVR's effizient schreiben zu können, möchte ich mit "Übersetzung" von: http://www.rn-wissen.de/index.php/PI...er#Hilfsmittel für AVR anfangen, da ich den "PIC Miniterminal" bereits seit langem verwende.![]()
Geändert von PICture (11.07.2011 um 17:20 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Hallo!
Ich habe mit "studieren" des Datenblattes von ATtiny24/44/84 ( http://www.atmel.com/dyn/resources/p...ts/doc8006.pdf ) angefangen und festgestellt, dass die Interruptvektoren (1 ... 17) auf Seite 48 für alle Interrruptsquellen schon fest definiert sind und können nicht beliebig geändert werden. Stimmt das ?![]()
Geändert von PICture (10.07.2011 um 02:27 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Man kann die Zieladressen in der Sprungtabelle der Interrupts ändern. Defaultmässig springen die zu einem RETI. Einfach die Adresse der selbstgemachten ISR eintragen.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Das ist mir noch nicht ganz klar, weil selbstverständlich an den Adressen (0 ... 17) entsprechende ISR Adressen/Marken stehen werden. Beispielweise, wenn ich den Timer/Counter0 permanent laufen lasse, wird nach jedem Überlauf an die Adresse 0x000Bh und weiter an dort stehende Adresse/Marke entsprechender ISR gesprungen und das kann ich nicht ändern, oder ?![]()
Geändert von PICture (10.07.2011 um 02:54 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Hallo PICture,
ich seh das auch so, daß die Zuordnung von Interruptquelle und Programmadresse bei dem ATtiny festgelegt sind.
Das kann man nicht ändern und legt auch gleichzeitig in der Reihenfolge der Interruptnummern die Prioritäten fest. Der Inhalt der Programmadresse kann geändert werden und sollte bei generellem Gebrauch von Interrupts die Anweisung (zB RJMP) zum Aufsuchen der ISR enthalten.
Als Pre-Anfänger in ASM stelle mir das so vor, das der Programmcounter durch den Interrupt HW gesteuert unbeeinflußbar auf den in der Tabelle 9-1 aufgeführten unveränderbaren Wert gesetzt wird. Dort sollte dann ein Befehl stehen, der die Programmausführung mit der ISR fortführt.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Die Interruptsvektoren sind fest, am Anfang des Flash je 1 (bzw. 2 ab 16 Kbytes Speicher) Worte auseinander. In der Regel steht da dann ein Sprung (RJMP oder JMP) auf die eigentliche ISR. Wenn man die Interrupts dahinter nicht braucht kann man da auch direkt mit der ISR anfangen ohne den Sprung. Da dies im Flash steht kann man es zur Laufzeit nicht (oder nur sehr umständlich) ändern. Falls man da je nach Programmteil eine andere ISR braucht macht man das als normale Verzweigung im Code.
Ein Sprung auf ein RETI für einen nicht genutzten Interrupt ist übrigens ziemlich sinnfrei: Da könnte auch gleich das RETI hinschreiben, und außerdem aktiviert man einen ungenutzten Interrupt einfach nicht.
Lesezeichen