mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Interrupts priorisieren in C?


Autor: Christoph Söllner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
habe hier im Vergleich mit den 8051 eine Anleitung gefunden, wie man
auch bei den AVRs Interrupts priorisieren kann mit Rücksprungadresse
oder so?
Hat das vielleicht schon mal jemand in C (codeVision oder avrgcc) im-
plementiert?
Weil mein ursprünglicher Plan, einen 8051 zu nehmen schiefgeht, weil
dem sein UART (zumindest bei den Reichelt 5 EUR Teilen) keine 250kbs
hinbekommen, was ich benötigte...
Oder gibts dafür auch eine Alternative (5 EUR, Hersteller egal)

Danke, Christoph

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst beim AT89S52 doch T2 für die Baudrate nehmen, dann gehts.

Mußt natürlich nen entsprechenden Quarz nehmen (8, 16 oder 24MHz).


Echte Prioritäten beim AVR werden selten gemacht, da sehr umständlich.
Man muß in jedem low-Level Interrupt, sämtliche low-level Interrupts
disablen und dann SEI ausführen und vor dem RETI alles wieder zurück.

Oftmals wird daher nur ein SEI gemacht, was sämtliche Interrupts wieder
enabled. Geht aber nur gut, bei Timerinterrupts, wo bis zum nächsten
Interrupt eine definierte Mindestzeit besteht. Bei UART, I2C, extern
level usw. gibts die rote Karte (Stacküberlauf).


Peter

Autor: Wolfgang Horn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, Christoph,

die Priorität der Interrupts ist beim Atmega festgelegt durch die
Rangfolge gemäß Interruptsprungtabelle.

Aber 250 kbps müßten machbar sein, wenn Du einen Atmega168 nimmst, den
du mit 24 MHz taktest.

ciao
Wolfgang Horn

Autor: Christoph Söllner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Du kannst beim AT89S52 doch T2 für die Baudrate nehmen,
> dann gehts. Mußt natürlich nen entsprechenden Quarz nehmen
> (8, 16 oder 24MHz).
Oje, ich seh schon, 8051 ist nichts für mich. Hab grad mal im
DB nachgesehen, und da war die maximale Baud-Rate mit 115k an-
gegeben. Der Satz "T2 nehmen" sagt mir nun nichts, obwohl er
sicher richtig ist...

> die Priorität der Interrupts ist beim Atmega festgelegt durch
> die Rangfolge gemäß Interruptsprungtabelle.
Leider nein, ISR werden abgearbeitet, wie sie gerade kommen.
Weil auch die USART-ISR den INT0 (der oberste!) unterbricht
zur Zeit.

> Aber 250 kbps müßten machbar sein, wenn Du einen Atmega168
> nimmst, den du mit 24 MHz taktest.
250k sind auch jetzt machbar, ATmega16 und 16MHz.

Aber gut. Ich weiß nicht, vllt muß ich dann doch Features
streichen, schnüff :(

Christoph

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
T0, T1, T2 sind die Timer, also einfach mal im DB unter Timer 2
nachsehen, wo der Baudgenerator-Mode beschrieben ist.

115200Baud ist nur die höchste PC-übliche Baudrate aber nicht der
Grenzwert der Hardware.


Peter

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"> die Priorität der Interrupts ist beim Atmega festgelegt durch
> die Rangfolge gemäß Interruptsprungtabelle.
Leider nein, ISR werden abgearbeitet, wie sie gerade kommen.
Weil auch die USART-ISR den INT0 (der oberste!) unterbricht
zur Zeit."


Natürlich hat Wolfgang Recht.
Was Du meinst, sind Interruptlevel.
Interruptprioritäten entscheiden, welcher Interrupt zuerst ausgeführt
wird, wenn sie gleichzeitig eintreffen.

Autor: Christoph Söllner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, point taken. Habt natürlich recht...

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.