CAN.C2 V1.2 - Hilfe


Beschreibung

Einfügen als System-Modul

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*
*nur Units mit neuer C164CI-Version (rev. DA / ca. seit Frühjahr 2003)

Wenn Sie einen ungültigen Wert für speed übergeben, wird die Übertragungsrate auf
125 kbit/s festgesetzt.

Zur Akzeptanzfilterung eingehender CAN-Nachrichten müssen zwei Maskenwerte,
globalMask und specialMask spezifiziert werden.globalMask gilt für alle 15
Kanäle, für den 15.Kanal (channel 14) gilt zusätzlich die specialMask die vom
Mikrocontroller intern mit der globalMask UND-verknüpft wird. Die Akzeptanzmaske
bestimmt, welche Bits der Message-ID einer eingehenden Nachricht mit der Empfangs-ID
eines CAN-Kanals zu vergleichen sind, um zu entscheiden, ob eine eingehenden
Nachricht für diesen Kanal bestimmt ist und zu empfangen ist. Ein 0-Bit bedeutet 
“don ’t care” (egal), ein 1-Bit bedeutet “compare” (muß verglichen werden).
Beispiel, gültig für alle Kanäle 0 …13:
globalMask 0x0000 0x07FF 0x07FF 0x07FE
Empfangs-ID egal 0x0120 0x0120 0x0120
Message-ID egal 0x120 0x121 0x121
Empfang ja/nein ja ja nein ja

Wenn specialMask ungleich globalMask ist,dann werden,wegen der UND-Verknüpfung,
für Kanal 14 weniger Bits als bei den Kanälen 0 … 13 verglichen.
Kanal 14 ist also für mehr eingehende Nachrichten empfangsbereit.
Man könnte z.B. globalMask auf 0x07FF setzen (=alle 11 ID-Bits) und specialMask auf 0x0000.
Dann ist jeder Kanal 0 … 13 nur für den Empfang genau einer Nachricht zuständig,
und Kanal 14 ist ein Universalempfänger.

Weitere Details siehe auch unter Einstellen der Empfangs-ID.

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:

Code-Konstante
ERROR_STUFF (1)
ERROR_FORM (2)
ERROR_ACK (3)
ERROR_BIT1 (4)
ERROR_BIT0 (5)
ERROR_CRC (6)
ERROR_EWRN (8)
ERROR_BUSOFF (9)


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


Zählen der “Remote-Request ”-Anfragen   Nach oben

    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