31 #ifndef _ESOS_PIC24_I2C_H
32 #define _ESOS_PIC24_I2C_H
62 extern struct stTask __stChildTaskI2C, __stGrandChildTaskI2C;
63 extern uint8 __esos_i2c_dataBytes[2];
66 #define I2C_WADDR(x) (x & 0xFE) //clear R/W bit of I2C addr
67 #define I2C_RADDR(x) (x | 0x01) //set R/W bit of I2C addr
70 #define __PIC24_I2C1_START() \
72 I2C1CONbits.SEN = 1; \
73 ESOS_TASK_WAIT_WHILE( I2C1CONbits.SEN); \
76 #define __PIC24_I2C1_RSTART() \
78 I2C1CONbits.RSEN = 1; \
79 ESOS_TASK_WAIT_WHILE( I2C1CONbits.RSEN); \
82 #define __PIC24_I2C1_STOP() \
84 I2C1CONbits.PEN = 1; \
85 ESOS_TASK_WAIT_WHILE( I2C1CONbits.PEN); \
88 #define __PIC24_I2C1_PUT(byte) \
91 ESOS_TASK_WAIT_WHILE( I2C1STATbits.TRSTAT); \
94 #define ESOS_TASK_WAIT_ON_GETI2C1( pu8_get, u8_ack2Send ) \
95 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stGrandChildTaskI2C, __esos_pic24_getI2C1, (pu8_get), (u8_ack2Send) )
107 #define ESOS_TASK_WAIT_ON_WRITE1I2C1( u8_addr, u8_d1 ) \
109 __esos_i2c_dataBytes[0] = (u8_d1); \
110 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_writeNI2C1, (u8_addr), &__esos_i2c_dataBytes[0], 1 ); \
126 #define ESOS_TASK_WAIT_ON_WRITE2I2C1( u8_addr, u8_d1, u8_d2 ) \
128 __esos_i2c_dataBytes[0] = (u8_d1); \
129 __esos_i2c_dataBytes[1] = (u8_d2); \
130 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_writeNI2C1, (u8_addr), &__esos_i2c_dataBytes[0], 2 ); \
142 #define ESOS_TASK_WAIT_ON_WRITENI2C1( u8_addr, pu8_d, u16_cnt ) \
143 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_writeNI2C1, (u8_addr), (pu8_d), (u16_cnt) )
155 #define ESOS_TASK_WAIT_ON_READ1I2C1( u8_addr, u8_d1 ) \
156 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_readNI2C1, (u8_addr), &(u8_d1), 1 )
173 #define ESOS_TASK_WAIT_ON_READ2I2C1( u8_addr, u8_d1, u8_d2 ) \
175 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_readNI2C1, (u8_addr), &__esos_i2c_dataBytes[0], 2 ); \
176 (u8_d1) = __esos_i2c_dataBytes[0]; \
177 (u8_d2) = __esos_i2c_dataBytes[1]; \
191 #define ESOS_TASK_WAIT_ON_READNI2C1( u8_addr, pu8_d, u16_cnt ) \
192 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_readNI2C1, (u8_addr), (pu8_d), (u16_cnt) )
206 #endif // end ESOS_PIC24_I2C_H