www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interupt prioritäten beim AVR?


Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ist es möglich bei einem AVR einen Timer Interrupt von einem anderen 
Interrupt unterbrechen zulassen?

Oder wie kann ich in C den Timer Int. beenden und die Funktion weiter 
bearbeiten lassen!

Noch zur Info:
Ich habe 3 schnelle Interrupts laufen (SIO -> 25KHz  &  Timer -> 40KHz).
Nun muss ich zwischen dem Hauptprogramm und den Interrupts noch einen 
Timer (3,3KHz) hängen.
Diese neue Timer soll das Hauptprogramm unterbrechen und selber von den 
anderen Interrupts unterbrochen werden können.

Ein RTOS geht nicht!
Grüsse, Peter


Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ peter

>Ist es möglich bei einem AVR einen Timer Interrupt von einem anderen
>Interrupt unterbrechen zulassen?

Ja. Dazu musst du in den Timerinterrupt mittels SEI die Interrupts 
wieder freigeben. In C könnte das ein wenig kniffliger werden.

>Ein RTOS geht nicht!

Brauchst du auch nicht.

MFG
Falk



Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SEI reicht?

So, das habe ich jetzt getestet, erstmal sieht das gut aus.
Der neue Interrupt wird wie gewünscht durch die anderen unterbrochen.

Was ist mit dem "RETI"  am Ende der neuen Interrupt Funktion?
Stört das oder brauche ich den Befehl?

VG, Peter

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im gcc ist genau das der Unterschied zwischen einer ISR mittels 
SIGNAL(signame) oder INTERRUPT(signame). Bei letzterem wird im Prolog 
der Funktion der Interrupt wieder "enabled", was "nested interrupts" 
ermöglicht / zur Folge hat.
Achtung: Es gibt in den mir geläufige 8Bittern keine Prioritäten, es 
kann also jeder Interrupt innerhalb dieser Routine zuschlagen. Dein Code 
muß das vertragen können.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg:
SIGNAL und INTERRUPT sind veraltet! Sie werden zwar aktuell noch 
unterstützt, sollten aber nicht mehr verwendet werden.
ISR(XXX_vect)
{
   //Anweisungen
}
erzeugt eine herkömmliche, nicht unterbrechbare ISR und
void XXX_vect(void) __attribute__((interrupt));
void XXX_vect(void) 
{
  //Anweisungen
}
kann für "nested Interrupts" verwendet werden.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jörg

>Achtung: Es gibt in den mir geläufige 8Bittern keine Prioritäten, es

Lass das mal nicht den Peter hören . . . ;-)

>kann also jeder Interrupt innerhalb dieser Routine zuschlagen. Dein Code
>muß das vertragen können.

In einer Routine ja, in einem Interrupt nicht unbedingt.

MFG
Falk


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Falk
Bei einigen 8051 Typen gibt es Prioritäten!

Schlagt euch nicht was beim GCC gemacht wird, das hilft meinem ICC eh 
nicht weiter.
Werde mir das Handbuch gleich ansehen, vielleicht gibt es hierzu eine 
Information, die ich nun meinem Problem zuordnen kann.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@johnny.m:
Veraltet, aha, warum? Wieder was gelernt.

Statt in einem konkreten Beispiel
SIGNAL(SIG_OUTPUT_COMPARE1B)
{
   // mein Code
}
schreibe ich nun also
ISR(SIG_OUTPUT_COMPARE1B)
{
   // mein Code
}
Wo ist da der substanzielle Unterschied?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim ICC Compiler gibt es anscheinend diese Unterscheidung nicht.

Ich versuche es nun mit dem einfachen ein bau von "SEI" und hoffe das es 
nicht knallt.
Wenn jemand noch eine Idee hat nur raus damit. Bin für fast alles offen.

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.