mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-05 06:54:49 +08:00
[peripherals] MPUxxxx: configure multiple I2C slaves
This commit is contained in:
committed by
Gautier Hattenberger
parent
525b441c1f
commit
bee9326c54
@@ -44,6 +44,7 @@ void mpu60x0_set_default_config(struct Mpu60x0Config *c)
|
|||||||
*/
|
*/
|
||||||
c->nb_bytes = 15;
|
c->nb_bytes = 15;
|
||||||
c->nb_slaves = 0;
|
c->nb_slaves = 0;
|
||||||
|
c->nb_slave_init = 0;
|
||||||
|
|
||||||
c->i2c_bypass = FALSE;
|
c->i2c_bypass = FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ struct Mpu60x0Config {
|
|||||||
bool_t i2c_bypass;
|
bool_t i2c_bypass;
|
||||||
|
|
||||||
uint8_t nb_slaves; ///< number of used I2C slaves
|
uint8_t nb_slaves; ///< number of used I2C slaves
|
||||||
|
uint8_t nb_slave_init; ///< number of already configured/initialized slaves
|
||||||
struct Mpu60x0I2cSlave slaves[5]; ///< I2C slaves
|
struct Mpu60x0I2cSlave slaves[5]; ///< I2C slaves
|
||||||
enum Mpu60x0MstClk i2c_mst_clk; ///< MPU I2C master clock speed
|
enum Mpu60x0MstClk i2c_mst_clk; ///< MPU I2C master clock speed
|
||||||
uint8_t i2c_mst_delay; ///< MPU I2C slaves delayed sample rate
|
uint8_t i2c_mst_delay; ///< MPU I2C slaves delayed sample rate
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ void mpu60x0_i2c_event(struct Mpu60x0_I2c *mpu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @todo: only one slave so far. */
|
/** configure the registered I2C slaves */
|
||||||
bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
|
bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
|
||||||
{
|
{
|
||||||
struct Mpu60x0_I2c *mpu_i2c = (struct Mpu60x0_I2c *)(mpu);
|
struct Mpu60x0_I2c *mpu_i2c = (struct Mpu60x0_I2c *)(mpu);
|
||||||
@@ -150,8 +150,15 @@ bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
|
|||||||
mpu_i2c->slave_init_status++;
|
mpu_i2c->slave_init_status++;
|
||||||
break;
|
break;
|
||||||
case MPU60X0_I2C_CONF_SLAVES_CONFIGURE:
|
case MPU60X0_I2C_CONF_SLAVES_CONFIGURE:
|
||||||
/* configure each slave. TODO: currently only one */
|
/* configure each slave until all nb_slaves are done */
|
||||||
if (mpu_i2c->config.slaves[0].configure(mpu_set, mpu)) {
|
if (mpu_i2c->config.nb_slave_init < mpu_i2c->config.nb_slaves) {
|
||||||
|
// proceed to next slave if configure for current one returns true
|
||||||
|
if (mpu_i2c->config.slaves[mpu_i2c->config.nb_slave_init].configure(mpu_set, mpu)) {
|
||||||
|
mpu_i2c->config.nb_slave_init++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
|
||||||
mpu_i2c->slave_init_status++;
|
mpu_i2c->slave_init_status++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ void mpu60x0_spi_event(struct Mpu60x0_Spi *mpu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @todo: only one slave so far. */
|
/** configure the registered I2C slaves */
|
||||||
bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
|
bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
|
||||||
{
|
{
|
||||||
struct Mpu60x0_Spi *mpu_spi = (struct Mpu60x0_Spi *)(mpu);
|
struct Mpu60x0_Spi *mpu_spi = (struct Mpu60x0_Spi *)(mpu);
|
||||||
@@ -175,8 +175,15 @@ bool_t mpu60x0_configure_i2c_slaves(Mpu60x0ConfigSet mpu_set, void *mpu)
|
|||||||
mpu_spi->slave_init_status++;
|
mpu_spi->slave_init_status++;
|
||||||
break;
|
break;
|
||||||
case MPU60X0_SPI_CONF_SLAVES_CONFIGURE:
|
case MPU60X0_SPI_CONF_SLAVES_CONFIGURE:
|
||||||
/* configure first slave, only one slave supported so far */
|
/* configure each slave until all nb_slaves are done */
|
||||||
if (mpu_spi->config.slaves[0].configure(mpu_set, mpu)) {
|
if (mpu_spi->config.nb_slave_init < mpu_spi->config.nb_slaves) {
|
||||||
|
// proceed to next slave if configure for current one returns true
|
||||||
|
if (mpu_spi->config.slaves[mpu_spi->config.nb_slave_init].configure(mpu_set, mpu)) {
|
||||||
|
mpu_spi->config.nb_slave_init++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
|
||||||
mpu_spi->slave_init_status++;
|
mpu_spi->slave_init_status++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ void mpu9250_set_default_config(struct Mpu9250Config *c)
|
|||||||
*/
|
*/
|
||||||
c->nb_bytes = 15;
|
c->nb_bytes = 15;
|
||||||
c->nb_slaves = 0;
|
c->nb_slaves = 0;
|
||||||
|
c->nb_slave_init = 0;
|
||||||
|
|
||||||
c->i2c_bypass = FALSE;
|
c->i2c_bypass = FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ struct Mpu9250Config {
|
|||||||
bool_t i2c_bypass;
|
bool_t i2c_bypass;
|
||||||
|
|
||||||
uint8_t nb_slaves; ///< number of used I2C slaves
|
uint8_t nb_slaves; ///< number of used I2C slaves
|
||||||
|
uint8_t nb_slave_init; ///< number of already configured/initialized slaves
|
||||||
struct Mpu9250I2cSlave slaves[5]; ///< I2C slaves
|
struct Mpu9250I2cSlave slaves[5]; ///< I2C slaves
|
||||||
enum Mpu9250MstClk i2c_mst_clk; ///< MPU I2C master clock speed
|
enum Mpu9250MstClk i2c_mst_clk; ///< MPU I2C master clock speed
|
||||||
uint8_t i2c_mst_delay; ///< MPU I2C slaves delayed sample rate
|
uint8_t i2c_mst_delay; ///< MPU I2C slaves delayed sample rate
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ bool_t imu_mpu9250_configure_mag_slave(Mpu9250ConfigSet mpu_set __attribute__((u
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @todo: only one slave so far. */
|
/** configure the registered I2C slaves */
|
||||||
bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
|
bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
|
||||||
{
|
{
|
||||||
struct Mpu9250_I2c *mpu_i2c = (struct Mpu9250_I2c *)(mpu);
|
struct Mpu9250_I2c *mpu_i2c = (struct Mpu9250_I2c *)(mpu);
|
||||||
@@ -183,8 +183,15 @@ bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
|
|||||||
mpu_i2c->slave_init_status++;
|
mpu_i2c->slave_init_status++;
|
||||||
break;
|
break;
|
||||||
case MPU9250_I2C_CONF_SLAVES_CONFIGURE:
|
case MPU9250_I2C_CONF_SLAVES_CONFIGURE:
|
||||||
/* configure each slave. TODO: currently only one */
|
/* configure each slave until all nb_slaves are done */
|
||||||
if (mpu_i2c->config.slaves[0].configure(mpu_set, mpu)) {
|
if (mpu_i2c->config.nb_slave_init < mpu_i2c->config.nb_slaves) {
|
||||||
|
// proceed to next slave if configure for current one returns true
|
||||||
|
if (mpu_i2c->config.slaves[mpu_i2c->config.nb_slave_init].configure(mpu_set, mpu)) {
|
||||||
|
mpu_i2c->config.nb_slave_init++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
|
||||||
mpu_i2c->slave_init_status++;
|
mpu_i2c->slave_init_status++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ void mpu9250_spi_event(struct Mpu9250_Spi *mpu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @todo: only one slave so far. */
|
/** configure the registered I2C slaves */
|
||||||
bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
|
bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
|
||||||
{
|
{
|
||||||
struct Mpu9250_Spi *mpu_spi = (struct Mpu9250_Spi *)(mpu);
|
struct Mpu9250_Spi *mpu_spi = (struct Mpu9250_Spi *)(mpu);
|
||||||
@@ -172,8 +172,15 @@ bool_t mpu9250_configure_i2c_slaves(Mpu9250ConfigSet mpu_set, void *mpu)
|
|||||||
mpu_spi->slave_init_status++;
|
mpu_spi->slave_init_status++;
|
||||||
break;
|
break;
|
||||||
case MPU9250_SPI_CONF_SLAVES_CONFIGURE:
|
case MPU9250_SPI_CONF_SLAVES_CONFIGURE:
|
||||||
/* configure first slave, only one slave supported so far */
|
/* configure each slave until all nb_slaves are done */
|
||||||
if (mpu_spi->config.slaves[0].configure(mpu_set, mpu)) {
|
if (mpu_spi->config.nb_slave_init < mpu_spi->config.nb_slaves) {
|
||||||
|
// proceed to next slave if configure for current one returns true
|
||||||
|
if (mpu_spi->config.slaves[mpu_spi->config.nb_slave_init].configure(mpu_set, mpu)) {
|
||||||
|
mpu_spi->config.nb_slave_init++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* all slave devies configured, continue MPU side configuration of I2C slave stuff */
|
||||||
mpu_spi->slave_init_status++;
|
mpu_spi->slave_init_status++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user