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
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
Siehe Datenblatt Kapitel 13 (Seite 12+13) http://www.atmel.com/dyn/resources/prod_documents/doc3569.pdf Gruß, Magnetus
[Ergänzung] Hmm... ich habe auf das Datenblatt des AT89S2051 verwiesen... weiss nicht inwiefern der Controller zum AT89C2051 kompatibel ist... Gruß, Magnetus
Hallo magnetus, danke - aber es geht um AT89"C"2051 nicht um "S" Gruß RABIS
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
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
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!
Klingt so als träfe die Beschreibung im AT89*S*2051 Datenblatt doch zu ;)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.