Gast
#454686
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.