I2C: encapsulate bus states.

No functional changes.
This commit is contained in:
Markus Hitter 2016-04-03 21:31:10 +02:00
parent 061225f72d
commit 6ef9e1a2ee
2 changed files with 28 additions and 23 deletions

28
i2c.c
View File

@ -33,6 +33,34 @@
#error Cant be I2C master and slave at the same time.
#endif
#ifdef I2C_SLAVE_MODE
#define I2C_MODE 1
#else
#define I2C_MODE 0
#endif
#define I2C_MODE_MASK 0b00001100
// Start-Addr_R-Read-Stop: just read mode.
#define I2C_MODE_SARP 0b00000000
// Start-Addr_W-Write-Stop: just write mode.
#define I2C_MODE_SAWP 0b00000100
// Start-Addr_W-WrPageAdr-rStart-Addr_R-Read-Stop.
#define I2C_MODE_ENHA 0b00001000
// Transponder is busy.
#define I2C_MODE_BUSY 0b01000000
// Transponder is free.
#define I2C_MODE_FREE 0b10111111
// Transmission interrupted.
#define I2C_INTERRUPTED 0b10000000
// Transmission not interrupted.
#define I2C_NOINTERRUPTED 0b01111111
#define I2C_ERROR_BUS_FAIL 0b00000001
#define I2C_ERROR_NACK 0b00000010
#define I2C_ERROR_NO_ANSWER 0b00010000
#define I2C_ERROR_LOW_PRIO 0b00100000
// Address of the device that is communicated with.
uint8_t i2c_address;

23
i2c.h
View File

@ -31,29 +31,6 @@
#define I2C_SLAVE_TX_BUFFER_SIZE 1
#endif /* I2C_SLAVE_MODE */
#ifdef I2C_SLAVE_MODE
#define I2C_MODE 1
#else
#define I2C_MODE 0
#endif
#define I2C_MODE_MASK 0b00001100
#define I2C_MODE_SARP 0b00000000 // Start-Addr_R-Read-Stop: just read mode
#define I2C_MODE_SAWP 0b00000100 // Start-Addr_W-Write-Stop: just write mode
#define I2C_MODE_ENHA 0b00001000 // Start-Addr_W-WrPageAdr-rStart-Addr_R-Read-Stop
#define I2C_MODE_BUSY 0b01000000 // Transponder is busy
#define I2C_MODE_FREE 0b10111111 // Transponder is free
// Transmission interrupted.
#define I2C_INTERRUPTED 0b10000000
// Transmission not interrupted.
#define I2C_NOINTERRUPTED 0b01111111
#define I2C_ERROR_BUS_FAIL 0b00000001
#define I2C_ERROR_NACK 0b00000010
#define I2C_ERROR_NO_ANSWER 0b00010000
#define I2C_ERROR_LOW_PRIO 0b00100000
void i2c_init(uint8_t address);
void i2c_send(uint8_t address, uint8_t* block, uint8_t tx_len);