28 #ifndef _ESOS_STM32L4_I2C_H
29 #define _ESOS_STM32L4_I2C_H
50 #include <libopencm3/stm32/i2c.h>
55 extern struct stTask __stChildTaskI2C, __stGrandChildTaskI2C;
56 extern uint8_t __esos_i2c_dataBytes[2];
59 #define CLEAR_REGISTER_BITS(reg,mask) reg &= (~(mask))
60 #define SET_REGISTER_BITS(reg,mask) reg |= (mask)
61 #define MAKE_I2C_WR_ADDR(bits) bits &= 0xFFF
62 #define MAKE_I2C_RD_ADDR(bits) bits &= 0x001
64 #define __ESOS_I2C_STM32L4_SET_WRITE_DIR() I2C1_CR2 &= (~I2C_CR2_RD_WRN)
65 #define __ESOS_I2C_STM32L4_SET_READ_DIR() I2C1_CR2 |= I2C_CR2_RD_WRN
66 #define __ESOS_I2C_STM32L4_SET_NUM_BYTES(x) I2C1_CR2 = (I2C1_CR2 & ~I2C_CR2_NBYTES_MASK) | (x << I2C_CR2_NBYTES_SHIFT) // & ~I2C_CR2_START )|((x) << I2C_CR2_NBYTES_SHIFT)
67 #define __ESOS_I2C_STM32L4_SET_ADDR7_MODE() I2C1_CR2 &= (~I2C_CR2_ADD10)
68 #define __ESOS_I2C_STM32L4_SET_ADDR10_MODE() I2C1_CR2 |= I2C_CR2_ADD10
69 #define __ESOS_I2C_STM32L4_SET_ADDR7(x) I2C1_CR2 = (I2C1_CR2 & ~I2C_CR2_SADD_7BIT_MASK) | ((x & 0x7F) << I2C_CR2_SADD_7BIT_SHIFT) //& ~I2C_CR2_START)|((x) << I2C_CR2_SADD_7BIT_SHIFT)
70 #define __ESOS_I2C_STM32L4_SET_AUTOEND() I2C1_CR2 |= I2C_CR2_AUTOEND
71 #define __ESOS_I2C_STM32L4_CLEAR_AUTOEND() I2C1_CR2 &= (~I2C_CR2_AUTOEND)
72 #define __ESOS_I2C_STM32L4_SET_RELOAD() I2C1_CR2 |= I2C_CR2_RELOAD
73 #define __ESOS_I2C_STM32L4_CLEAR_RELOAD() I2C1_CR2 &= (~I2C_CR2_RELOAD)
74 #define __ESOS_I2C_STM32L4_IS_NACK_RECEIVED() (I2C1_ISR & I2C_ISR_NACKF)
76 #define __ESOS_I2C_STM32L4_CLEAR_STOP_FLAG() I2C1_ICR |= I2C_ICR_STOPCF
77 #define __ESOS_I2C_STM32L4_RESET_CR2() I2C1_CR2 &= (uint32_t)~((uint32_t)(I2C_CR2_SADD_7BIT_MASK | I2C_CR2_HEAD10R | I2C_CR2_NBYTES_MASK | I2C_CR2_RELOAD | I2C_CR2_RD_WRN))
80 #define __ESOS_I2C_STM32L4_IS_BUSY() (I2C1_ISR & I2C_ISR_BUSY)
85 #define __ESOS_I2C_STM32L4_IS_TX_EMPTY() (I2C1_ISR & I2C_ISR_TXIS)
90 #define __ESOS_I2C_STM32L4_IS_RX_NOT_EMPTY() (I2C1_ISR & I2C_ISR_RXNE)
94 #define __ESOS_I2C_HW_START() \
96 I2C1_CR2 |= I2C_CR2_START; \
97 ESOS_TASK_WAIT_WHILE( I2C1_CR2 & I2C_CR2_START); \
100 #define __ESOS_I2C_HW_RSTART() \
102 I2C1CONbits.RSEN = 1; \
103 ESOS_TASK_WAIT_WHILE( I2C1CONbits.RSEN); \
106 #define __ESOS_I2C_HW_STOP() \
108 I2C1_CR2 |= I2C_CR2_STOP; \
109 ESOS_TASK_WAIT_WHILE( I2C1_CR2 & I2C_CR2_STOP); \
112 #define __ESOS_I2C_HW_PUT(byte) \
114 I2C1_TXDR = (byte); \
115 ESOS_TASK_WAIT_UNTIL( __esos_i2c_hw_IsTransferComplete() ); \
124 ESOS_CHILD_TASK( __esos_hw_getI2C1, uint8_t* pu8_x, uint8_t u8_ack2Send);
125 ESOS_CHILD_TASK( __esos_hw_writeNI2C1, uint8_t u8_addr, uint8_t* pu8_d, uint16_t u16_cnt);
126 ESOS_CHILD_TASK( __esos_hw_readNI2C1, uint8_t u8_addr, uint8_t* pu8_d, uint16_t u16_cnt);
129 #endif // end ESOS_STM32L4_I2C_H