7 #include "I2C_Interface.h" 8 #include "I2C_Master.h" 10 uint8_t I2C_Peripheral_Start(
void)
20 uint8_t I2C_Peripheral_Stop(
void)
28 uint8_t I2C_Peripheral_SendStop(
void)
30 I2C_Master_MasterSendStop();
34 uint8_t I2C_Peripheral_ReadRegister(uint8_t device_address,
35 uint8_t register_address,
39 uint8_t error = I2C_Master_MasterSendStart(device_address,I2C_Master_WRITE_XFER_MODE);
40 if (error == I2C_Master_MSTR_NO_ERROR)
43 error = I2C_Master_MasterWriteByte(register_address);
44 if (error == I2C_Master_MSTR_NO_ERROR)
47 error = I2C_Master_MasterSendRestart(device_address, I2C_Master_READ_XFER_MODE);
48 if (error == I2C_Master_MSTR_NO_ERROR)
51 *data = I2C_Master_MasterReadByte(I2C_Master_ACK_DATA);
53 I2C_Master_MasterSendStop();
59 I2C_Master_MasterSendStop();
61 return I2C_DEV_NOT_FOUND;
64 uint8_t I2C_Peripheral_ReadRegisterMulti(uint8_t device_address,
65 uint8_t register_address,
66 uint16_t register_count,
70 uint8_t error = I2C_Master_MasterSendStart(device_address,I2C_Master_WRITE_XFER_MODE);
71 if (error == I2C_Master_MSTR_NO_ERROR)
75 error = I2C_Master_MasterWriteByte(register_address);
76 if (error == I2C_Master_MSTR_NO_ERROR)
79 error = I2C_Master_MasterSendRestart(device_address, I2C_Master_READ_XFER_MODE);
80 if (error == I2C_Master_MSTR_NO_ERROR)
83 uint16_t counter = register_count;
86 data[register_count-counter] =
87 I2C_Master_MasterReadByte(I2C_Master_ACK_DATA);
91 data[register_count-1]
92 = I2C_Master_MasterReadByte(I2C_Master_NAK_DATA);
94 I2C_Master_MasterSendStop();
100 I2C_Master_MasterSendStop();
102 return I2C_DEV_NOT_FOUND;
105 uint8_t I2C_Peripheral_ReadRegisterMultiNoAddress(uint8_t device_address,
106 uint16_t register_count,
110 uint8_t error = I2C_Master_MasterSendStart(device_address, I2C_Master_READ_XFER_MODE);
111 if (error == I2C_Master_MSTR_NO_ERROR)
114 uint16_t counter = register_count;
117 data[register_count-counter] =
118 I2C_Master_MasterReadByte(I2C_Master_ACK_DATA);
122 data[register_count-1] = I2C_Master_MasterReadByte(I2C_Master_NAK_DATA);
124 I2C_Master_MasterSendStop();
128 I2C_Master_MasterSendStop();
130 return I2C_DEV_NOT_FOUND;
133 uint8_t I2C_Peripheral_StartReadNoAddress(uint8_t device_address)
136 uint8_t error = I2C_Master_MasterSendStart(device_address, I2C_Master_READ_XFER_MODE);
137 if (error == I2C_Master_MSTR_NO_ERROR)
142 return I2C_DEV_NOT_FOUND;
145 uint8_t I2C_Peripheral_ReadBytes(uint8_t* data, uint8_t len)
148 uint16_t counter = len;
151 data[len-counter] = I2C_Master_MasterReadByte(I2C_Master_ACK_DATA);
158 uint8_t I2C_Peripheral_WriteRegister(uint8_t device_address,
159 uint8_t register_address,
163 uint8_t error = I2C_Master_MasterSendStart(device_address, I2C_Master_WRITE_XFER_MODE);
164 if (error == I2C_Master_MSTR_NO_ERROR)
167 error = I2C_Master_MasterWriteByte(register_address);
168 if (error == I2C_Master_MSTR_NO_ERROR)
171 error = I2C_Master_MasterWriteByte(data);
172 if (error == I2C_Master_MSTR_NO_ERROR)
175 I2C_Master_MasterSendStop();
182 I2C_Master_MasterSendStop();
184 return I2C_DEV_NOT_FOUND;
187 uint8_t I2C_Peripheral_WriteRegisterNoData(uint8_t device_address,
188 uint8_t register_address)
191 uint8_t error = I2C_Master_MasterSendStart(device_address, I2C_Master_WRITE_XFER_MODE);
192 if (error == I2C_Master_MSTR_NO_ERROR)
195 error = I2C_Master_MasterWriteByte(register_address);
196 if (error == I2C_Master_MSTR_NO_ERROR)
199 I2C_Master_MasterSendStop();
206 I2C_Master_MasterSendStop();
208 return I2C_DEV_NOT_FOUND;
211 uint8_t I2C_Peripheral_WriteRegisterMulti(uint8_t device_address,
212 uint8_t register_address,
213 uint8_t register_count,
217 uint8_t error = I2C_Master_MasterSendStart(device_address, I2C_Master_WRITE_XFER_MODE);
218 if (error == I2C_Master_MSTR_NO_ERROR)
221 error = I2C_Master_MasterWriteByte(register_address);
222 if (error == I2C_Master_MSTR_NO_ERROR)
225 uint8_t counter = register_count;
228 error = I2C_Master_MasterWriteByte(data[register_count-counter]);
229 if (error != I2C_Master_MSTR_NO_ERROR)
232 I2C_Master_MasterSendStop();
239 I2C_Master_MasterSendStop();
244 I2C_Master_MasterSendStop();
246 return I2C_DEV_NOT_FOUND;
250 uint8_t I2C_Peripheral_IsDeviceConnected(uint8_t device_address)
253 uint8_t error = I2C_Master_MasterSendStart(device_address, I2C_Master_WRITE_XFER_MODE);
254 I2C_Master_MasterSendStop();
256 if (error == I2C_Master_MSTR_NO_ERROR)
262 return I2C_DEV_NOT_FOUND;