Hallo,
ich habe eine Schaltung mit einem µC der einen AD-Bus bereitstellt:
AD0-AD7, /RD, /WR und ALE (AddressLatchEnable). Mit diesen Bus wird ein
CPLD angesteuert in welchem ein Addresslatch, Adressdekoder, D-Flipflops
(für die Ausgänge) und Buffer (für die Eingänge) implementiert sind. Nun
soll der µC durch einen neuen ohne AD Bus ersetzt werden, welcher dafür
ein SPI hat. Auf jeden Fall wird das irgendwie auf Schieberegister
hinauslaufen, aber wie am besten im Detail macht man das am günstigsten
? Neben DO, DI, CLK und /CS eine weitere Leitung die Adress- oder
Datenwort angibt ? Adresswort immer als erstes übertragen ? Und wie
könnte man am günstigsten auch das Lesen von IOs über das SPI
bewerkstelligen ?
Vielen Dank schon mal für Vorschläge !
Stefan
SPI ist ein serieller Bus. Durch DI kommen die Daten zum Master (µC) und
mit DO kannst du zum Device schicken. Mit \CS wählst du das Slave. Das
ist wie wenn du einen Adressvergleicher hast, der bei entsprechender
Adresse eine 1 bzw invertiert eine 0 ausgibt. CLK ist für den Takt
zuständig.
Da es seriell eingelesen wird, brauchst du nur eine CS, DI und CLK
Leitung - bidirektional DO. Wobei DI und DO gleichzeitig im betrieb
sind. Das passiert parallel.
Schau dir am besten den Wikipediaarikel zu SPI an.
Hallo Benjamin,
Danke für Deine Antwort, die Funktion der SPI ist mir sehr bekannt, habe
selbige schon sehr oft verwendet. Meine Frage bezog sich mehr auf die
Logik im CPLD um die ganzen IOs am CPLD, die bisher in altbekannter
Manier über den Daten-/Adressbus gelesen und geschrieben wurden,
ansteuern zu können.
Stefan
Du willst also den Rest der Schaltung beibehalten, und den AD-Bus über
ein SPI-Interface nachbilden?
An welcher Stelle soll dein SPI-Interface eingreifen?
Welche Komponenten hängen ausser den angesprochenen EA noch am AD-Bus?
Wenns nur EA sein soll, dann würde ich einen SPI-Slave in einem CPLD
verwenden. Damit hast du ruckzuck 32 Ein- und 32 Ausgänge.
BTW:
Bitte schreib statt
> übertragen ? Und
doch lieber
> übertragen? Und
Bei Punkten machst du das doch auch.
Hallo,
@Lothar
>Du willst also den Rest der Schaltung beibehalten, und den AD-Bus über>ein SPI-Interface nachbilden?
Richtig, der neue Controller hat keinen AD Bus mehr sondern ein HW SPI.
>An welcher Stelle soll dein SPI-Interface eingreifen?
Alt: µC (AD0-AD7, /RD, /RW, /CS, ALE) -> CPLD -> Peripherie
Neu: µC (SDI, SDO, CS, SCK) -> CPLD -> Peripherie
>Welche Komponenten hängen ausser den angesprochenen EA noch am AD-Bus?
- Ein Standard-LCD (auf 2 Adressen, die Logikumsetzung auf E, RW, RS des
LCDs ist im CPLD mit ein paar Logikgattern bewerkstelligt), auf beiden
Adressen (Command, Data) kann so einfach mit Portzugriffen geschrieben /
gelesen werden
- Ein ULN der ein paar Relais schaltet
- Ein paar Optokoppler als Eingänge (ULN und OKs sind derzeit auf der
gleichen Portadresse)
- Eine Matrixtastatur; Eine Adresse auf der schreibend die Zeile gesetzt
wird und lesend die Spalten ausgelesen werden
>SPI-Slave in einem CPLD verwenden.
Ja, jetzt kommen wir denke ich zum Knackpunkt; wie macht man das?
Ausschließlich für Ausgänge würde ich das mit Schieberegistern
vielleicht noch hinbekommen (z.B. 64 bit einlesen, wenn /CS abfällt
alles auf die Ausgänge latchen), aber auch noch lesend?
>Bei Punkten machst du das doch auch.
Hast recht, ich werde es versuchen.
@Peter
>Schau Dir mal den 74HC299 an, der kann beide Richtungen.>Die /RD, /WR, ALE mußt Du aber über Portpins erzeugen.
Habe mir das IC mal angeschaut. /RD /WR ALE dann per Hand erzeugen zu
müssen ist zwar nicht sehr "kompakt", da das SPI auch blockweise
arbeiten kann, könnte aber andererseits den Aufwand im CPLD verringern
(ist ein XC9572, da passt nicht wahnsinnig viel rein).
Stefan
> ist ein XC9572, da passt nicht wahnsinnig viel rein
Das kommt darauf an, was man daraus macht ;-)
> Ja, jetzt kommen wir denke ich zum Knackpunkt; wie macht man das?
Für SPI-EA im CPLD sieh da mal nach:
http://www.lothar-miller.de/s9y/categories/26-SPI-Slave> - Ein ULN der ein paar Relais schaltet> - Ein paar Optokoppler als Eingänge> - Eine Matrixtastatur;
Das sind jeweils ordinäre EA, das ist einfach...
Für das Display wirds etwas aufwendiger, wenn du es auch zurücklesen
willst.
Wie wäre es, wenn du ein SPI-Display anschließt?
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.