1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-18 05:45:31 +03:00

remove i2c driver function calls and directly read/write I2C->DR

Conflicts:
	src/drivers/bus_i2c_stm32f10x.c
This commit is contained in:
dongie 2014-05-29 09:28:09 +09:00 committed by Dominic Clifton
parent 4e7aa1b4b6
commit 31297de7fa

View file

@ -204,16 +204,18 @@ void i2c_ev_handler(void)
if (reading && subaddress_sent) { // EV7_2, EV7_3 if (reading && subaddress_sent) { // EV7_2, EV7_3
if (bytes > 2) { // EV7_2 if (bytes > 2) { // EV7_2
I2C_AcknowledgeConfig(I2Cx, DISABLE); // turn off ACK I2C_AcknowledgeConfig(I2Cx, DISABLE); // turn off ACK
read_p[index++] = I2C_ReceiveData(I2Cx); // read data N-2 read_p[index++] = (uint8_t)I2Cx->DR; // read data N-2
I2C_GenerateSTOP(I2Cx, ENABLE); // program the Stop I2C_GenerateSTOP(I2Cx, ENABLE); // program the Stop
final_stop = 1; // required to fix hardware final_stop = 1; // reuired to fix hardware
read_p[index++] = I2C_ReceiveData(I2Cx); // read data N-1 read_p[index++] = (uint8_t)I2Cx->DR; // read data N-1
I2C_ITConfig(I2Cx, I2C_IT_BUF, ENABLE); // enable TXE to allow the final EV7 I2C_ITConfig(I2Cx, I2C_IT_BUF, ENABLE); // enable TXE to allow the final EV7
} else { // EV7_3 } else { // EV7_3
if (final_stop) if (final_stop)
I2C_GenerateSTOP(I2Cx, ENABLE); // program the Stop I2C_GenerateSTOP(I2Cx, ENABLE); // program the Stop
else else
I2C_GenerateSTART(I2Cx, ENABLE); // program a rep start I2C_GenerateSTART(I2Cx, ENABLE); // program a rep start
read_p[index++] = (uint8_t)I2Cx->DR; // read data N-1
read_p[index++] = (uint8_t)I2Cx->DR; // read data N
read_p[index++] = I2C_ReceiveData(I2Cx); // read data N-1 read_p[index++] = I2C_ReceiveData(I2Cx); // read data N-1
read_p[index++] = I2C_ReceiveData(I2Cx); // read data N read_p[index++] = I2C_ReceiveData(I2Cx); // read data N
index++; // to show job completed index++; // to show job completed
@ -233,19 +235,19 @@ void i2c_ev_handler(void)
//we must wait for the start to clear, otherwise we get constant BTF //we must wait for the start to clear, otherwise we get constant BTF
while (I2Cx->CR1 & 0x0100); while (I2Cx->CR1 & 0x0100);
} else if (SReg_1 & 0x0040) { //Byte received - EV7 } else if (SReg_1 & 0x0040) { //Byte received - EV7
read_p[index++] = I2C_ReceiveData(I2Cx); read_p[index++] = (uint8_t)I2Cx->DR;
if (bytes == (index + 3)) if (bytes == (index + 3))
I2C_ITConfig(I2Cx, I2C_IT_BUF, DISABLE); // disable TXE to allow the buffer to flush so we can get an EV7_2 I2C_ITConfig(I2Cx, I2C_IT_BUF, DISABLE); // disable TXE to allow the buffer to flush so we can get an EV7_2
if (bytes == index) //We have completed a final EV7 if (bytes == index) //We have completed a final EV7
index++; //to show job is complete index++; //to show job is complete
} else if (SReg_1 & 0x0080) { //Byte transmitted -EV8/EV8_1 } else if (SReg_1 & 0x0080) { //Byte transmitted -EV8/EV8_1
if (index != -1) { //we dont have a subaddress to send if (index != -1) { //we dont have a subaddress to send
I2C_SendData(I2Cx, write_p[index++]); I2Cx->DR = write_p[index++];
if (bytes == index) //we have sent all the data if (bytes == index) //we have sent all the data
I2C_ITConfig(I2Cx, I2C_IT_BUF, DISABLE); //disable TXE to allow the buffer to flush I2C_ITConfig(I2Cx, I2C_IT_BUF, DISABLE); //disable TXE to allow the buffer to flush
} else { } else {
index++; index++;
I2C_SendData(I2Cx, reg); //send the subaddress I2Cx->DR = reg; // send the subaddress
if (reading || !bytes) //if receiving or sending 0 bytes, flush now if (reading || !bytes) //if receiving or sending 0 bytes, flush now
I2C_ITConfig(I2Cx, I2C_IT_BUF, DISABLE); //disable TXE to allow the buffer to flush I2C_ITConfig(I2Cx, I2C_IT_BUF, DISABLE); //disable TXE to allow the buffer to flush
} }