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