www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 Interruptprioritaet


Autor: RABIS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/...

--> Seite 112 unten

und wenn ich mir das anschaue:

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

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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Datenblatt Kapitel 13 (Seite 12+13)

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

Gruß,
Magnetus

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[Ergänzung]

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

Gruß,
Magnetus

Autor: RABIS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo magnetus,

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

Gruß
RABIS

Autor: RABIS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank,

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

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

Autor: RABIS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Magnus Müller (Gast)
Datum:

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

Autor: B.Spitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.