31 #ifndef _ESOS_PIC24_I2C_H
32 #define _ESOS_PIC24_I2C_H
62 extern struct stTask __stChildTaskI2C, __stGrandChildTaskI2C;
63 extern uint8_t __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
69 #define ESOS_TASK_WAIT_ON_AVAILABLE_I2C() \
71 ESOS_TASK_WAIT_WHILE(__esos_IsSystemFlagSet(__ESOS_SYS_I2C_IS_BUSY)); \
72 __esos_SetSystemFlag(__ESOS_SYS_I2C_IS_BUSY); \
75 #define ESOS_TASK_SIGNAL_AVAILABLE_I2C() __esos_ClearSystemFlag(__ESOS_SYS_I2C_IS_BUSY)
78 #define __PIC24_I2C1_START() \
80 I2C1CONbits.SEN = 1; \
81 ESOS_TASK_WAIT_WHILE( I2C1CONbits.SEN); \
84 #define __PIC24_I2C1_RSTART() \
86 I2C1CONbits.RSEN = 1; \
87 ESOS_TASK_WAIT_WHILE( I2C1CONbits.RSEN); \
90 #define __PIC24_I2C1_STOP() \
92 I2C1CONbits.PEN = 1; \
93 ESOS_TASK_WAIT_WHILE( I2C1CONbits.PEN); \
96 #define __PIC24_I2C1_PUT(byte) \
99 ESOS_TASK_WAIT_WHILE( I2C1STATbits.TRSTAT); \
102 #define ESOS_TASK_WAIT_ON_GETI2C1( pu8_get, u8_ack2Send ) \
103 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stGrandChildTaskI2C, __esos_pic24_getI2C1, (pu8_get), (u8_ack2Send) )
115 #define ESOS_TASK_WAIT_ON_WRITE1I2C1( u8_addr, u8_d1 ) \
117 __esos_i2c_dataBytes[0] = (u8_d1); \
118 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_writeNI2C1, (u8_addr), &__esos_i2c_dataBytes[0], 1 ); \
134 #define ESOS_TASK_WAIT_ON_WRITE2I2C1( u8_addr, u8_d1, u8_d2 ) \
136 __esos_i2c_dataBytes[0] = (u8_d1); \
137 __esos_i2c_dataBytes[1] = (u8_d2); \
138 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_writeNI2C1, (u8_addr), &__esos_i2c_dataBytes[0], 2 ); \
150 #define ESOS_TASK_WAIT_ON_WRITENI2C1( u8_addr, pu8_d, u16_cnt ) \
151 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_writeNI2C1, (u8_addr), (pu8_d), (u16_cnt) )
163 #define ESOS_TASK_WAIT_ON_READ1I2C1( u8_addr, u8_d1 ) \
164 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_readNI2C1, (u8_addr), &(u8_d1), 1 )
181 #define ESOS_TASK_WAIT_ON_READ2I2C1( u8_addr, u8_d1, u8_d2 ) \
183 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_readNI2C1, (u8_addr), &__esos_i2c_dataBytes[0], 2 ); \
184 (u8_d1) = __esos_i2c_dataBytes[0]; \
185 (u8_d2) = __esos_i2c_dataBytes[1]; \
199 #define ESOS_TASK_WAIT_ON_READNI2C1( u8_addr, pu8_d, u16_cnt ) \
200 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskI2C, __esos_pic24_readNI2C1, (u8_addr), (pu8_d), (u16_cnt) )
214 #endif // end ESOS_PIC24_I2C_H