Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller 2 Interrupts gleichzeitig aufrufen


von Marko (Gast)


Lesenswert?

Hallo Leute,

kennt jemand einen Mikrocontroller, mit dem 2 Interrupts gleichzeitig 
aufgerufen werden können ?

Arbeite mit den PICs und stosse mit denen jetzt an die Grenze.




Gruß
Marko

von Oliver (Gast)


Lesenswert?

Wie soll denn das gehen? Mir ist noch kein MC bekannt, der wirklich 
parallel Code ausführen kann. Alles quasiparallel. Wenn , dann durch 
Software.

Den Interrupts sind Prioritäten zugeordnet. Ist der Interrupt höherer 
Priorität abgearbeitet, wird der niedrigere wartende Interupt 
schließlich auch ausgeführt. Das klappt eigentlich immer, es sei denn, 
Deine Interrupts gleicher Priorität überholen sich selbst. Kann es das 
wirklich sein?

Grüße
Oliver

von HDW (Gast)


Lesenswert?

ich glaube, der pic hat nur einen teil, der durch interupt aufgerufen 
werden kann.

das ist der, der ab Adresse 4 im speicher steht.
der kann zwar durch viele arten ausgelöst werden, aber wohl nur ein teil 
kann aufgerufen werden.

du kannst aber wenn du den interupt auslöst, z.b. am portb, gleichzeitig 
ein flag setzen, das dann in der interupt-routine abgefragt wird. ist 
das flag H, so wird der interupt-teil ausgeführt, der mit portb in 
zusammenhang steht. ist es L, irgenwas anderes.

von Oliver (Gast)


Lesenswert?

@HDW
Oh ha! Das grenzt an Selbstkasteiung! Gibt es wirklich noch einen Grund, 
PICs zu benutzen? Der einzige PIC, der mir noch ins Haus kommt, ist 
namengleiche Wurst. Die beste seiner Art, wie ich behaupten möchte.

von Marko (Gast)


Lesenswert?

Ich danke allen für die schnellen Antworten.

Im Nachhinein ist mir eingefallen , dass das gar nicht funktionieren 
kann.

Muss wohl das Programm umstrukturien, dass das Timing der Interrupts 
stimmt.

Danke

Marko

von Peter D. (peda)


Lesenswert?

In der Praxis muß man immer damit rechnen, daß mehrere Interruptquellen 
gleichzeitig ansprechen.


Da gibt es mehrere Lösungen:


1.
Alle Interrupthandler sind so kurz, daß die Verzögerung durch andere 
Interrupthandler nicht stört.


2.
Lange dauernde Interrupts bekommen eine niedrige Priorität, d.h. sie 
können durch höher priorisierte unterbrochen werden.
Das geht jedoch nicht bei PIC / AVR sondern z.B. beim 8051.


3.
Es wird in Software eine unterschiedliche Interruptpriorität realisiert.
Dazu müssen jedoch alle Interruptquellen eigene Interruptfreigabebits 
und Interrupt-Pending-Bits und möglichst auch eigene Interruptvektoren 
haben.

Daazu müssen in sämtlichen niedrig priorisierten Interrupts alle niedrig 
priorisierten Interrupts gesperrt werden und der globale Interrupt 
wieder freigegeben werden.

Ab dann sind nur noch die höher priorisierten Interrupts freigegeben und 
werden somit vorrangig behandelt.
Aber durch die eigenen Interrupt-Pending-Bits geht trotzdem kein niedrig 
priorisierter Interupt verloren.

Beim Verlassen jedes niedrig priorisierten Interrupts muß das Ganze 
natürlich wieder zurückgestellt werden.

Eine 2. Priorität in Software stellt also einen nicht unerheblichen 
Kodeaufwand dar.


Da die AVRs aber relativ fix sind, habe ich bisher immer Lösung 1 
verwendet.
Floating Point Berechnungen oder lange Wartezeiten (>100µs) macht man ja 
auch niemals innerhalb eines Interupts.



Peter

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
Noch kein Account? Hier anmelden.