Funktionen:
init()
ready()
error()
send()
publish()
rtrcount()
expect()
request()
rxd()
get()
getID()
Beschreibung Nach oben
Das Modul can.c2 erlaubt den Zugriff auf das CAN-Bus-Interface C-Control II.
In Version 1.1 wurden einige Patches nötig, da Infineon am µController C164CI
einige Änderungen am CAN-Bus-Interface vorgenommen hatte, und dieses
nun eine andere Initialisierung benötigt.
Das Modul ist 100%ig kompatibel zu alten CC2-Units/Station.
Außerdem sind mit dem neuem C164CI nun Geschwindigkeiten von bis zu 1MBit möglich.
Einfügen als System-Modul Nach oben
Die Datei can.c2 in das Verzeichnis .\CControl2\Lib
über die alte Version
des Moduls kopieren.
Funktionen:
Initialisierung Nach oben
function init(int speed, int globalMask, int specialMask)
Vor der Datenübertragung auf dem CAN-Bus muß das System initialisiert
werden.
Der erste Parameter der init
Funktion dient zur Festlegung der Übertragungsgeschwindigkeit.
Folgende speed
Werte werden unterstützt:
speed | Übertragungsgeschwindigkeit |
speed_50 (0) | 50kBit/s |
speed_62 (1) | 62,5kBit/s |
speed_125 (2) | 125kBit/s |
speed_250 (3) | 250kBit/s |
speed_500 (4) | 500kBit/s |
speed_1000 (5)* | 1MBit/s* |
globalMask | 0x0000 | 0x07FF | 0x07FF | 0x07FE |
Empfangs-ID | egal | 0x0120 | 0x0120 | 0x0120 |
Message-ID | egal | 0x120 | 0x121 | 0x121 |
Empfang ja/nein | ja | ja | nein | ja |
Statusabfrage für einen CAN-Kanal Nach oben
function ready(int channel) returns int
Die Funktion ready prüft,ob ein Kanal bereit für eine neue CAN-Übertragung ist.
channel 0 …14 (channel 14 kann nur empfangen und ist nie bereit)
Rückgabe:-1 wenn bereit,sonst 0
Test auf Übertragungsfehler Nach oben
function error() returns int
Die Funktion error befragt die integrierte CAN-Hardware des C164CI nach dem zuletzt
aufgetretenen Fehler.Eine Zuordnung eines Fehlers zu einem einzelnen Kanal ist nicht
möglich. Zum Verständnis der einzelnen Fehlercodes wird dringend die Lektüre
eines Fachbuches zum Thema CAN-Bus sowie der Systemdokumentation
zum C164CI-Mikrocontroller empfohlen.
Rückgabe:
|
Nachricht senden Nach oben
function send ( int channel, int id, byte buf[], int length )
Die Funktion send übergibt Bytes aus einem Bytepuffer an einen CAN-Ausgabekanal.
channel | 0 …13 (channel 14 kann nur empfangen!) |
id | Message-ID der Nachricht |
buf | Referenz auf Bytepuffervariable |
length | Pufferlänge,max.8 |
Nachricht
veröffentlichen Nach oben
function publish ( int channel, int id, byte buf[], int length )
Die Funktion publish übergibt Bytes aus einem Bytepuffer an einen CAN-Ausgabekanal
und stellt die Daten für “Remote-Request ”-Anforderungen anderer CAN-Busteilnehmer zur
Verfügung.D.h.andere Busteilnehmer können unter Angabe der passenden Message-ID
die Übertragung der Pufferdaten anfordern.
channel | 0 …13 (channel 14 kann nur empfangen!) |
id | Message-ID der Nachricht |
buf | Referenz auf Bytepuffervariable |
length | Pufferlänge,max.8 |
function rtrcount ( int channel ) returns byte
Die Funktion rtrcount liefert nach Veröffentlichung einer Nachricht einen Zählerwert,
wie oft diese Nachricht von anderen Busteilnehmern abgefragt wurde.Der Zähler ist
jedoch auf den Wertebereich eines Bytes beschränkt.Wird eine Nachricht öfter als 253
mal abgefragt,leibt der Zählerwert auf 253 stehen.
channel | 0 …13 (channel 14 kann nur empfangen!) |
Einstellen der
Empfangs-ID Nach oben
function expect (int channel, int id)
Für jeden Kanal,der zum Empfangen von CAN-Nachrichten benutzt werden soll,muß
eine Empfangs-ID eingestellt werden (siehe auch init).Werden für mehrere Kanäle glei-
che Empfangsbedingungen hergestellt,resultierend aus der Akzeptanzmaske und der
Empfangs-ID,so wird eine eingehende Nachricht,die diesen Bedingungen entspricht,im
niedrigsten freien Kanal gespeichert.Ein Kanal ist frei,wenn seine zuletzt empfangene
Nachricht mit get ausgelesen wurde.
channel | 0 …13 (channel 14 kann nur empfangen!) |
id | Empfangs-ID des Kanals |
Senden einer “Remote-Request ”-Anforderung Nach oben
function request (int channel)
So wie die C-Control II Nachrichten veröffentlichen kann (siehe publish),kann sie auch
selbst eine Nachricht anfordern,die ein anderer CAN-Busteilnehmer veröffentlicht hat.Es
muß bekannt sein,unter welcher Message-ID diese Nachricht abrufbar ist.Diese ID muß
zuvor per expect für den Kanal channel als Empfangs-ID eingestellt sein,sonst kann
die Antwort des Busteilnehmers nicht empfangen werden.
channel | 0 ... 14 |
Test auf Empfang Nach oben
function rxd(int channel) returns int
Die Funktion rxd testet,ob eine neue Nachricht auf einem Empfangskanal channel
verfügbar ist. Wenn das so ist, gibt sie den Wert -1 zurück, anderenfalls 0.
channel | 0 ... 14 |
Empfangene Daten lesen Nach oben
function get (int channel, byte buf[]) returns int
Daten, die auf einem Kanal channel automatisch oder nach einem request
empfangen wurden, können mit get abgeholt und in eine Bytepuffervariable übertragen
werden. Der Puffer muß Platz für 8 Bytes bieten. Die Funktion liefert als Ergebnis die Anzahl
der Bytes,die tatsächlich empfangen wurden; gültige Nachrichten können auch aus 0
Datenbytes bestehen.
channel | 0 ... 14 |
buf[] | Referenz auf Bytepuffervariable |
Message-ID auslesen Nach oben
function getID (int channel) returns int
Die Funktion gibt die Message-ID einer auf dem angegebenen Kanal empfangenen
Nachricht
zurück.
channel | 0 ... 13 |
Autor: André Helbig Mail: andre.h@cc2net.de
Erstellt: 06.01.2004 ©www.CC2Net.de