An meiner p89lv51rd2 - Baisschaltung ist ein CPLD 9572 angeschlossen, der die Adressdekodierung für den 8051 übernimmt. Es ist einiges an externen Bausteien angeschlossen z.B. Ram Speicher. Ich habe auch zwei 8 Bit Ports die als input und output angesteuert werden können. Aber eben über einen externen Adressbreich und nicht über die Port Pins P0/P2 des 8051. Gibt es eine Möglichkeit am 8051 die Ports P0/P2 die für die externe Addressierung nötig sind zu restaurieren ? Für den Motorola HC11 gab es einen zusätzlichen Chip der die Ports zurückbrachte. Die IO's am 8051 sind ja recht einfach, aber wie wären die Bedingungen um dem 8051 den P0/P2 als IO "vorzugaukeln"? Es ist klar das der 8051 beim Zugriff af P2/P0 kein Steuersignal nach außen gibt, aber wenn mann die realen IO - Inputs über das CPLD "weak" auf P0/P2 legt könnte man den realen Wert zurücklesen. Die Unterscheide, die sich ergeben - (es können nur L - Pegel anliegen wo es H - Pegel erwartet wurden - nicht umgekehrt) wären relevant um zwischen In und Out zu Unterscheiden. Dieses Wissen könnte man nutzen um die Richtung am realen IO auf Out - zu stellen und dort ein "L" anzulegen. Ich bin nicht sicher ob ich das vernünftig erklärt habe. Habe ich was übersehen ? Kann das so klappen ? Gruß THaala
P2 wird ja nicht zerstört. P0 wird auf FF gesetzt. Es ist mir allerdings rätselhaft, wie Du P0/P2 bei Benutzung als externer Bus auch noch als IO verwenden willst. Als Input zerstören Sie Dir den Buszugriff und als Output hast Du immer jeden Buszugriff mit drauf. Wenn man IOs am Bus haben will, macht man das memory mapped (74HC541/74HC574). Peter
Hallo Peter, für den externen Zugriff gibt es ja die Signale (ALE, WR, RD). Wenn ein externer Zugriff im Gange ist muß die Mimik natürlich disabelt werden. Aber auch nur zwischen dem 8051 und dem CPLD - nicht am realen IO des CPLD. Der 8051 hat ja feste Clock - Zeiten indem er diese Samples am IO nimmt bzw. setzt. Nur dann müssten die Signale vom realen IO an den 8051 durchgestellt werden. Man müsste also - wenn ALE,RD oder WR aktiv ist - die IO wegschalten. Gleichzeitig wäre man sicher das die P0/P2 nicht gesampelt werden während dieses Vorganges. Meines Wissens nach gibt es keine Restriktion im 8051 die besagt das man die Port - Befehle nicht im Zusammenhang mit externer Beschaltung anwenden darf. Es ergibt nur normalerweise keinen Sinn weil die externe Beschaltung nun mal entweder Bus ist oder IO ist. Mit dem CPLD würde ich die oben genannten Signale auswerten und immer wenn kein Zugiff auf externe Peripherie im Gange ist die Ports bedienen. Nur wenn die Inhalte von P2/P0 in den internen Registern zerstört werden würde bei Zugiff auf den externen Bus ist es natürlich Essig damit. Gruß THaala
THaala schrieb: > Man müsste also - wenn ALE,RD oder WR aktiv ist - die IO wegschalten. > Gleichzeitig wäre man sicher das die P0/P2 nicht gesampelt werden > während dieses Vorganges. Dazu müßte Dein CPLD allerdings hellsehen können. Die Adresse/Daten werden schon aktiv, bevor ALE/RD/WR wechseln. Was auch sinnvoll ist, man möchte ja nicht die falsche Adresse latchen. Peter
Also, ich schlage für den Anfang den X88C75SLIC(=Portexpander für 8051-Syteme) vor. Selbermachen, egal auf weiche Art, dürfte nicht ganz ohne sein, da der 8051 transparente Buszugriffe von Hause aus nicht unterstützt. Der aktuelle Maschinenzustand ist nicht so ohne weiteres ersichtlich, was nur ein Teil des Problems ist. Die Portzugriffe müssen an der richtigen Stelle während des Buszyklus stattfinden, der passende Buszugriff muß gefunden werden usw. Ist schon 'ne Herausforderung. mfg
Möglichkeit #1 Du findest die richtigen Stellen auf dem Die, wo Du Leitungen anschliessen musst. Möglichkeit #2 Du nimmst ein FPGA, der mit einem Adapter in Dein Board passt und schiebst dort einen 8051 hinein, welchen Du entsprechend modifiziert hast. Möglichkeit #3 Du machst ein Macro, eine Funktion, Whatever, die Dir das übersetzt. Möglichkeit #4 (mein Favorit :-) Du schreibst einen 8051 Interpreter für den 8051, der diesen Fall so berücksichtigt. Gruß Jobst
Marko B. schrieb: > Von Intel gibts den 82C55. Den hat sogar Reichelt. Auch den kann er nicht mit P0 / P1 ansprechen ... Gruß Jobst
hallo, >> X88C75SLIC ... bringts glaube ich nicht. Der restauriert diese Ports nicht sondern bietet das was ich auch bereits in meinem CPLD habe. >> 8255... da gilt das Gleiche.. Der Witz wäre ja die Ports wiederzubekommen um die SFR P0/P2 weiterhin normal ansprechen zu können, eben ohne movex und DPTR usw. Klar bei genügend großem FPGA pappt man den 8051 als Softcore rein. So was gibt es - allerdings liegt man da schon bei 30 - 50 Euro um einen FPGA zu bekommen in den der 8051 reinpasst. Das ist zu teuer. Ich habe mittlerweile so viel verstanden: Wenn der 8051 in seinen 6 stufigen Zyklen etwas vom externen Bus will wackelt er mit seinen Pins. Ist das nicht der Fall arbeitet er intern. Wenn es mir gelingt CPLD und 8051 zu synchronisieren kann man die Zyklen, die nur intern ablaufen, die Portpins testen. Der Test könnte so aussehen---- Weak high anlegen und zurücklesen: pin ist H: Der 8051 hat entweder diesen Pin als Eingang geschaltet oder ein H auf dem Ausgang. Egal - der Pin gilt als Eingang, es wird der reale Pin an den 8051 Eingang durchgeschaltet. pin ist L: Der 8051 nutzt den Pin als Ausgang und dieser ist L Dann dieses L durchschalten zum realen Pin - Latch als Ausgang... dies Prüfung muß in einer Stufe seines Zyklus stattfinden in dem der 8051 sicher nicht die Ports evaluiert. Weiß evtl. jemand in welchem der 6 Stufen der 8051 die Port-Logik evaluiert ? Gruß
Was stört Dich denn an der üblichen Methode memory mapped? Du liest und schreibst dann Deine IO-Erweiterung einfach per MOVX. Peter
Naja im Vergleich zu memory mapped gibts schon ein paar Vorteile, z.B. kann man die Pins einzeln setzen. Schneller ist es wohl auch. Aber statt den internen 2 Ports die 3 Ports vom 8255 zu haben ist doch eigentlich nuetzlicher. Das ist ja gerade der Witz daran, wenn man einen externen Bus hat: man kann Peripherie dranhaengen ... z.B. hab ich auf meinem 8051 Board: 256K Flash, bank switched 32K SRAM 82C55 (3x8 bit I/O) 82C54 (Timer/PWM) DS12885 (RTC) MAX158 (8 Kanal ADC) Z.B. waere es kein Problem, 10 82C55 dranzuhaengen und dadurch 240 I/O bits zu haben.
@Peter, Was mich an movx stört ? Ist nicht viel - aber man hat die Freiheit einen controller standalone einzusetzen oder auf einem Entwicklunssystem mit genug Resourcen ohne den Code zu ändern. Natürlich weiß ich auch das es genug Möglichkeiten mit bedingter Kompilierung gibt aber dann ist ja da auch noch das Laufzeitverhalten und und und... Außerdem hab ich im CPLD noch Platz... Gruß
THaala schrieb: > Was mich an movx stört ? > Ist nicht viel - aber man hat die Freiheit einen controller standalone > einzusetzen oder auf einem Entwicklunssystem mit genug Resourcen ohne > den Code zu ändern. Hallo, dafür wäre es am praktischten, ein Derivat wie 80535 einzusetzen, der verbraucht auch 2 Ports für den externen Bus, aber es bleiben noch 4 Ports übrig. Ist zwar auch schon alt, aber der 8051 ist ja noch älter. Und unter den unzähligen 51-Derivaten gibt es sicher noch mehr von der Art. Damit kann man leicht ein eigenes Entwicklungsboard bauen, man muss nur einen Umschalter von Havard- auf von Neumann-Architektur einbauen. Soweit ich mich erinnern kann, ist das eine Diode und ein Widerstand. Dann kann der Prozessor Code im externen Ram ausführen. Gruss Reinhard
Reinhard Kern schrieb: > dafür wäre es am praktischten, ein Derivat wie 80535 einzusetzen, der > verbraucht auch 2 Ports für den externen Bus, aber es bleiben noch 4 > Ports übrig. Man muß aber nicht das Museum ausrauben, sondern kann auch aktuelle Bauteile nehmen. Z.B. der AT89C51ED2-SMSUM hat auch 6 Ports. 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.