Hallo. Ich beschäftige mich zur Zeit mit dem USAT eines AT90CAN. Kann mal jemand folgende Aussage bestätigen oder widerlegen: Bei einer USART Übertragungsrate von 9600bps bleibt ein empfangenges Byte 830µs in UDR0 (9600/8 = 1200; 1/1200 = 830µs). Das bedeutet wenn eine andere Interrupt Service Routine aufgerufen wird, kann diese locker 500µs lang sein ohne das ein Zeichen per UART vrloren geht. Ist das richtig? Kommt mir sehr lang vor...
9600/10 wenn man mit 1 Start und 1 Stopbit und 0 Paritätsbit rechnet. => 1042 µs / Zeichen Ja es ist auf der Zeitskala des µC sau langsam. Es reicht für mehr als 4000 Eintakt-Instruktionen bei 4 MHz. Deshalb ist das UART-Pollingverfahren Verschwendung von Resourcen und UART-Interruptbetrieb sinnvoll.
Stefan "stefb" B. wrote: > Deshalb ist das > UART-Pollingverfahren Verschwendung von Resourcen und > UART-Interruptbetrieb sinnvoll. Das ist natürlich Bullshit, wie alle pauschale Aussagen. Es kommt immer auf die jeweilige Aufgabe an. Z.B. ein Bootloader pollt auf die UART, da er ja nichts anderes zu tun hat, als auf die Daten zu warten, die er flashen soll. Er spart sich dann die ganze Pusherei und Popperei (kleinerer Code). Und in der Regel macht man gerade langsame Sachen lieber im Polling und schnelle Sachen als Interrupt, damit schnelle Sachen nicht beeinflußt werden. Erst recht beim AVR, da der ja keine Interruptprioritäten hat. Peter
Hm... ich dachte Interrupts mit niedrigerer Vektornummer haben beim AVR hoehere Prioritaet? Zitat aus dem Datenblatt: The complete list of Vectors is shown in “Interrupts” on page 46. The list also determines the priority levels of the different interrupts. The lower the address the higher is the priority level. Wobei bei nested Interrupts jeder aktivierte Interrupt den aktuellen unterbrechen kann... also im Endeffekt isses nich weit her mit den Prioritaeten. Die Frage ist nur: Wenn zwei Interrupts fast zeitgleich ausgeloest werden, welcher wird bevorzugt?
@ Michael G. (linuxgeek) >Hm... ich dachte Interrupts mit niedrigerer Vektornummer haben beim AVR >hoehere Prioritaet? Interrupt >Prioritaeten. Die Frage ist nur: Wenn zwei Interrupts fast zeitgleich >ausgeloest werden, welcher wird bevorzugt? Der mit dem niedrigeren Interruptvektor. MfG Falk
Peter Dannegger wrote: > Stefan "stefb" B. wrote: >> Deshalb ist das >> UART-Pollingverfahren Verschwendung von Resourcen und >> UART-Interruptbetrieb sinnvoll. > > Das ist natürlich Bullshit wie alle pauschale Aussagen. Peter, ich bin getroffen von deinem so unfreundlichen Kommentar zu meiner Antwort. Wäre es nicht gegangen, deine Argumente zu bringen, ohne mir natürliche Bullschitterei anzuhängen? Natürlich ist es eine pauschale Aussage. 'tschuldigung, dass ich keine Goldwaage mitgebracht habe und bei meinem Schnellschuss jeden möglichen Aspekt berücksichtigt habe oder die Aussage bis ins Unkenntliche relativiert habe. Spass macht das nicht mehr.
Stefan "stefb" B. wrote: > Peter, ich bin getroffen von deinem so unfreundlichen Kommentar zu > meiner Antwort. O.k., nächstes mal sag ich wieder "Mumpitz". > 'tschuldigung, dass ich keine > Goldwaage mitgebracht habe und bei meinem Schnellschuss jeden möglichen > Aspekt berücksichtigt habe oder die Aussage bis ins Unkenntliche > relativiert habe. Gerade bei den AVRs sollte man mit Interrutps sparsam umgehen. Deshalb fand ich Deine Aussage sehr leichtfertig. Auf die Goldwaage legen wäre was anderes. > Spass macht das nicht mehr. Nicht immer alles so ernst nehmen. Wir wärs mit ner Runde Bullshit Bingo: http://www.hjsv.com/games/bingo/bingo-d.html Peter
@ Peter Dannegger (peda) >Gerade bei den AVRs sollte man mit Interrutps sparsam umgehen. Num mach mal halblang. Du tust ja gerade so, als ob die AVRs schwerstbehindert wären, weil sie keine Interruptprioritäten haben. MfG Falk
Ich möchte jetzt rausfinden wie hoch ich die UART Baudrate stellen kann ohne das ein Zeichen verloren geht. Dazu habe ich den längsten Pfad der ISR mit AVR Studio simuliert. Die Bearbeitung dauert 35,31µs. Das würde bedeutet die Baudrate darf maximal 250kbps betragen. Jetzt habe ich aber was gelesen, das UDR über 2 Puffer verfügt. Bedeutet das, die Baudrate darf theoretisch 750kbps betragen ohne das etwas verloren geht?
@ Marco (Gast) >Bearbeitung dauert 35,31µs. Das würde bedeutet die Baudrate darf maximal >250kbps betragen. Ja, wenn dein Quarz das hergibt. >Jetzt habe ich aber was gelesen, das UDR über 2 Puffer >verfügt. In Empfangsrichtung. > Bedeutet das, die Baudrate darf theoretisch 750kbps betragen >ohne das etwas verloren geht? Nein. Der Puffer kann nur KURZZEITIG Daten aufnehemen, wenn die CPU gerade mit anderen Dingen beschäftigt ist. Im MITTEL aber reichen deine 35,31us nicht, um DAUERHAFT 750kBaud verlustfrei zu empfangen. Interrrupt MFG Falk
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.