37 #ifndef LTLIB_I2C_MODULE_H
38 #define LTLIB_I2C_MODULE_H
49 #ifndef I2C_LIBRARY_SUPPORTED
50 #error (LTlib) The MCU you have selected is not supported by module_I2C library.
56 #define I2C_SLAVE_7_BIT_ADDRESS 0b00000110
57 #define I2C_SLAVE_10_BIT_ADDRESS 0b00000111
58 #define I2C_MASTER 0b00001000
61 #define I2C_SLEW_ON 0b00000000
64 #define I2C_SLEW_OFF 0b10000000
83 void I2C1_open (
unsigned char device_type);
85 #ifdef I2C_MODULE_TYPE_2
86 void I2C2_open (
unsigned char device_type);
104 #ifdef I2C_MODULE_TYPE_2
105 void I2C2_baud_rate (
unsigned int bus_baud_rate_KHZ);
120 #ifdef I2C_MODULE_TYPE_2
121 void I2C2_set_slave_address (
unsigned int device_address);
134 #define I2C1_read_byte() (SSPBUF)
136 #ifdef I2C_MODULE_TYPE_2
137 #define I2C2_read_byte() (SSP2BUF)
154 #ifdef I2C_MODULE_TYPE_2
155 signed char I2C2_write_byte (
unsigned char byte_to_send);
168 #define I2C1_wait_bus_IDLE() while((SSPCON2 & 0x1F) | (SSPSTATbits.R_W))
170 #ifdef I2C_MODULE_TYPE_2
171 #define I2C2_wait_bus_IDLE() while((SSP2CON2 & 0x1F) | (SSP2STATbits.R_W))
188 #ifdef I2C_MODULE_TYPE_2
189 void I2C2_start_bit (
void);
205 #ifdef I2C_MODULE_TYPE_2
206 void I2C2_stop_bit (
void);
220 #ifdef I2C_MODULE_TYPE_2
221 void I2C2_reset_write_collision_flag (
void);
240 #ifdef I2C_MODULE_TYPE_2
241 signed char I2C2_write_byte_to_external_device (
unsigned char control_byte,
unsigned char register_address,
unsigned char data);
263 #ifdef I2C_MODULE_TYPE_2
264 signed char I2C2_read_byte_from_external_device (
unsigned char control_byte,
unsigned char register_address,
unsigned char *data);
278 #define I2C1_check_data_ready() (SSPSTATbits.BF)
280 #ifdef I2C_MODULE_TYPE_2
281 #define I2C2_check_data_ready() (SSP2STATbits.BF)
295 #define I2C1_check_read_write_operation() (SSPSTATbits.R_W)
297 #ifdef I2C_MODULE_TYPE_2
298 #define I2C2_check_read_write_operation() (SSP2STATbits.R_W)
311 #define I2C1_check_stop_bit() (SSPSTATbits.P)
313 #ifdef I2C_MODULE_TYPE_2
314 #define I2C2_check_stop_bit() (SSP2STATbits.P)
328 #define I2C1_check_start_bit() (SSPSTATbits.S)
330 #ifdef I2C_MODULE_TYPE_2
331 #define I2C2_check_start_bit() (SSP2STATbits.S)
344 #define I2C1_check_bus_collision() (PIR2bits.BCLIF)
346 #ifdef I2C_MODULE_TYPE_2
347 #define I2C2_check_bus_collision() (PIR3bits.BCL2IF)
360 #define I2C1_check_ACK() (SSPCON2bits.ACKSTAT)
362 #ifdef I2C_MODULE_TYPE_2
363 #define I2C2_check_ACK() (SSP2CON2bits.ACKSTAT)
375 #define I2C1_restart_communication() SSPCON2bits.RSEN=1;while(SSPCON2bits.RSEN)
377 #ifdef I2C_MODULE_TYPE_2
378 #define I2C2_restart_communication() SSP2CON2bits.RSEN=1;while(SSP2CON2bits.RSEN)
391 #define I2C1_negative_ACK() SSPCON2bits.ACKDT=1, SSPCON2bits.ACKEN=1;while(SSPCON2bits.ACKEN)
393 #ifdef I2C_MODULE_TYPE_2
394 #define I2C2_negative_ACK() SSP2CON2bits.ACKDT=1, SSP2CON2bits.ACKEN=1;while(SSP2CON2bits.ACKEN)
407 #define I2C1_set_master_as_receiver() SSPCON2bits.RCEN = 1;while (SSPCON2bits.RCEN)
409 #ifdef I2C_MODULE_TYPE_2
410 #define I2C2_set_master_as_receiver() SSP2CON2bits.RCEN = 1; while (SSP2CON2bits.RCEN)