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
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
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
> 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
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
"> 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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.