http://homepage.hispeed.ch/peterfleury/group__pfleury__ic2master.htmlverification : TBA
Copy the original web content as following, in case the link is down without notice.
http://homepage.hispeed.ch/peterfleury/i2cmaster.zipI2C Master library
Detailed Description
I2C (TWI) Master Software Library.
單一控制, 讀寫 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
Function Documentation
|
initialize the I2C master interace. Need to be called only once
- Parameters:
- Returns:
- none
|
|
Terminates the data transfer and releases the I2C bus.
- Parameters:
- 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
|
請先 登入 以發表留言。