stm32f3: Adding convinience functions for sending and receiving i2c data.
This commit is contained in:
parent
3b274fa2f2
commit
9b2873d874
|
@ -435,6 +435,8 @@ void i2c_enable_rxdma(uint32_t i2c);
|
||||||
void i2c_disable_rxdma(uint32_t i2c);
|
void i2c_disable_rxdma(uint32_t i2c);
|
||||||
void i2c_enable_txdma(uint32_t i2c);
|
void i2c_enable_txdma(uint32_t i2c);
|
||||||
void i2c_disable_txdma(uint32_t i2c);
|
void i2c_disable_txdma(uint32_t i2c);
|
||||||
|
void write_i2c(uint32_t i2c, uint8_t i2c_addr, uint8_t reg, uint8_t size, uint8_t *data);
|
||||||
|
void read_i2c(uint32_t i2c, uint8_t i2c_addr, uint8_t reg, uint8_t size, uint8_t *data);
|
||||||
|
|
||||||
END_DECLS
|
END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -398,5 +398,78 @@ void i2c_disable_txdma(uint32_t i2c)
|
||||||
I2C_CR1(i2c) &= ~I2C_CR1_TXDMAEN;
|
I2C_CR1(i2c) &= ~I2C_CR1_TXDMAEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void write_i2c(uint32_t i2c, uint8_t i2c_addr, uint8_t reg, uint8_t size, uint8_t *data) {
|
||||||
|
int wait;
|
||||||
|
int i;
|
||||||
|
while (i2c_busy(i2c) == 1) {}
|
||||||
|
while (i2c_is_start(i2c) == 1) {}
|
||||||
|
/*Setting transfer properties*/
|
||||||
|
i2c_set_bytes_to_transfer(i2c, size+1);
|
||||||
|
i2c_set_7bit_address(i2c, (i2c_addr & 0x7F));
|
||||||
|
i2c_set_write_transfer_dir(i2c);
|
||||||
|
i2c_enable_autoend(i2c);
|
||||||
|
/*start transfer*/
|
||||||
|
i2c_send_start(i2c);
|
||||||
|
|
||||||
|
wait=true;
|
||||||
|
while (wait) {
|
||||||
|
if (i2c_transmit_int_status(i2c)) {
|
||||||
|
wait=false;
|
||||||
|
}
|
||||||
|
while (i2c_nack(i2c)){}
|
||||||
|
}
|
||||||
|
i2c_send_data(i2c, reg);
|
||||||
|
for (i=0; i<size; i++) {
|
||||||
|
wait=true;
|
||||||
|
while (wait) {
|
||||||
|
if (i2c_transmit_int_status(i2c)) {
|
||||||
|
wait=false;
|
||||||
|
}
|
||||||
|
while (i2c_nack(i2c)){}
|
||||||
|
}
|
||||||
|
i2c_send_data(i2c, data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void read_i2c(uint32_t i2c, uint8_t i2c_addr, uint8_t reg, uint8_t size, uint8_t *data)
|
||||||
|
{
|
||||||
|
int wait;
|
||||||
|
int i;
|
||||||
|
while (i2c_busy(i2c) == 1) {}
|
||||||
|
while (i2c_is_start(i2c) == 1) {}
|
||||||
|
/*Setting transfer properties*/
|
||||||
|
i2c_set_bytes_to_transfer(i2c, 1);
|
||||||
|
i2c_set_7bit_address(i2c, i2c_addr);
|
||||||
|
i2c_set_write_transfer_dir(i2c);
|
||||||
|
i2c_disable_autoend(i2c);
|
||||||
|
/*start transfer*/
|
||||||
|
i2c_send_start(i2c);
|
||||||
|
|
||||||
|
wait=true;
|
||||||
|
while (wait)
|
||||||
|
{
|
||||||
|
if (i2c_transmit_int_status(i2c)) {
|
||||||
|
wait=false;
|
||||||
|
}
|
||||||
|
while (i2c_nack(i2c)){} /* Some error */
|
||||||
|
}
|
||||||
|
i2c_send_data(i2c, reg);
|
||||||
|
|
||||||
|
while (i2c_is_start(i2c) == 1) {}
|
||||||
|
/*Setting transfer properties*/
|
||||||
|
i2c_set_bytes_to_transfer(i2c, size);
|
||||||
|
i2c_set_7bit_address(i2c, i2c_addr);
|
||||||
|
i2c_set_read_transfer_dir(i2c);
|
||||||
|
i2c_enable_autoend(i2c);
|
||||||
|
/*start transfer*/
|
||||||
|
i2c_send_start(i2c);
|
||||||
|
|
||||||
|
for (i=0; i<size; i++) {
|
||||||
|
while (i2c_received_data(i2c) == 0) {}
|
||||||
|
data[i]=i2c_get_data(i2c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue