Forum: Mikrocontroller und Digitale Elektronik 8051 Interruptprioritaet


von RABIS (Gast)


Lesenswert?

Hallo,

also ich assembliere gern, vorzugsweise AT89C2051/AT89C4051.
So, aber wo beschreibt Atmel das Interruptprioritaetenregister
IP (0B8H)?
Schon doof, wenn serieller Interrupt und Timer 0 Interrupt sich
in die Quere kommen ...
Meine Infos aus 80C515-Zeiten helfen da nicht weiter...
Weiss jemand Rat ?

Dank fuer Rat & Tat
RABIS

von ARM-Fan (Gast)


Lesenswert?

Ich bin mir nicht 100% sicher, aber...

ich würd mal sagen, das Register is nurn Platzhalter
und die Prioritäten sind fest eingestellt.

http://www.atmel.com/dyn/resources/prod_documents/doc4316.pdf

--> Seite 112 unten

und wenn ich mir das anschaue:

http://www.atmel.com/dyn/resources/prod_documents/doc3573.pdf

scheint sich der Verdacht zu bestätigen, wenn man sieht, dass
"Four-level Interrupt Priority" als new feature bei den
AT89LP2052/LP4052 aufgeführt wird.

Frank

von Magnus Müller (Gast)


Lesenswert?

Siehe Datenblatt Kapitel 13 (Seite 12+13)

http://www.atmel.com/dyn/resources/prod_documents/doc3569.pdf

Gruß,
Magnetus

von Magnus Müller (Gast)


Lesenswert?

[Ergänzung]

Hmm... ich habe auf das Datenblatt des AT89S2051 verwiesen... weiss 
nicht inwiefern der Controller zum AT89C2051 kompatibel ist...

Gruß,
Magnetus

von RABIS (Gast)


Lesenswert?

Hallo magnetus,

danke - aber es geht um AT89"C"2051 nicht um "S"

Gruß
RABIS

von RABIS (Gast)


Lesenswert?

Hallo Frank,

http://www.atmel.com/dyn/resources/prod_documents/doc3573.pdf

gibt auf Seite 4 immerhin den Hinweis:

-- -- -- PS PT1 PX1 PT0 PX0

PS ist meines Wissens serielle Schnittstelle Prior 1 ...
Das IP Register ist in obigem Dok auch nicht als neu
gekennzeichnet

Guten Morgen!
RABIS

von RABIS (Gast)


Lesenswert?

Hallo Frank,

schon richtig mit Seite 112 ...
Blöd nur, dass danach Timer 0 Interrupt
höher angesiedelt ist als der serielle Interrupt.
Ich glaub' das ist noch nicht alles...

So, jetzt ruft das Daunenkissen!
Gruß
RABIS

von ARM-Fan (Gast)


Lesenswert?

Hmm, sieht doch etwas anders aus, als ich dachte.
Ich mache echt zuviel mit Derivaten, als dass ich den guten alten
8051er Kern noch im Kopf hätte... ;-)

Der hat nämlich 2 Interrupt-Prioritätslevel: Low und High.
Sprich, Bit in IP gesetzt oder gelöscht.

Wobei ich auf 8052.com noch folgendes dazu gefunden habe:

When considering interrupt priorities, the following rules apply:

* Nothing can interrupt a high-priority interrupt
  --not even another high priority interrupt.

* A high-priority interrupt may interrupt a low-priority interrupt.

* A low-priority interrupt may only occur if no other interrupt
  is already executing.

* If two interrupts occur at the same time, the interrupt with
  higher priority will execute first. If both interrupts are of the same
  priority the interrupt which is serviced first by polling sequence 
will
  be executed first.

Also setz deinen Seriellen Interrupt auf High, den Rest auf Low
und der Timer ärgert ihn nicht mehr und läßt keine Zeichen mehr
verschlucken.

Ich denke, damit is das Thema geklärt und ich hab auch wieder was
dazu gelernt... ;-)

Gute N8!

von Magnus Müller (Gast)


Lesenswert?

Klingt so als träfe die Beschreibung im AT89*S*2051 Datenblatt doch zu 
;)

von B.Spitzer (Gast)


Lesenswert?

Moin,
die Interrupt-Priorisierung kann manchmal ganz schön nerven...
Folgendes hätte ich noch dazuzugeben: Standard bei allen 
8051-Derivaten sind die Interrupts Ext0, Timer0, Ext1, Timer1 und 
Seriell. Dazu gibt es schon immer ein Propritäten-Register IP und ein 
Freigaberegister IE.
Der Ablauf ist wie vorher beschrieben, bei gleicher Priorität zuerst der 
Interrupt, der in der Liste vornedran steht (Polling Sequence), bei 
verschiedenen Prioritäten die höhere zuerst.

Bei den Derivate sind jetzt noch weitere Interrupt-Quellen und 
Interrupt-Prioritäten hinzugekommen. Wenn mehr als 7 Quellen vorhanden 
sind, gibt es ein weiteres Freigaberegister IE1, das bisherige Register 
IE heisst dann meist IE0 (ist aber auch unter IE ansprechbar - 
Kompatibilität des Codes!). Insgesamt sind in der 8051-Architektur bis 
zu 31 Interruptquellen möglich - entsprechend 4 IE-Registern. Das 32. 
Bit ist die globale Freigabe IE.7 = EA.
Bei 4 Prioritätsleveln wird aus dem IP-Register das IPL und es kommte in 
IPH-Register dazu. Die Priorität ergibt sich dann zu:
  IPH  IPL  Level
   0    0     0   Wie bei 2 Prioritäten
   0    1     1           "
   1    0     2
   1    1     3

Wenn das Derivat mehr als 7 Interrupt-Quellen hat gibt es zu jedem IE0/1 
Freigaberegister auch 2 Prioritätenregister IPL0/IPH0 und IPL1/IPH1. Die 
niedrigern Register sind immer identisch mit den Standard-Registern. Es 
gibt also Folgende gleiche Registernamen (mal in der Include-Datei 
vergleichen!)
   Standard (bis 7 Quellen)        bis 15 Quellen
   2 Prio-Level    4 Prio-Level    2 Prio-Level   4 Prio-Level 
SFR-Adresse
       IE              IE             IE0             IE0         A8h *
                                      IE1             IE1         B1h !
       IP              IPL            IP0             IPL0        B8h *
                       IPH                            IPH0        B7h !
                                      IP1             IPL1        B2h !
                                                      IPH1        B3h !

* Standard-Adresse bei fast allen 8051 (gefundene Aussnahme 80515/535)
! Die Adressen sind von einem AT89C51. Bei anderen Controllern sitzen 
die Register häufig woanders! Beim T89C51CC01 ist IE1 z.B. auf E8h und 
IPL1/IPHl auf F8h/F7h. Also immer die richtige Include-Datei verwenden.

tschuessle
Bernhard

von Peter D. (peda)


Lesenswert?

Standardmäßig haben die 8051-er 2 Prioritäten, Neuentwicklungen haben 
meistens 4.

Ich hab auch schonmal in einem größeren Projekt alle 4 benutzen müssen.

Im Unterschied zur Polling-Sequenz erlauben die Prioritäten ein echtes 
Unterbrechen eines gerade laufenden Interrupts (nested Interrupts) ohne 
die Gefahr sich selbst zu unterbrechen (kein Stackoverflow).


Mit noch mehr Prioritäten kenne ich dann noch den ARM7 von ST (17 
Prioritäten), ist aber sehr kompliziert zu programmieren (35 Seiten 
Manual).


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.