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);
259 #ifdef I2C_MODULE_TYPE_2
260 signed char I2C2_read_byte_from_external_device (
unsigned char control_byte,
unsigned char register_address);
274 #define I2C1_check_data_ready() (SSPSTATbits.BF)
276 #ifdef I2C_MODULE_TYPE_2
277 #define I2C2_check_data_ready() (SSP2STATbits.BF)
291 #define I2C1_check_read_write_operation() (SSPSTATbits.R_W)
293 #ifdef I2C_MODULE_TYPE_2
294 #define I2C2_check_read_write_operation() (SSP2STATbits.R_W)
307 #define I2C1_check_stop_bit() (SSPSTATbits.P)
309 #ifdef I2C_MODULE_TYPE_2
310 #define I2C2_check_stop_bit() (SSP2STATbits.P)
324 #define I2C1_check_start_bit() (SSPSTATbits.S)
326 #ifdef I2C_MODULE_TYPE_2
327 #define I2C2_check_start_bit() (SSP2STATbits.S)
340 #define I2C1_check_bus_collision() (PIR2bits.BCLIF)
342 #ifdef I2C_MODULE_TYPE_2
343 #define I2C2_check_bus_collision() (PIR3bits.BCL2IF)
356 #define I2C1_check_ACK() (SSPCON2bits.ACKSTAT)
358 #ifdef I2C_MODULE_TYPE_2
359 #define I2C2_check_ACK() (SSP2CON2bits.ACKSTAT)
371 #define I2C1_restart_communication() SSPCON2bits.RSEN=1;while(SSPCON2bits.RSEN)
373 #ifdef I2C_MODULE_TYPE_2
374 #define I2C2_restart_communication() SSP2CON2bits.RSEN=1;while(SSP2CON2bits.RSEN)
387 #define I2C1_negative_ACK() SSPCON2bits.ACKDT=1, SSPCON2bits.ACKEN=1;while(SSPCON2bits.ACKEN)
389 #ifdef I2C_MODULE_TYPE_2
390 #define I2C2_negative_ACK() SSP2CON2bits.ACKDT=1, SSP2CON2bits.ACKEN=1;while(SSP2CON2bits.ACKEN)
403 #define I2C1_set_master_as_receiver() SSPCON2bits.RCEN = 1;while (SSPCON2bits.RCEN)
405 #ifdef I2C_MODULE_TYPE_2
406 #define I2C2_set_master_as_receiver() SSP2CON2bits.RCEN = 1; while (SSP2CON2bits.RCEN)