1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-26 01:35:41 +03:00

Add I2C clockspeed selection

Default is normal speed (400 kHz).
Added 800kHz and 1200kHz selection (overclocking).
This commit is contained in:
ProDrone 2015-09-22 16:16:16 +02:00
parent 57fc0f0a57
commit cce3a1d755
2 changed files with 25 additions and 1 deletions

View file

@ -23,6 +23,7 @@ typedef enum I2CDevice {
I2CDEV_MAX = I2CDEV_2, I2CDEV_MAX = I2CDEV_2,
} I2CDevice; } I2CDevice;
void i2cSetClockSelect(uint8_t clockSelect);
void i2cInit(I2CDevice index); void i2cInit(I2CDevice index);
bool i2cWriteBuffer(uint8_t addr_, uint8_t reg_, uint8_t len_, uint8_t *data); bool i2cWriteBuffer(uint8_t addr_, uint8_t reg_, uint8_t len_, uint8_t *data);
bool i2cWrite(uint8_t addr_, uint8_t reg, uint8_t data); bool i2cWrite(uint8_t addr_, uint8_t reg, uint8_t data);

View file

@ -61,6 +61,7 @@ static const i2cDevice_t i2cHardwareMap[] = {
static I2C_TypeDef *I2Cx = NULL; static I2C_TypeDef *I2Cx = NULL;
// Copy of device index for reinit, etc purposes // Copy of device index for reinit, etc purposes
static I2CDevice I2Cx_index; static I2CDevice I2Cx_index;
static uint8_t i2cClockSelect = 0;
void I2C1_ER_IRQHandler(void) void I2C1_ER_IRQHandler(void)
{ {
@ -312,6 +313,11 @@ void i2c_ev_handler(void)
} }
} }
void i2cSetClockSelect(uint8_t clockSelect)
{
i2cClockSelect = clockSelect;
}
void i2cInit(I2CDevice index) void i2cInit(I2CDevice index)
{ {
NVIC_InitTypeDef nvic; NVIC_InitTypeDef nvic;
@ -340,7 +346,24 @@ void i2cInit(I2CDevice index)
i2c.I2C_Mode = I2C_Mode_I2C; i2c.I2C_Mode = I2C_Mode_I2C;
i2c.I2C_DutyCycle = I2C_DutyCycle_2; i2c.I2C_DutyCycle = I2C_DutyCycle_2;
i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
i2c.I2C_ClockSpeed = 400000; // Overclocking i2c, test results
// Default speed, conform specs is 400000 (400 kHz)
// 2.0* : 800kHz - worked without errors
// 3.0* : 1200kHz - worked without errors
// 3.5* : 1400kHz - failed, hangup, bootpin recovery needed
// 4.0* : 1600kHz - failed, hangup, bootpin recovery needed
switch (i2cClockSelect) {
default:
case 0:
i2c.I2C_ClockSpeed = 400000;
break;
case 1:
i2c.I2C_ClockSpeed = 800000;
break;
case 2:
i2c.I2C_ClockSpeed = 1200000;
break;
}
I2C_Cmd(I2Cx, ENABLE); I2C_Cmd(I2Cx, ENABLE);
I2C_Init(I2Cx, &i2c); I2C_Init(I2Cx, &i2c);