i2c, IS31FL3729 cleanup

This commit is contained in:
true 2024-08-03 11:40:10 -07:00
parent 8fb1368e0a
commit 5177b02ab0
4 changed files with 24 additions and 25 deletions

View File

@ -44,7 +44,7 @@ void gpio_init()
gpio.GPIO_Speed = GPIO_Speed_2MHz;
// Soft I2C, USART TX/RX; currently unused
// GAT SoftI2C, USART TX/RX; currently unused
gpio.GPIO_Mode = GPIO_Mode_IPD;
gpio.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
GPIO_Init(GPIOD, &gpio);
@ -65,10 +65,13 @@ void gpio_init()
gpio.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &gpio);
// I2C will be handled by the driver
// I2C SCL, SCA for on-board devices
gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
gpio.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOC, &gpio);
// IS_SDB IS31FL3729 shutdown pin (active low)
// WP for EEPROM
// IS_SDB (PC3) IS31FL3729 shutdown pin (active low)
// WP (PC6) for EEPROM
GPIOC->BCR = GPIO_Pin_3;
GPIOC->BSHR = GPIO_Pin_6;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;

View File

@ -9,11 +9,23 @@
#include "i2c.h"
/* sends the IS31FL3729 general config.
void is31fl3729_set_global_current(uint8_t i2c_addr, uint8_t global_current)
{
i2c_write_reg_8b(i2c_addr, FL3729_REG_G_CURRENT, global_current);
}
void is31fl3729_set_scaling_current(uint8_t i2c_addr, uint8_t cs, uint8_t current)
{
if (cs > 0xf) return;
i2c_write_reg_8b(i2c_addr, FL3729_REG_SCALING + cs, current);
}
/* sends the IS31FL3729 initial config.
* does not configure per-channel current sink limits; do that separately.
* does not configure other sane defaults; do that separately.
*/
void is31fl3729_init(uint8_t i2c_addr, uint8_t config, uint8_t global_current)
{
// enable device
@ -26,7 +38,7 @@ void is31fl3729_init(uint8_t i2c_addr, uint8_t config, uint8_t global_current)
// write initial config
i2c_write_reg_8b(i2c_addr, FL3729_REG_CONFIG, config);
i2c_write_reg_8b(i2c_addr, FL3729_REG_G_CURRENT, global_current);
is31fl3729_set_global_current(i2c_addr, global_current);
}
uint8_t is31fl3729_get_addr(uint8_t adpin)
@ -35,18 +47,6 @@ uint8_t is31fl3729_get_addr(uint8_t adpin)
}
void is31fl3729_set_global_current(uint8_t i2c_addr, uint8_t current)
{
i2c_write_reg_8b(i2c_addr, FL3729_REG_G_CURRENT, current);
}
void is31fl3729_set_scaling_current(uint8_t i2c_addr, uint8_t cs, uint8_t current)
{
if (cs > 0xf) return;
i2c_write_reg_8b(i2c_addr, FL3729_REG_SCALING + cs, current);
}
/*
* sets current limit of multiple outputs simultaneously, starting from CS1.
* useful for initial register configuration.

View File

@ -72,7 +72,7 @@ void is31fl3729_init(uint8_t i2c_addr, uint8_t config, uint8_t global_current);
uint8_t is31fl3729_get_addr(uint8_t adpin);
void is31fl3729_set_global_current(uint8_t i2c_addr, uint8_t current);
void is31fl3729_set_global_current(uint8_t i2c_addr, uint8_t global_current);
void is31fl3729_set_scaling_current(uint8_t i2c_addr, uint8_t cs, uint8_t current);
void is31fl3729_set_scaling_current_multi(uint8_t i2c_addr, const uint8_t *current, uint8_t count);

View File

@ -23,13 +23,9 @@ static uint32_t timeout;
void i2c_init()
{
GPIO_InitTypeDef gpio = {0};
I2C_InitTypeDef i2c = {0};
gpio.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
gpio.GPIO_Mode = GPIO_Mode_AF_OD;
gpio.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &gpio);
// ensure GPIO pins are configured before initializing
i2c.I2C_ClockSpeed = 666666;
i2c.I2C_Mode = I2C_Mode_I2C;