Das Linux Kernel Modul cyport.o für die Cypress CY7C63000 - Familie

written by Marcus Maul

Bild des Cypresscontrollers

Die Mikrocontroller der CY7C63000 / CY7C63001 / Cy7C63100 / CY7C63101 - Familie zeichnen sich durch die folgenden Features aus:

Durch seine kompakte Bauweise (SMD, wie auch 20 bzw 24 Pin DIL) ist er als kleiner, kostengünstiger Baustein für Anwendungen im Bereich, der Peripherie (Maus, Joystick, 12 bzw. 16 Bit I/O-Controller, Messen und Regeln) geschaffen.

Zum Betrieb ist neben dem Controller selber nur der Keramik Resonator, sowie ein 1,5 kOhm Widerstand und eine USB-Portbuchse vom Typ A oder B von notwendig. Der Controller selber kann mit dem Programm CYASM programmierbar und kann mit gängigen Programmierern programmiert werden. Hier findet man den Bauplan eines solchen Programmierers (danke an roms!!!) Über die Frima AK-Modul-Bus kann man in Deutschland bereits fertig programmierte Bauteile beziehen. In Frankreich ist dies die Firma Elektor Magazins.

Da es zum dem Portbaustein USBPort der Firma AK-Modul-Bus keine Treiber unter Linux gab, habe ich selber geschrieben.
Als Vorlage diente hierbei der Treiber von Romain Liévin.

Mit dem von mir geschriebenen Linux Kernel Modul ist es möglich, die Portzustände der einzelnen Ports P0.0 - P0.7, sowie P1.0 - P1.3 (CY7C6300X) bzw P1.0-P1.7(CY7C6310X) des USB-Controllers auszulesen und den Sinkstrom des Ports P1.3 einzustellen.

Das Modul cyport.o

Das erstellen des Moduls Zum kompilieren sind die Kernel-Header bzw. Kernel-Quellen des verwendeten Kerles notwendig, sowie root-Rechte.
Man wechselt nach entpacken des Archives (tar -xvzf cyport-XX.tar.gz) in das Verzeichniss modul und ruft dort make und anschließend make install auf.
Sollte make erfolgreich kompiliert haben, kann man das Modul mit insmod ./cyport.o installieren und überprüfen, ob der Portbaustein erkannt wurde.
Nun kann man mit dem Portbaustein arbeiten.

Die API

Um die krüptischen Aufrufe des Treibers zu vereinfachen, habe ich eine API (Advanced Programming Interface) zu diesem Treiber entwickelt.
Die einzelnen Zustände eines Port werden dabei über Bool-Variablen in der structure Port dargestelt. Sie ist im Verzeichniss API zu finden

	struct Port {
		bool P0 :1;
		bool P1 :1;
		bool P2 :1;
		bool P3 :1;
		bool P4 :1;
		bool P5 :1;
		bool P6 :1;
		bool P7 :1;
	};
	

Es ist also notwendig, ein Array dieser Struktur zu erstellen (Beispiel: Port Port1; Port Port2;)

Über die folgenden Funktionen wird dann das Device selber gesteuert:

Ich (Marcus Maul) wünsche allen viel Spaß beim programmieren!!! An dieser Stelle nochmals vielen Dank an den aPc, der mir bei der Programmierung tatkräftig durch Test und Hilfestellungen zur Seite stand, sowie Martin Henne, Burkhard Kainka und Romain Liévin.

Ich selber bin Mitglied des aPc-Logo.

Special Thanks to Sourceforge for hosting this project!!!
SourceForge.net Logo