User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
void I2CTWI_requestDataFromDevice(uint8_t requestAdr, uint8_t requestID,
uint8_t numberOfBytes)
Und mit dieser Funktion kann man Daten von einem Slave anfordern. Nachdem man
diese Funktion aufgerufen hat, läuft der Abholvorgang wie oben beschrieben automa-
tisch im Hintergrund.
Anschließend kann man die Daten mit der Funktion:
void I2CTWI_getReceivedData(uint8_t *msg, uint8_t msgSize)
abrufen.
Man kann die Daten abrufen, sobald der passende Event Handler aufgerufen wird.
Diesen registriert man mit der Funktion:
void I2CTWI_setRequestedDataReadyHandler(void (*requestedDataReadyHandler)
(uint8_t))
Der Event Handler muss die Signatur
void I2C_requestedDataReady(uint8_t dataRequestID)
haben. Dem Event Handler wird die ID übergeben, die man der jeweiligen Datenanfor-
derung zugewiesen hat. Darüber kann man Zugriffe auf verschiedene Slaves unter-
scheiden.
Neben dem requestedDataReady Handler, gibt es auch noch einen Event Handler, der
bei Fehlern aufgerufen wird. Wenn während der Übertragung irgendetwas schief geht,
z.B. wenn der Slave nicht antwortet, wird dieser Event Handler aufgerufen.
Man registriert den Event Handler mit dieser Funktion:
void I2CTWI_setTransmissionErrorHandler(void (*transmissionErrorHandler)
(uint8_t))
Er muss die Signatur:
void I2C_transmissionError(uint8_t errorState)
haben. Der Parameter ist ein Fehlerzustandscode. Die Bedeutung der Fehlercodes
kann man der Header Datei des I²C Master Modus entnehmen.
Diesen Event Handler kann man übrigens unabhängig davon verwenden, ob man nun
die Daten im Hintergrund abruft oder nicht. Auch mit den blockierenden Funktionen
wird dieser Event Handler bei einem Fehler aufgerufen.
Einige Beispielprogramme zum Master Modus finden Sie auf der CD – diese werden
auch im folgenden Kapitel über die Beispielprogramme noch genauer besprochen.
- 112 -