twi.h-Dateireferenz

Konfigurationsdatei für die I2C Schnittstelle des Mikrocontrollers. Mehr ...

#include <avr/io.h>
#include <util/delay.h>

Include-Abhängigkeitsdiagramm für twi.h:

Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:


Makrodefinitionen

#define F_CPU   16000000UL
#define TWI_CLK   400000UL
#define TWI_INT_PULLUP   1
#define TWI_DDR   DDRC
#define TWI_PORT   PORTC
#define TWI_SDA   PC1
#define TWI_SCL   PC0
#define TWI_READ   1
#define TWI_WRITE   0
#define TWI_TIMEOUT_ON   1
#define TWI_TIMEOUT_ISR   0
#define TWI_TIMEOUT_BOUND   250
#define true   1
#define false   0

Funktionen

void twi_init (void)
uint8_t twi_start (uint8_t address, uint8_t rw)
uint8_t twi_write (uint8_t data)
uint8_t twi_read_nack (uint8_t *erg)
uint8_t twi_read_ack (uint8_t *erg)
void twi_stop (void)

Variablen

volatile uint8_t twi_timeout

Ausführliche Beschreibung

Konfigurationsdatei für die I2C Schnittstelle des Mikrocontrollers.

Autor:
Lars Neubert
Datum:
Feb 2010

Makro-Dokumentation

#define F_CPU   16000000UL

definiert Mikrocontroller-Taktfrequenz falls diese nicht im Makefile definiert wurde

#define TWI_CLK   400000UL

definiert TWI-Taktfrequenz

#define TWI_INT_PULLUP   1

gibt an, ob mit den internen PullUp Widerständen an SCL / SDA des AVR
gearbeiten werden soll ( =1 PullUp akt., =0 PullUp deakt.)
Bei externen PullUp Widerständen an SCL / SDA - unbedinkt deaktivieren!

#define TWI_DDR   DDRC

Datenrichtungsregister zum aktivieren der internen Pullups der SDA / SCL Leitung

#define TWI_PORT   PORTC

Portregister zum aktivieren der internen Pullups der SDA / SCL Leitung

#define TWI_SDA   PC1

Pin der SDA Leitung zum aktivieren der internen Pullups

#define TWI_SCL   PC0

Pin der SCL Leitung zum aktivieren der internen Pullups

#define TWI_READ   1

dient zur Angabe der Datenrichtung 'Lesen' bei twi_start (siehe twi.c)

#define TWI_WRITE   0

dient zur Angabe der Datenrichtung 'Schreiben' bei twi_start (siehe twi.c)

#define TWI_TIMEOUT_ON   1

gibt an, ob mit einem Timeout gearbeitet werden soll (=1 ja, =0 nein)

#define TWI_TIMEOUT_ISR   0

gibt an, ob mit bei dem Timeout mit einer Timer Interruptroutine gearbeitet werden soll (=1 ja, =0 nein)

#define TWI_TIMEOUT_BOUND   250

dient als Vergleichswert zur Variablen twi_timeout für das Arbeiten mit einem Timeout
Dies sollte abhängig von der jeweiligen Timer-Interruptroutine eingestellt werden und so bemessen sein, dass ca 300ms bis zum auslösen eines Timeout verstreichen.
(Zeit=300ms=TWI_TIMEOUT_BOUND*'Zeit bis zum auslösen der Timer-Interruptroutine'; Bsp. ist Timer-Interruptroutine auf 100ms eingestellt, so sollte TWI_TIMEOUT_BOUND 3 sein).
Ist TWI_TIMEOUT_ISR = 0, so wird nicht mit einer Interuptroutine gearbeitet und TWI_TIMEOUT_BOUND gibt direkt die Zeit in Millisekunden an (zwischen 1..254).

#define true   1

#define false   0


Dokumentation der Funktionen

void twi_init ( void   ) 

Initialisiert die I2C Schnittstelle des Mikrocontrollers

uint8_t twi_start ( uint8_t  address,
uint8_t  rw 
)

Sendet eine START-Kondition mit anschließendem Senden der Adresse und der Datenrichtung

Parameter:
address 7Bit Adresse des Slave
rw legt Datenrichtung fest (TWI_READ 1, TWI_WRITE 0, siehe twi.h)
Rückgabe:
gibt an, ob ein Timeout ausgelöst wurde (=1 Timeout und somit Fehler, =0 alles i.O.)

uint8_t twi_write ( uint8_t  data  ) 

Sendet ein Datenbyte (vorherrige Angabe der Datenrichtung TWI_WRITE bei START-Kondition, siehe twi_start)

Parameter:
data zu sendendes Datenbyte
Rückgabe:
gibt an, ob ein Timeout ausgelöst wurde (=1 Timeout und somit Fehler, =0 alles i.O.)

uint8_t twi_read_nack ( uint8_t *  erg  ) 

Empfängt ein Datenbyte ohne senden eines Acknowledgement (vorherrige Angabe der Datenrichtung TWI_READ bei START-Kondition, siehe twi_start)

Parameter:
erg Pointer auf Speicherbereich in den das empfangene Datenbyte abgelegt werden soll
Rückgabe:
gibt an, ob ein Timeout ausgelöst wurde (=1 Timeout und somit Fehler, =0 alles i.O.)

uint8_t twi_read_ack ( uint8_t *  erg  ) 

Empfängt ein Datenbyte und Bestätigt dieses durch Acknowledgement (vorherrige Angabe der Datenrichtung TWI_READ bei START-Kondition, siehe twi_start)

Parameter:
erg Pointer auf Speicherbereich in den das empfangene Datenbyte abgelegt werden soll
Rückgabe:
gibt an, ob ein Timeout ausgelöst wurde (=1 Timeout und somit Fehler, =0 alles i.O.)

void twi_stop ( void   ) 

Sendet eine STOP-Kondition (Freigabe des Busses)


Variablen-Dokumentation

volatile uint8_t twi_timeout

globale Variable zum Zählen der Timer-Interrupts


Erzeugt am Mon May 24 14:41:58 2010 für Siemens_Handy von  doxygen 1.5.7.1