cleanup is31fl3729 driver; LED updates only when needed now
This commit is contained in:
parent
5adce05f84
commit
5d722f41e8
|
@ -16,20 +16,17 @@
|
||||||
|
|
||||||
void is31fl3729_init(uint8_t i2c_addr, uint8_t config, uint8_t global_current)
|
void is31fl3729_init(uint8_t i2c_addr, uint8_t config, uint8_t global_current)
|
||||||
{
|
{
|
||||||
uint8_t buf;
|
|
||||||
|
|
||||||
// enable device
|
// enable device
|
||||||
#ifdef FL3729_SDB_PORT
|
#ifdef FL3729_SDB_PORT
|
||||||
FL3729_SDB_PORT->BSHR = FL3729_SDB_PIN;
|
FL3729_SDB_PORT->BSHR = FL3729_SDB_PIN;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// reset config registers
|
// reset config registers
|
||||||
buf = FL3729_RESET_VALUE;
|
i2c_write_reg_8b(i2c_addr, FL3729_REG_CONFIG, FL3729_RESET_VALUE);
|
||||||
i2c_write_addr1b(i2c_addr, FL3729_REG_RESET, &buf, 1);
|
|
||||||
|
|
||||||
// write initial config
|
// write initial config
|
||||||
i2c_write_addr1b(i2c_addr, FL3729_REG_CONFIG, &config, 1);
|
i2c_write_reg_8b(i2c_addr, FL3729_REG_CONFIG, config);
|
||||||
i2c_write_addr1b(i2c_addr, FL3729_REG_G_CURRENT, &global_current, 1);
|
i2c_write_reg_8b(i2c_addr, FL3729_REG_G_CURRENT, global_current);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t is31fl3729_get_addr(uint8_t adpin)
|
uint8_t is31fl3729_get_addr(uint8_t adpin)
|
||||||
|
@ -40,21 +37,21 @@ 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 current)
|
||||||
{
|
{
|
||||||
i2c_write_addr1b(i2c_addr, FL3729_REG_G_CURRENT, ¤t, 1);
|
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)
|
void is31fl3729_set_scaling_current(uint8_t i2c_addr, uint8_t cs, uint8_t current)
|
||||||
{
|
{
|
||||||
if (cs > 0xf) return;
|
if (cs > 0xf) return;
|
||||||
|
|
||||||
i2c_write_addr1b(i2c_addr, FL3729_REG_SCALING + cs, ¤t, 1);
|
i2c_write_reg_8b(i2c_addr, FL3729_REG_SCALING + cs, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sets current limit of multiple outputs simultaneously, starting from CS1.
|
* sets current limit of multiple outputs simultaneously, starting from CS1.
|
||||||
* useful for initial register configuration.
|
* useful for initial register configuration.
|
||||||
*/
|
*/
|
||||||
void is31fl3729_set_scaling_current_multi(uint8_t i2c_addr, uint8_t *current, uint8_t count)
|
void is31fl3729_set_scaling_current_multi(uint8_t i2c_addr, const uint8_t *current, uint8_t count)
|
||||||
{
|
{
|
||||||
if (!count) return;
|
if (!count) return;
|
||||||
count &= 0xf;
|
count &= 0xf;
|
||||||
|
@ -67,9 +64,9 @@ void is31fl3729_set_scaling_current_multi(uint8_t i2c_addr, uint8_t *current, ui
|
||||||
* sw: first switch segment to update. usually set this to 1 for the first switch.
|
* sw: first switch segment to update. usually set this to 1 for the first switch.
|
||||||
* if set to 0, will default to 1.
|
* if set to 0, will default to 1.
|
||||||
* *out: output data buffer
|
* *out: output data buffer
|
||||||
* len: length of buffer
|
* len: length of buffer. up to end user to not exceed writing beyond register 0x90.
|
||||||
*/
|
*/
|
||||||
void is31fl3729_set_outputs(uint8_t i2c_addr, uint8_t sw, uint8_t *out, uint8_t len)
|
void is31fl3729_set_outputs(uint8_t i2c_addr, uint8_t sw, const uint8_t *out, uint8_t len)
|
||||||
{
|
{
|
||||||
if (!sw) sw = 1;
|
if (!sw) sw = 1;
|
||||||
|
|
||||||
|
|
|
@ -34,15 +34,15 @@
|
||||||
|
|
||||||
#define FL3729_GCC_MAX 64 // maximum global current level
|
#define FL3729_GCC_MAX 64 // maximum global current level
|
||||||
|
|
||||||
#define FL3729_CONF_SHDN_ENA 0
|
#define FL3729_CONF_SSD_SHDN (0 << 0) // software shutdown
|
||||||
#define FL3729_CONF_SHDN_DIS ((1 << 0) << 0)
|
#define FL3729_CONF_SSD_NRML (1 << 0) // normal operation
|
||||||
|
|
||||||
#define FL3729_CONF_OSDE_OFF 0
|
#define FL3729_CONF_OSDE_OFF (0 << 1)
|
||||||
#define FL3729_CONF_OSDE_OPEN ((1 << 0) << 1)
|
#define FL3729_CONF_OSDE_OPEN (1 << 1)
|
||||||
#define FL3729_CONF_OSDE_SHORT ((1 << 1) << 1)
|
#define FL3729_CONF_OSDE_SHORT (2 << 1)
|
||||||
|
|
||||||
#define FL3729_CONF_LOGIC_LOLEV 0
|
#define FL3729_CONF_LOGIC_LOLEV (0 << 3)
|
||||||
#define FL3729_CONF_LOGIC_HILEV ((1 << 0) << 3)
|
#define FL3729_CONF_LOGIC_HILEV (1 << 3)
|
||||||
|
|
||||||
#define FL3729_CONF_MATRIX_9x15 0x00
|
#define FL3729_CONF_MATRIX_9x15 0x00
|
||||||
#define FL3729_CONF_MATRIX_8x16 0x10
|
#define FL3729_CONF_MATRIX_8x16 0x10
|
||||||
|
@ -68,25 +68,15 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
typedef struct IS31FL3729_Conf {
|
|
||||||
uint8_t ad_pin;
|
|
||||||
uint8_t config;
|
|
||||||
uint8_t global_brightness;
|
|
||||||
} IS31FL3729_Conf;
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
void is31fl3729_init(uint8_t i2c_addr, uint8_t config, uint8_t global_current);
|
void is31fl3729_init(uint8_t i2c_addr, uint8_t config, uint8_t global_current);
|
||||||
|
|
||||||
uint8_t is31fl3729_get_addr(uint8_t adpin);
|
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 current);
|
||||||
void is31fl3729_set_scaling_current(uint8_t i2c_addr, uint8_t cs, uint8_t 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, uint8_t *current, uint8_t count);
|
void is31fl3729_set_scaling_current_multi(uint8_t i2c_addr, const uint8_t *current, uint8_t count);
|
||||||
|
|
||||||
void is31fl3729_set_outputs(uint8_t i2c_addr, uint8_t sw, uint8_t *out, uint8_t len);
|
void is31fl3729_set_outputs(uint8_t i2c_addr, uint8_t sw, const uint8_t *out, uint8_t len);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ uint8_t i2c_read_reg_8b(uint8_t addr, uint8_t reg)
|
||||||
return dat;
|
return dat;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8_t i2c_write_addr1b(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len)
|
int8_t i2c_write_addr1b(uint8_t addr, uint8_t reg, const uint8_t *data, uint8_t len)
|
||||||
{
|
{
|
||||||
timeout = I2C_TIMEOUT;
|
timeout = I2C_TIMEOUT;
|
||||||
while((I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY) != RESET) && timeout--);
|
while((I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY) != RESET) && timeout--);
|
||||||
|
@ -136,7 +136,7 @@ int8_t i2c_write_addr1b(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void i2c_write_reg_8b(uint8_t addr, uint8_t reg, uint8_t dat)
|
void i2c_write_reg_8b(uint8_t addr, uint8_t reg, const uint8_t dat)
|
||||||
{
|
{
|
||||||
i2c_write_addr1b(addr, reg, &dat, 1);
|
i2c_write_addr1b(addr, reg, &dat, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
void i2c_init();
|
void i2c_init();
|
||||||
|
|
||||||
int8_t i2c_read_addr1b(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len);
|
int8_t i2c_read_addr1b(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len);
|
||||||
int8_t i2c_write_addr1b(uint8_t addr, uint8_t reg, uint8_t *data, uint8_t len);
|
int8_t i2c_write_addr1b(uint8_t addr, uint8_t reg, const uint8_t *data, uint8_t len);
|
||||||
|
|
||||||
uint8_t i2c_read_reg_8b(uint8_t addr, uint8_t reg);
|
uint8_t i2c_read_reg_8b(uint8_t addr, uint8_t reg);
|
||||||
void i2c_write_reg_8b(uint8_t addr, uint8_t reg, uint8_t dat);
|
void i2c_write_reg_8b(uint8_t addr, uint8_t reg, const uint8_t dat);
|
||||||
|
|
||||||
int8_t i2c_ack_poll(uint8_t devaddr);
|
int8_t i2c_ack_poll(uint8_t devaddr);
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ void led_init()
|
||||||
uint8_t buf[FL3729_CS_OUTPUTS] = {0xff};
|
uint8_t buf[FL3729_CS_OUTPUTS] = {0xff};
|
||||||
|
|
||||||
is31fl3729_init(FL3729_ADDR,
|
is31fl3729_init(FL3729_ADDR,
|
||||||
FL3729_CONF_SHDN_DIS | FL3729_CONF_OSDE_OFF | FL3729_CONF_MATRIX_2x16,
|
FL3729_CONF_SSD_NRML | FL3729_CONF_OSDE_OFF | FL3729_CONF_MATRIX_2x16,
|
||||||
LED_INIT_CURRENT);
|
LED_INIT_CURRENT);
|
||||||
|
|
||||||
for (i = 0; i < FL3729_CS_OUTPUTS; i++) buf[i] = LED_INIT_SCALING;
|
for (i = 0; i < FL3729_CS_OUTPUTS; i++) buf[i] = LED_INIT_SCALING;
|
||||||
|
@ -83,6 +83,8 @@ void led_send()
|
||||||
out[cursor_map[2]] = cursor[2];
|
out[cursor_map[2]] = cursor[2];
|
||||||
|
|
||||||
is31fl3729_set_outputs(FL3729_ADDR, 1, out, 16+15);
|
is31fl3729_set_outputs(FL3729_ADDR, 1, out, 16+15);
|
||||||
|
|
||||||
|
led_updated = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue