Schönen guten Abend alle zusammen. ich habe da mal eine Anfängerfrage. Ich will bei meinem Timer_1 den Interrupt für einen Compare A Match freigeben. Wie genau mache ich das in Assembler? Dazu muss ich wenn ich das richtig verstanden habe ja im SREG das I-Bit auf 1 setzen. Kann ich das so machen? ldi r16,1000000 out SREG,r16 Oder ist das vollkommen falsch?
>ldi r16,1000000 >out SREG,r16 >Oder ist das vollkommen falsch? Ja, r16 hat nur 8Bit;)
@ Mr.Blubb (Gast) >Interrupt für einen Compare A Match freigeben. Wie genau mache ich das >in Assembler? Passende Register setzen. >Dazu muss ich wenn ich das richtig verstanden habe ja im SREG das I-Bit >auf 1 setzen. Kann ich das so machen? >ldi r16,1000000 >out SREG,r16 >Oder ist das vollkommen falsch? Nicht vollkommen, aber ausreichend falsch. Es gib den schönen Befehl sei ;-)
Wie jetzt, ich kann mir das ganze in Register schreiben sparen indem ich nur sei an stelle von meinem falschem asm code schreibe? Und das gilt dann auch direkt für meinen Compare A Match? Oder muss da noch was dazu? Bin etwas verwirrt, weil im Datenblatt das sei auch einfach so in quelltext auftaucht.
Gibt bei Atmel nicht nur Datasheet sondern auch Befehlssatzbeschreibung. Lesen!
Mr.Blubb schrieb: > Wie jetzt, > ich kann mir das ganze in Register schreiben sparen indem ich nur > > sei > > an stelle von meinem falschem asm code schreibe? Und das gilt dann auch > direkt für meinen Compare A Match? Oder muss da noch was dazu? > Bin etwas verwirrt, weil im Datenblatt das sei auch einfach so in > quelltext auftaucht. sei schaltet alle Interrupts, die freigegeben wurden auch tatsächlich frei. Ein Interrupt muss spezifisch aktiviert (freigegeben) werden und mittels sei lässt man dann die tatsächliche Bearbeitung zu. AVR-Tutorial
Hi >Hups, schwerer fehler... >ich meinte natürlich >ldi r16,0b1000000 Endlich mal jemand, der mit diesem 'tmp'-Gedödel verseucht ist. Aber auch Assembler ist komfortabel: ldi r16,1<<OCIE1A ... >Wie jetzt, >ich kann mir das ganze in Register schreiben sparen indem ich nur Nein. Einmal den entsprechenden Interrupt aktivieren und global (sei) Interrputs erlauben. Und lies dir in Ruhe mal die Hilfe zu AVR-Assembler/AVR-Assembler2 durch. MfG Spess
Um das gesamte Tutorial zu lesen fehlt mir leider die zeit (Wird aber in den nächsten Ferien gemacht), außerdem ist es ja schon spät... Aber ich glaube ich habs jetzt raus: ldi r16 0b00010000 out TIMSK,r16 ;Enable von OCIE1A ldi r16,0b1000000 out SREG,r16 ;I-Bit auf 1 setzen sei ;Interrupts erlauben Ich hoffe das stimmt jetzt, wenn nicht wäre es super nett wenn wer die Lösung hat.... sonst mache ich mir wieder die ganze Nacht gedanken darüber und kann nicht schlafen ;)
Mr.Blubb schrieb: > Ich hoffe das stimmt jetzt, Das ist jetzt doppelt gemoppelt. Auf der einen Seite setzt du selber das I-Bit im SREG. Auf der anderen Seite ist das genau das, was sei macht. Lass das SREG in Ruhe! Es gibt (zunächst) keinen Grund sich dort an den Einzelbits zu vergreifen!
1 | ldi r16, 1<<OCIE1A |
2 | out TIMSK, r16 |
3 | |
4 | sei |
> Um das gesamte Tutorial zu lesen fehlt mir leider die zeit
Die wirst du dir aber nehmen müssen! Und zwar jetzt. Denn genau solcher
Code kommt dort massenhaft vor. Spätestens nach dem Kapitel mit den
Timern gibt es kaum ein Kapitel, in dem kein sei vorkommt (oder Setzen
von Einzelbits in einem Register. Und zwar per Namen und nicht per
Bitabzählen)
Hi >Ich hoffe das stimmt jetzt, wenn nicht wäre es super nett wenn wer die >Lösung hat.... sonst mache ich mir wieder die ganze Nacht gedanken >darüber und kann nicht schlafen ;) Gewöhne nicht dir nicht solchen Unsinn an: >ldi r16 0b00010000 Siehe Beitrag "Re: Interrupt freigeben" ldi r16,0b1000000 out SREG,r16 ;I-Bit auf 1 setzen ist fast identisch mit 'sei'. Nur mit 'sei' überschreibst du die anderen Flags nicht. MfG Spess
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.