Interrupt freigeben

Gast #2010304
Lesenswert?
• ▲
▼
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?
#2010322
Lesenswert?
• ▲
▼
@  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

;-)
Gast #2010332
Lesenswert?
• ▲
▼
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.
#2010343
Lesenswert?
• ▲
▼
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
Gast #2010362
Lesenswert?
• ▲
▼
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
Gast #2010452
Lesenswert?
• ▲
▼
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 ;)
#2010460
Lesenswert?
• ▲
▼
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)
Gast #2010467
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.