Hallo, ich habe ein kleines Programm gechrieben, in dem ich zwei Interrupt(senden und empfangen über UART) aktiviert habe.Jetzt will ich dass das Empfang eine höhe Priorität hat,dh wenn gleichzeitig Senden bzw Empfangenaktion sich treffen, soll zuesrt die Empfangenaktion gearbeitet. thomas
Möglicherweise solltest du verraten welchen Controller du verwendet hast...
Du mußt in das IPRIR5-Register den Wert 9 schreiben. Dann klappt das!
nein, nein das war bei der letzten Revision noch so - jetzt muss das GRTC.8 Bit getoglled werden!! SCNR
Oh, das ist schwierig, geht nur in Basic. Kann ganz elegant mit 4 mal goto geloest werden.
hallo zusammen bitte konnt ihr mehr Erklärungen für die Antwörte geben. Danke
Das waren alles sehr kreative Aufforderungen, den Typ zu enthüllen. AVRs haben keine wirklich priorisierten Interrupts. Wenn es sehr eilig ist, kann man bei weniger wichtigen Interrupts im Handler die Interrupts wieder freigeben, wenn es sich um welche handelt deren Ursache mit Ansprung des Handler bereits gelöscht ist (was bei UART Interrupts nicht der Fall ist). Geht natürlich zu Lasten des Stacks, und wenn sehr viele gleichzeitig eintreffen kann es interessant werden.
> bitte konnt ihr mehr Erklärungen für die Antwörte geben. Auf unüberlegt hingespuckte Fragen gibt es nunmal rotzige Antworten. Sie sollen Dir sagen, dass Du Deine Frage schlecht formuliert hast und Dich dazu erziehen, es beim nächsten mal besser zu machen. Den AT90CAN128 kenne ich mangels Interesse an CAN nicht, ich vermute aber, das ist ein Mega128 mit CAN-Erweiterung, also ein AVR. AVRs haben aber keine echte Interrupt-Priorität, d.h. das Unterbrechen einer laufenden ISR durch einen anderen (höher priorisierten) Interrupt ist nicht vorgesehen. Es gibt zwar Möglichkeiten, in der ISR weitere Interrupts zu erlauben, aber dazu muss man schon sehr genau wissen, was man tut. Ich gehe deshalb nicht darauf ein. Es wird Dir wohl nichts Anderes übrig bleiben, als Deine ISRs so kurz wie möglich zu halten (Daten sichern und per Merker beim Hauptprogramm anmelden) und die Verarbeitung der Daten in der Mainloop zu erledigen. Da es Dir vorrangig um RX und TX geht, solltest Du Ringbuffer dafür einrichten. Das schafft die Voraussetzung, die ISRs kurz halten zu können und beschleunigt die Datentransfer-Zugriffe der Mainloop (bzw. derer Routinen) sehr. KH
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.