mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt freigeben


Autor: Mr.Blubb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sei

Abgesehen davon ist 1000000 eine Million. Auch in Assembler.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ldi r16,1000000
>out SREG,r16

>Oder ist das vollkommen falsch?

Ja, r16 hat nur 8Bit;)

Autor: Mr.Blubb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hups, schwerer fehler...
ich meinte natürlich

ldi r16,0b1000000

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

;-)

Autor: Mr.Blubb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt bei Atmel nicht nur Datasheet sondern auch Befehlssatzbeschreibung. 
Lesen!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mr.Blubb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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!

   ldi r16, 1<<OCIE1A
   out TIMSK, r16

   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)

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.