An einen AVR Microcontroller soll eine Porterweiterung mit der USI Schnittstelle angeschlossen werden. Wie schon öfter beschrieben, können hierfür externe Schieberegister (74LS165 /74LS595) benutzt werden. In der hier vorgeschlagenen Lösung wird aber ein einfacher programmierbarer CPLD Baustein verwendet, der mit der XILINX Entwicklungsumgebung als SPI Slave programmiert wird. Der xc9572xl ist kostengünstig zB. bei Reichelt erhältlich und wird mit den Funktionen beider Schieberegister programmiert. Für die Hardwarebeschreibung des CPLD Bausteins wird eine Kombination aus VHDL und Schaltplaneingabe benutzt. Die SPI Funktion wird nicht in VHDL modelliert, sondern als Schaltplanmodul eingebunden. 8 Bit Ausgabe und 8 Bit Eingabe können in einen SPI Zyklus übertragen werden. Dies hat den Vorteil das nur wenig Resourcen im Baustein benötigt werden, mehr als drei Viertel stehen für weitere Logikfunktionen, die dann auf VHDL Ebene modelliert werden können, zur Verfügung. Ein externer Takt wird in dem vorliegenden Entwurf für den CPLD nicht benötigt, da das Timing über SCLK des SPI realisiert wird. In dem .zip Archiv sind enthalten: C Programm (CodevisionAVR) mit eingebundener Assemblerroutine zur Datenübertragung über die USI Schnittstelle eines ATtiny2313 als SPI Master, Schaltplan des SPI Slave und VHDL Top Level Modul für XILINX Entwicklungsumgebung. UCF Datei zur CPLD Portdefinition, JED Datei zum Download mit Impact. Schaltbild der Verbindung AVR - CPLD. Die Kommunikation wurde getestet, ein 8 Bit Wert vom xc9572 wird über SPI zum ATtiny übertragen und anschließend wieder über SPI zum xc9572xl zurückgeschrieben und dort ausgegeben. Mit einem Takt von 8 Mhz für den Atmel ergab sich eine SPI Clockfrequenz von ca 1 Mhz.
Ja, sowas ähnliches hatte ich auch mal mitm ATV750 (20 Macrozellen) gemacht (siehe Anhang). Ist ja nur ein Schieberegister mit nachgeschaltetem Latch. Das sind dann 12 Codezeilen in CUPL, Schaltplaneingabe hätte zu lange gedauert. Ich hab auch noch ein Fast-Reset mit drin, wenn STB und CLK gleichzeitig 1 sind, werden die Ausgangsregister sofort rückgesetzt. Mit STB werden die Ausgangsregister gesetzt und das Schieberegister auf parallel Laden umgeschaltet. Der XC9572 hat ja viel mehr Macrozellen, müßte für mindestens 35 Eingänge und 35 Ausgänge reichen. Peter
Lieber Peter, ich bin immer wieder beeindruckt über die sehr kompakten Entwürfe von Ihnen. (zb. rc5 dekoder). Meine Hochachtung. Axel
kann man damit auch einen bidirektionalen portexpander aufbauen (also jeder pin umschaltbar zwischen in und output) oder habe ich da was falsch verstanden? ich brauche sowas um per cpld einen flash zu beschreiben und aus zu lesen der da dran hängt
Im vorliegenden Konzept sind jeweils 8 getrennte Inputs und Outputs verfügbar. Bidirektionalität von I/O Pins und weitere Ansteuerlogik kann dann aber zusätzlich im Toplevel VHDL Modul modelliert werden. Axel
@ Lupin Ja, das geht, man braucht aber für jedes Pin zwei Bit, eins für die Richtung und eins für die Daten. Ds gibts aber auch schon fertig als IC, z.B. 74HC299. MFG Falk
Falk wrote: > Ja, das geht, man braucht aber für jedes Pin zwei Bit, eins für die > Richtung und eins für die Daten. Ds gibts aber auch schon fertig als IC, > z.B. 74HC299. Nö, der 74HC299 hat nur ein gemeinsames /OE für alle. Aber für nen Datenbus reicht das ja. Die CPLD-Ausgänge haben auch alle nen OE-Term. 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.