I2C.C2 V1.31 - Hilfe


Beschreibung

Einfügen als System-Modul

Funktionen:

init
Capture
start
cstart
stop
cstop
write
read
readlast
send
receive
receiveRS


Beschreibung   Nach oben

Das Modul i2c.c2 erlaubt den einfachen Zugriff auf den I²C-Bus der C-Control II.
Ab Version 1.2 ist ein eigenes Capture für den I²C-Bus Implementiert, welches
ein bereits vorhandenes und von den I²C-Bus-Routinen benutztes Status-Flag
benützt, um dieses Capture zu ermöglichen. Dieses Flag im internen RAM
an Adresse 0xFD00.5 war anscheinend ursprünglich für dieses Aufgabe gedacht.
Es wird bei einem i2c.start() gelöscht und bei einem i2c.stop() wieder gesetzt.
Abgefragt konnte dieses Flag bisher nur mit der Funktion i2c.ready() werden
Ab Version 1.2 wird dieses Flag gezielt für ein eigenes Capture eingesetzt.
Hier für gibt es die neuen Funktione i2c.Capture() und i2c.cstart().
Dieses Capture wird mit dem Aufruf von i2c.stop() automatisch wieder gelöst.

Einfügen als System-Modul   Nach oben

Die Datei i2c.c2 in das Verzeichnis .\CControl2\Lib über die alte Version
des Moduls kopieren.
Außerdem muß bei Betriebssystem-Versionen vor OSOPT V3.0
die Datei capture.hex mit den nötigen Systemroutinen für die Funktion Capture()
mit dem Downloadtool in die C-Control II geladen werden.
Der Systemtreiber capture.hex belegt den Adressbereich 0xD100 bis 0xD199
in Segment 3 des Flash. (154 Byte)
Dieser Systemtreiber enthält außerdem die nötigen Systemroutinen für
Modul cap.c2, welches bis zu 16 weitere, verschachtelbare, Captures erhält.
Ab OSOPT V3.0 wird capture.hex nichtmehr benötigt, da diese Routinen
bereits in OSOPT_V3.0 implementiert sind.
In i2c.c2 gibt es zwei Sätze von Einsprungadressen. Einmal für OSOPT V3.0 und
einmal für capture.hex . Die nicht benötigten Einsprungadressen werden einfach auskommentiert.


Funktionen:

Initialisierung   Nach oben

    function init()

Die Funktion Init initialisiert den I²C-Bus. Diese Funktion muß in der Regel
nicht benutzt werden, da der I²C-Bus bei jedem Reset während des
Systemstarts bereits initialisiert wird.

I²C-Capture   Nach oben

    function Capture() returns int

Mit der Funktion Capture() wird das Capture-Flag wird das I²C-Capture gesetzt und
anschließend TRUE (-1) zurückgegeben. Ist das Flag bereits gesetzt worden, gibt die
Funktion FALSE (0) zurück. Die Funktion sollte zusammen mit wait verwendet werden:

wait i2c.Capture ();

Hier wird solange gewartet, bis das Flag von der Funktion gesetzt worden konnte.
Das Capture wird zusammen mit dem Aufruf der Funktion stop() wieder zurückgesetzt.

Start der Übertragung   Nach oben

    function start( byte device) returns int

Senden der Startbedingung und anschließendes senden der Geräteadresse device .
Das Ergebnis der Funktion start ist TRUE (-1), wenn das angesprochene IC bereit ist,
andernfalls FALSE (0).

device Geräteadresse des jewiligen I²C-Bus-Bausteins

 

Start mit Capture   Nach oben

    function cstart( byte device) returns int

Senden der Startbedingung und anschließendes senden der Geräteadresse device .
Das Ergebnis der Funktion start ist TRUE (-1), wenn das angesprochene IC bereit ist,
andernfalls FALSE (0).
Die Funktion wartet solange, bis der I²C-Bus frei ist, und setzt vor dem Sendebeginn
das Capture-Flag. Dieses wird durch einen Aufruf von stop() wieder zurückgesetzt.

device Geräteadresse des jewiligen I²C-Bus-Bausteins

Wichtig bei Repeated-Start:
Hier darf nur die erste Startbedingung gecaptured sein, da sich sonst die Funktion
selbst blockiert:

i2c.cstart (device_write_address); // I²C-Start mit Capture
i2c.write (command);
...
i2c.start (device_read_address);
// I²C-Start ohne Capture
data_0 = i2c.read ();
...
data_n = i2c.readlast ();
i2c.stop ();
// I²C-Stop und lösen des Captures

Senden der Stopbedingung   Nach oben

    function stop()

Senden der Stopbedingung, um die Datenübertragung auf dem I²C-Bus abzuschließen.
Mit stop() wird gleichzeitig das I²C-Capture wieder gelöst.

Senden der Stopbedingung   Nach oben

    function cstop()

Senden der Stopbedingung, um die Datenübertragung auf dem I²C-Bus abzuschließen.
Mit cstop() wird das I²C-Capture nicht gelöst.
Dies ist z.B. Sinnvoll, wenn von einem Baustein gelesen und daraufhin wieder geschrieben
werden soll und kein anderer Thread dazwischen auf den I²C-Bus zugreifen soll.

Senden eines Bytes   Nach oben

    function write(byte value) returns int

Die Funktion write sendet ein Byte.
Das Ergebnis der Funktion ist TRUE (-1), wenn das angesprochene IC mit einem Acknowledge
geantwortet hat, andernfalls FALSE (0).

value Daten-Byte

 

Lesen eines Bytes mit Acknowledge   Nach oben

    function read() returns int

Die Funktion read ließt ein Byte und antwortet mit einem Acknowledge-Signal.
Das gelesene Byte wird zurückgegeben.

 

Lesen eines Bytes ohne Acknowledge   Nach oben

    function readlast() returns int

Die Funktion readlast ließt ein Byte ohne Acknowledge-Signal.

Senden eines Datenrahmens   Nach oben

    function send(byte addr, byte data[], byte len) returns int

Mit der Funktion send() kann ein Byte-Arry über den I²C-Bus
gesendet werden. Es wird TRUE (-1) zurückgegeben, wenn nach
jedem gesendetem Byte und ein Acknowledge empfangen wurde, andernfalls FALSE (0).
Diese Funktion nutzt das I²C-Capture.

addr Geräteadresse des jewiligen I²C-Bus-Bausteins
data[] Byte-Array mit den zu sendenden Daten
len Anzahl der zu sendenden Bytes


Empfangen eines Datenrahmens   Nach oben

    function receive(byte addr, byte data[], byte len) returns int

Mit der Funktion receive() könen mehrere Bytes über den I²C-Bus
gelesen werden. Es wird TRUE (-1) zurückgegeben, wenn nach
der Startbedingung ein Acknowledge empfangen wurde, andernfalls FALSE (0).
Diese Funktion nutzt das I²C-Capture.

addr Geräteadresse des jewiligen I²C-Bus-Bausteins
data[] Byte-Array für die gelesenen Daten
len Anzahl der zu lesenden Bytes

 

Empfangen eines Datenrahmens mit Repeatet-Start   Nach oben

    function receiveRS(byte addr, byte dataout[], byte outlen,
                                                  byte datain [], byte inlen) returns int

Mit der Funktion receiveRS() wird zuerst ein Bytearray über den I²C-Bus
gesendet und anschließend werden mehrerer Byte mit einem Repeatet-Start gelesen.
Es wird TRUE (-1) zurückgegeben, wenn nach der Startbedingung ein Acknowledge
empfangen wurde, andernfalls FALSE (0).
Diese Funktion nutzt das I²C-Capture.

addr Geräteadresse des jewiligen I²C-Bus-Bausteins
(Schreib-Adresse)
dataout[] Byte-Array mit den zu sendenden Daten
lenout Anzahl der zu sendenden Bytes
datain[] Byte-Array für die gelesenen Daten
lenin Anzahl der zu lesenden Bytes

 


Autor: André Helbig    Mail: andre.h@cc2net.de    Erstellt: 01.01.2004