5 #define BIT(x) (1 << (x))
6 #define SETBITS(x,y) ((x) |= (y))
7 #define CLEARBITS(x,y) ((x) &= (~(y)))
8 #define SETBIT(x,y) SETBITS((x), (BIT((y))))
9 #define CLEARBIT(x,y) CLEARBITS((x), (BIT((y))))
10 #define BITSET(x,y) ((x) & (BIT(y)))
11 #define BITCLEAR(x,y) !BITSET((x), (y))
12 #define BITSSET(x,y) (((x) & (y)) == (y))
13 #define BITSCLEAR(x,y) (((x) & (y)) == 0)
14 #define BITVAL(x,y) (((x)>>(y)) & 1)
17 #define I2C_LOW(port, bit) sbi(DDR(port),bit)
18 #define I2C_HIGH(port, bit) cbi(DDR(port),bit)
21 typedef uint8_t i2cm_state;
27 #define I2CM_SENT_NO_ACK 4
28 #define I2CM_SENT_START 5
29 #define I2CM_SENT_START_NO_ACK 6
30 #define I2CM_SENT_STOP 7
31 #define I2CM_RECEIVED_BYTE 8
33 #define I2CM_NUM_DELAY() _delay_loop_2(1)
34 #define I2CM_NUM_BIT_DELAY() _delay_loop_2(1)
36 void i2cm_NUM_init(void);
37 void i2cm_NUM_manage(void);
38 uint8_t i2cm_NUM_get_state(void);
39 uint8_t i2cm_NUM_get_received_byte(void);
40 void i2cm_NUM_register_event(void (*func)(i2cm_state state));
41 uint8_t i2cm_NUM_send_byte(uint8_t byte);
42 uint8_t i2cm_NUM_send_start(uint8_t sla_w);
43 uint8_t i2cm_NUM_send_stop(void);
44 uint8_t i2cm_NUM_receive_byte(uint8_t last);
46 #define I2C_CTRL_SYNC 0
49 #define I2C_ERR_SEND_START 1
50 #define I2C_ERR_SEND_BYTE 2
51 #define I2C_ERR_RECV_BYTE 3