Universelles CAN Interface

allgemeines CAN Interface für AT90CAN32/64/128, MCP2515 und SJA1000 Mehr ...

Datenstrukturen

struct  can_t
 Datenstruktur zum Aufnehmen von CAN Nachrichten. Mehr ...
struct  can_filter_t
 Datenstruktur zur Aufnahme von CAN-Filtern. Mehr ...
struct  can_error_register_t
 Inhalt der Fehler-Register. Mehr ...

Makrodefinitionen

#define CAN_ALL_FILTER   0xff
 Symbol um auf alle Filter zuzugreifen.

Aufzählungen

enum  can_bitrate_t {
  BITRATE_10_KBPS = 0, BITRATE_20_KBPS = 1, BITRATE_50_KBPS = 2, BITRATE_100_KBPS = 3,
  BITRATE_125_KBPS = 4, BITRATE_250_KBPS = 5, BITRATE_500_KBPS = 6, BITRATE_1_MBPS = 7
}
 

Bitraten fuer den CAN-Bus.


enum  can_mode_t { LISTEN_ONLY_MODE, LOOPBACK_MODE, NORMAL_MODE, SLEEP_MODE }
 

Modus des CAN Interfaces.

Mehr ...

Funktionen

bool can_init (can_bitrate_t bitrate)
 Initialisierung des CAN Interfaces.
void can_sleep (void)
bool can_set_filter (uint8_t number, const can_filter_t *filter)
 Setzen eines Filters.
bool can_disable_filter (uint8_t number)
 Filter deaktivieren.
void can_static_filter (const prog_uint8_t *filter_array)
 Setzt die Werte für alle Filter.
uint8_t can_get_filter (uint8_t number, can_filter_t *filter)
 Filterdaten auslesen.
bool can_check_message (void)
 Ueberpruefen ob neue CAN Nachrichten vorhanden sind.
bool can_check_free_buffer (void)
 Ueberprueft ob ein Puffer zum Versenden einer Nachricht frei ist.
uint8_t can_send_message (const can_t *msg)
 Verschickt eine Nachricht über den CAN Bus.
uint8_t can_get_message (can_t *msg)
 Liest eine Nachricht aus den Empfangspuffern des CAN Controllers.
can_error_register_t can_read_error_register (void)
 Liest den Inhalt der Fehler-Register.
bool can_check_bus_off (void)
 Überprüft ob der CAN Controller im Bus-Off-Status.
void can_reset_bus_off (void)
 Setzt einen Bus-Off Status zurück und schaltet den CAN Controller wieder aktiv.
void can_set_mode (can_mode_t mode)
 Setzt den Operations-Modus.

Ausführliche Beschreibung

allgemeines CAN Interface für AT90CAN32/64/128, MCP2515 und SJA1000

Autor:
Fabian Greif <fabian.greif@rwth-aachen.de>
Roboterclub Aachen e.V. (http://www.roboterclub.rwth-aachen.de)

can_sleep() and can_wakeup() functions by Frédéric Lamorce.

Version:
Id
can.h 8086 2009-07-14 14:08:25Z fabian

Dokumentation der Aufzählungstypen

enum can_mode_t

Modus des CAN Interfaces.

Aufzählungswerte:
LISTEN_ONLY_MODE 

der CAN Contoller empfängt nur und verhält sich völlig passiv

LOOPBACK_MODE 

alle Nachrichten direkt auf die Empfangsregister umleiten ohne sie zu senden

NORMAL_MODE 

normaler Modus, CAN Controller ist aktiv

Definiert in Zeile 259 der Datei can.h.


Dokumentation der Funktionen

bool can_check_bus_off ( void   ) 

Überprüft ob der CAN Controller im Bus-Off-Status.

Rückgabe:
true wenn der Bus-Off-Status aktiv ist, false ansonsten
Warnung:
aktuell nur auf dem SJA1000
bool can_check_free_buffer ( void   ) 

Ueberprueft ob ein Puffer zum Versenden einer Nachricht frei ist.

Rückgabe:
true falls ein Sende-Puffer frei ist, false ansonsten.
bool can_check_message ( void   ) 

Ueberpruefen ob neue CAN Nachrichten vorhanden sind.

Rückgabe:
true falls neue Nachrichten verfuegbar sind, false ansonsten.
bool can_disable_filter ( uint8_t  number  ) 

Filter deaktivieren.

Parameter:
number Nummer des Filters der deaktiviert werden soll, 0xff deaktiviert alle Filter.
Rückgabe:
false falls ein Fehler auftrat, true ansonsten
Warnung:
Wird nur vom AT90CAN32/64/128 unterstuetzt.
uint8_t can_get_filter ( uint8_t  number,
can_filter_t filter 
)

Filterdaten auslesen.

Parameter:
number Nummer des Filters dessen Daten man haben moechte
*filter Pointer in den die Filterstruktur geschrieben wird
Rückgabe:
0 falls ein Fehler auftrat, \ 1 falls der Filter korrekt gelesen werden konnte, \ 2 falls der Filter im Moment nicht verwendet wird (nur AT90CAN), \ 0xff falls gerade keine Aussage moeglich ist (nur AT90CAN).
Warnung:
Da der SJA1000 nicht feststellen kann ob der ausgelesene Filter nun zwei 11-Bit Filter oder ein 29-Bit Filter ist werden nicht die Filter sondern die Registerinhalte direkt zurück gegeben. Der Programmierer muss dann selbst entscheiden was er mit den Werten macht.
uint8_t can_get_message ( can_t msg  ) 

Liest eine Nachricht aus den Empfangspuffern des CAN Controllers.

Parameter:
msg Pointer auf die Nachricht die gelesen werden soll.
Rückgabe:
FALSE falls die Nachricht nicht ausgelesen konnte, ansonsten Filtercode welcher die Nachricht akzeptiert hat.
bool can_init ( can_bitrate_t  bitrate  ) 

Initialisierung des CAN Interfaces.

Parameter:
bitrate Gewuenschte Geschwindigkeit des CAN Interfaces
Rückgabe:
false falls das CAN Interface nicht initialisiert werden konnte, true ansonsten.
void can_reset_bus_off ( void   ) 

Setzt einen Bus-Off Status zurück und schaltet den CAN Controller wieder aktiv.

Warnung:
aktuell nur auf dem SJA1000
uint8_t can_send_message ( const can_t msg  ) 

Verschickt eine Nachricht über den CAN Bus.

Parameter:
msg Nachricht die verschickt werden soll
Rückgabe:
FALSE falls die Nachricht nicht verschickt werden konnte,
ansonsten der Code des Puffes in den die Nachricht gespeichert wurde
bool can_set_filter ( uint8_t  number,
const can_filter_t filter 
)

Setzen eines Filters.

Für einen MCP2515 sollte die Funktion can_static_filter() bevorzugt werden.

Parameter:
number Position des Filters
filter zu setzender Filter
Rückgabe:
false falls ein Fehler auftrat, true ansonsten
void can_set_mode ( can_mode_t  mode  ) 

Setzt den Operations-Modus.

Parameter:
mode Gewünschter Modus des CAN Controllers
void can_static_filter ( const prog_uint8_t *  filter_array  ) 

Setzt die Werte für alle Filter.

 // Filter und Masken-Tabelle anlegen
 prog_char can_filter[] = {
    MCP2515_FILTER_EXTENDED(0), // Filter 0
    MCP2515_FILTER_EXTENDED(0), // Filter 1
    
    MCP2515_FILTER_EXTENDED(0), // Filter 2
    MCP2515_FILTER_EXTENDED(0), // Filter 3
    MCP2515_FILTER_EXTENDED(0), // Filter 4
    MCP2515_FILTER_EXTENDED(0), // Filter 5
    
    MCP2515_FILTER_EXTENDED(0), // Maske 0
    MCP2515_FILTER_EXTENDED(0), // Maske 1
 };
 
 ...

 // Filter und Masken-Tabelle laden
 can_static_filter(can_filter);
Parameter:
*filter_array Array im Flash des AVRs mit den Initialisierungs- werten für die Filter des MCP2515
Siehe auch:
MCP2515_FILTER_EXTENDED()
MCP2515_FILTER()
Warnung:
Wird nur vom MCP2515 unterstuetzt.
Erzeugt am Thu Aug 19 22:03:52 2010 für RCA CAN Library von  doxygen 1.6.3