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
Inden man ein Schiebregister verwendet. kann man seriell auf parallel wandeln, oder ungekehrt.
Ja, Schieberegister. 8 bit reinlesen und dann als paralleles Wort verwenden.
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.
Schau Dir mal den 74HC299 an, der kann beide Richtungen. Die /RD, /WR, ALE mußt Du aber über Portpins erzeugen. Peter
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?
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.