http://homepage.hispeed.ch/peterfleury/group__pfleury__ic2master.html

verification : TBA

Copy the original web content as following, in case the link is down without notice.

http://homepage.hispeed.ch/peterfleury/i2cmaster.zip



I2C Master library


Detailed Description


I2C (TWI) Master Software Library.


#include < i2cmaster.h > 



單一控制, 讀寫 I2C, 用於 AVR 系列 MCU
Basic routines for communicating with I2C slave devices. This single
master implementation is limited to one bus master on the I2C bus.


可分別支持軟件模擬 I2C 讀寫 或 TWI 硬件讀寫
This I2c library is implemented as a compact assembler software
implementation of the I2C protocol which runs on any AVR (i2cmaster.S)
and as a TWI hardware interface for all AVR with built-in TWI hardware
(twimaster.c). Since the API for these two implementations is exactly
the same, an application can be linked either against the software I2C
implementation or the hardware I2C implementation.



SDA 及 SCL 使用上拉 4K7 電阻
Use 4.7k pull-up resistor on the SDA and SCL pin.



因應個別設計, 修改 i2cmaster.S 內對應  I2C I/O 腳
Adapt the SCL and SDA port and pin definitions and eventually the delay
routine in the module i2cmaster.S to your target when using the
software I2C implementation !



因應個別設計, 在 Makfile 或 twimaster.c 調節 CPU 速度
Adjust the CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.




i2cmaster.S 源自 AVR300, 針對所列的瑕疵以作修訂
Note:
The module
i2cmaster.S is based on the Atmel Application Note AVR300, corrected
and adapted to GNU assembler and AVR-GCC C call interface. Replaced the
incorrect quarter period delays found in AVR300 with half period delays.


原作者
Author:
Peter Fleury pfleury@gmx.ch http://jump.to/fleury


應用例子
API Usage Example
The following code shows typical usage of this library, see example test_i2cmaster.c


#include < i2cmaster.h >



#define Dev24C02 0xA2 // device address of EEPROM 24C02, see datasheet

int main(void)
{
unsigned char ret;

i2c_init(); // initialize I2C library

// write 0x75 to EEPROM address 5 (Byte Write)
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode
i2c_write(0x05); // write address = 5
i2c_write(0x75); // write value 0x75 to EEPROM
i2c_stop(); // set stop conditon = release bus


// read previously written value back from EEPROM address 5
i2c_start_wait(Dev24C02+I2C_WRITE); // set device address and write mode

i2c_write(0x05); // write address = 5
i2c_rep_start(Dev24C02+I2C_READ); // set device address and read mode

ret = i2c_readNak(); // read one byte from EEPROM
i2c_stop();

for(;;);
}










































Defines

#define I2C_READ   1
#define I2C_WRITE   0

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

Functions

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


Define Documentation












#define I2C_READ   1








 



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












#define I2C_WRITE   0








 



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



Function Documentation

















void i2c_init void 
 ) 








 



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


Parameters:




void 


Returns:
none

















void i2c_stop void 
 ) 








 



Terminates the data transfer and releases the I2C bus.


Parameters:




void 


Returns:
none

















unsigned char i2c_start unsigned char  addr  ) 








 



Issues a start condition and sends address and transfer direction.


Parameters:




addr address and transfer direction of I2C device


Return values:





0 device accessible

1 failed to access device


















unsigned char i2c_rep_start unsigned char  addr  ) 








 



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


Parameters:




addr address and transfer direction of I2C device


Return values:





0 device accessible

1 failed to access device


















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

Parameters:




addr address and transfer direction of I2C device


Returns:
none

















unsigned char i2c_write unsigned char  data  ) 








 



Send one byte to I2C device.


Parameters:




data byte to be transfered


Return values:





0 write successful

1 write failed


















unsigned char i2c_readAck void 
 ) 








 



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


Returns:
byte read from I2C device

















unsigned char i2c_readNak void 
 ) 








 



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


Returns:
byte read from I2C device

















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


Parameters:




ack 1 send ack, request more data from device

0 send nak, read is followed by a stop condition


Returns:
byte read from I2C device


創作者介紹
創作者 xiaolabaDIY 的部落格 的頭像
xiaolabaDIY

xiaolabaDIY 的部落格

xiaolabaDIY 發表在 痞客邦 留言(0) 人氣( 544 )