i2cmaster.h-Dateireferenz

#include <avr/io.h>

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

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

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define _I2CMASTER_H   1
#define I2C_READ   1
#define I2C_WRITE   0
#define i2c_read(ack)   (ack) ? i2c_readAck() : i2c_readNak();

Funktionen

void i2c_init (void)
 initialize the I2C master interace. Need to be called only once
void i2c_stop (void)
 Terminates the data transfer and releases the I2C bus.
unsigned char i2c_start (unsigned char addr)
 Issues a start condition and sends address and transfer direction.
unsigned char i2c_rep_start (unsigned char addr)
 Issues a repeated start condition and sends address and transfer direction.
void i2c_start_wait (unsigned char addr)
 Issues a start condition and sends address and transfer direction.
unsigned char i2c_write (unsigned char data)
 Send one byte to I2C device.
unsigned char i2c_readAck (void)
 read one byte from the I2C device, request more data from device
unsigned char i2c_readNak (void)
 read one byte from the I2C device, read is followed by a stop condition
unsigned char i2c_read (unsigned char ack)
 read one byte from the I2C device


Makro-Dokumentation

#define _I2CMASTER_H   1

Definiert in Zeile 2 der Datei i2cmaster.h.

#define i2c_read ( ack   )     (ack) ? i2c_readAck() : i2c_readNak();

Definiert in Zeile 95 der Datei i2cmaster.h.

#define I2C_READ   1

defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start()

Definiert in Zeile 12 der Datei i2cmaster.h.

#define I2C_WRITE   0

defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start()

Definiert in Zeile 15 der Datei i2cmaster.h.

Wird benutzt von main().


Dokumentation der Funktionen

void i2c_init ( void   ) 

initialize the I2C master interace. Need to be called only once

Parameter:
void 
Rückgabe:
none

Definiert in Zeile 27 der Datei twimaster.c.

Benutzt SCL_CLOCK.

Wird benutzt von main().

00028 {
00029   /* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
00030   
00031   TWSR = 0;                         /* no prescaler */
00032   TWBR = ((F_CPU/SCL_CLOCK)-16)/2;  /* must be > 10 for stable operation */
00033 
00034 }/* i2c_init */

unsigned char i2c_read ( unsigned char  ack  ) 

read one byte from the I2C device

Implemented as a macro, which calls either i2c_readAck or i2c_readNak

Parameter:
ack 1 send ack, request more data from device
0 send nak, read is followed by a stop condition
Rückgabe:
byte read from I2C device

unsigned char i2c_readAck ( void   ) 

read one byte from the I2C device, request more data from device

Rückgabe:
byte read from I2C device

Definiert in Zeile 180 der Datei twimaster.c.

00181 {
00182         TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
00183         while(!(TWCR & (1<<TWINT)));    
00184 
00185     return TWDR;
00186 
00187 }/* i2c_readAck */

unsigned char i2c_readNak ( void   ) 

read one byte from the I2C device, read is followed by a stop condition

Rückgabe:
byte read from I2C device

Definiert in Zeile 195 der Datei twimaster.c.

00196 {
00197         TWCR = (1<<TWINT) | (1<<TWEN);
00198         while(!(TWCR & (1<<TWINT)));
00199         
00200     return TWDR;
00201 
00202 }/* i2c_readNak */

unsigned char i2c_rep_start ( unsigned char  addr  ) 

Issues a repeated start condition and sends address and transfer direction.

Parameter:
addr address and transfer direction of I2C device
Rückgabewerte:
0 device accessible
1 failed to access device

Definiert in Zeile 128 der Datei twimaster.c.

Benutzt i2c_start().

00129 {
00130     return i2c_start( address );
00131 
00132 }/* i2c_rep_start */

unsigned char i2c_start ( unsigned char  addr  ) 

Issues a start condition and sends address and transfer direction.

Parameter:
addr address and transfer direction of I2C device
Rückgabewerte:
0 device accessible
1 failed to access device

Definiert in Zeile 41 der Datei twimaster.c.

Wird benutzt von i2c_rep_start() und main().

00042 {
00043   uint8_t   twst;
00044 
00045         // send START condition
00046         TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
00047 
00048         // wait until transmission completed
00049         while(!(TWCR & (1<<TWINT)));
00050 
00051         // check value of TWI Status Register. Mask prescaler bits.
00052         twst = TW_STATUS & 0xF8;
00053         if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;
00054 
00055         // send device address
00056         TWDR = address;
00057         TWCR = (1<<TWINT) | (1<<TWEN);
00058 
00059         // wail until transmission completed and ACK/NACK has been received
00060         while(!(TWCR & (1<<TWINT)));
00061 
00062         // check value of TWI Status Register. Mask prescaler bits.
00063         twst = TW_STATUS & 0xF8;
00064         if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
00065 
00066         return 0;
00067 
00068 }/* i2c_start */

void i2c_start_wait ( unsigned char  addr  ) 

Issues a start condition and sends address and transfer direction.

If device is busy, use ack polling to wait until device ready

Parameter:
addr address and transfer direction of I2C device
Rückgabe:
none

Definiert in Zeile 77 der Datei twimaster.c.

Wird benutzt von main().

00078 {
00079     uint8_t   twst;
00080 
00081 
00082     while ( 1 )
00083     {
00084             // send START condition
00085             TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
00086     
00087         // wait until transmission completed
00088         while(!(TWCR & (1<<TWINT)));
00089     
00090         // check value of TWI Status Register. Mask prescaler bits.
00091         twst = TW_STATUS & 0xF8;
00092         if ( (twst != TW_START) && (twst != TW_REP_START)) continue;
00093     
00094         // send device address
00095         TWDR = address;
00096         TWCR = (1<<TWINT) | (1<<TWEN);
00097     
00098         // wail until transmission completed
00099         while(!(TWCR & (1<<TWINT)));
00100     
00101         // check value of TWI Status Register. Mask prescaler bits.
00102         twst = TW_STATUS & 0xF8;
00103         if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) ) 
00104         {           
00105             /* device busy, send stop condition to terminate write operation */
00106                 TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
00107                 
00108                 // wait until stop condition is executed and bus released
00109                 while(TWCR & (1<<TWSTO));
00110                 
00111             continue;
00112         }
00113         //if( twst != TW_MT_SLA_ACK) return 1;
00114         break;
00115      }
00116 
00117 }/* i2c_start_wait */

void i2c_stop ( void   ) 

Terminates the data transfer and releases the I2C bus.

Parameter:
void 
Rückgabe:
none

Definiert in Zeile 138 der Datei twimaster.c.

Wird benutzt von main().

00139 {
00140     /* send stop condition */
00141         TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
00142         
00143         // wait until stop condition is executed and bus released
00144         while(TWCR & (1<<TWSTO));
00145 
00146 }/* i2c_stop */

unsigned char i2c_write ( unsigned char  data  ) 

Send one byte to I2C device.

Parameter:
data byte to be transfered
Rückgabewerte:
0 write successful
1 write failed

Definiert in Zeile 156 der Datei twimaster.c.

Wird benutzt von i2c_writeData() und main().

00157 {       
00158     uint8_t   twst;
00159     
00160         // send data to the previously addressed device
00161         TWDR = data;
00162         TWCR = (1<<TWINT) | (1<<TWEN);
00163 
00164         // wait until transmission completed
00165         while(!(TWCR & (1<<TWINT)));
00166 
00167         // check value of TWI Status Register. Mask prescaler bits
00168         twst = TW_STATUS & 0xF8;
00169         if( twst != TW_MT_DATA_ACK) return 1;
00170         return 0;
00171 
00172 }/* i2c_write */


Erzeugt am Thu Oct 18 23:22:13 2007 für nDisply von  doxygen 1.5.1-p1