Interrupt prioritäten änder bei atmega32

Gast #315106
Lesenswert?
• ▲
▼
Hallo,
kann man die Interrupt prioritäten ändern beim atmega32?
Ich möchte gerne den komperator interrupt auf stelle 2 legen
ist das möglich?

Damit mache ich nämlich eine Akkuumschaltung.
Und wenn der Atmega noch im timer0 oder 1 int ist dauert es zu lange um
in den komperator int zu kommen.
Gast #315108
Lesenswert?
• ▲
▼
>> Geht bei den meisten AVR-Interrupts, nämlich allen,
>> deren Flag implizit mit dem Aufruf der Interrupt-
>> Routine zurückgesetzt wird.

.. und bei den anderen gehts auch wenn man das Flag per SW
zurücksetzt.
Generell sollte man aber schon recht genau wissen was man dabei tut
sonst endets in einem Aufruf- und Rücksprungchaos.

grüße leo9
Gast #315109
Lesenswert?
• ▲
▼
Ich habe aller interrupts als SIGNAL realisiert.
Geht das dann auch?
Aber wenn ich in der Timer ISR bin und in der ISR interrupts wieder
zulasse und mein komperator interrup löst aus.
Wird dann die timer ISR unterbrochen?
Weil die ist doch von höherer priorität?

Weil ich hätte es gerne so. Egal was gerade läuft.
Wenn der komperator auslöst soll sofort auf akku umgeschaltet werden
Gast #315110
Lesenswert?
• ▲
▼
"auch wenn man das Flag per SW zurücksetzt."

Bei manchen Komponenten, wie I2C/USI, kann das etwas haarig sein - den
Interrupt ausschalten ist ok, aber das Flag zurücksetzen löst manchmal
eine Aktion aus.

"Ich habe aller interrupts als SIGNAL realisiert."

Ist ok, kannst in der Routine ja das Interrupt-Flag setzen.

"Weil die ist doch von höherer priorität?"

Nein, es gibt bei AVR keine echten Prioritäten - die im Handbuch
genannten "Prioritäten" beziehen sich nur auf die Entscheidung,
welcher Vektor verwendet wird, wenn gleichzeitig mehrere anstehen.
Jeder Interrupt kann jeden unterbrechen, wenn man ihm das erlaubt.
Folglich muss man damit vorsichtig umgehen und braucht genug Platz für
den Stack.

Eine andere Frage ist übrigens, ob dein Grundansatz sinnvoll ist. Es
hat hier schon Leute gegeben, die in der Interrupt-Routine eine ewig
lange Warteschleife gebaut haben. Generell gilt, dass in
Interrupt-Routinen nur einfache schnelle Aktivitäten reingehören. Was
länger dauert, gehört ins Hauptprogramm, der Interrupt löst das dann
per Flag nur aus.
Gast #315111
Lesenswert?
• ▲
▼
"soll sofort auf akku umgeschaltet werden"

Sorg in der Auslegung der Stromversorgung und der Messschaltung dafür,
dass der Controller das schon ein paar Millisekunden vor Ultimo merkt -
also nicht die 5V messen, sondern die Spannung vor dem Regler, oder ggf.
auch die Netzspannung. Dann langt es bei jedem auch nur halbwegs
vernünftig arbeiteten Interrupt-System auch ohne verschachtelte
Interrupts.

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.