X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_mmc5983.c;h=02df7a2661e82149403f16215db53101c0c2ef3b;hb=5cea1324ac4a34a21324c4bb50885ffacb6d29da;hp=73e30d0390bde6e3cb8fc82b419c5a456d2b3fa8;hpb=b140da92536d7c48ba37868f1c2afce7bb86dfdb;p=fw%2Faltos diff --git a/src/drivers/ao_mmc5983.c b/src/drivers/ao_mmc5983.c index 73e30d03..02df7a26 100644 --- a/src/drivers/ao_mmc5983.c +++ b/src/drivers/ao_mmc5983.c @@ -30,6 +30,60 @@ static struct ao_mmc5983_sample ao_mmc5983_offset; static uint8_t ao_mmc5983_configured; #ifdef MMC5983_I2C +#ifdef AO_MMC5983_I2C_INDEX + +static void +ao_mmc5983_start(void) { + ao_i2c_get(AO_MMC5983_I2C_INDEX); +} + +static void +ao_mmc5983_stop(void) { + ao_i2c_put(AO_MMC5983_I2C_INDEX); +} + +static void +ao_mmc5983_reg_write(uint8_t addr, uint8_t data) +{ + uint8_t d[2]; + + d[0] = addr; + d[1] = data; + + ao_mmc5983_start(); + ao_i2c_start(AO_MMC5983_I2C_INDEX, MMC5983_I2C_ADDR); + ao_i2c_send(d, 2, AO_MMC5983_I2C_INDEX, true); + ao_mmc5983_stop(); +} + +static uint8_t +ao_mmc5983_reg_read(uint8_t addr) +{ + uint8_t d[1]; + + ao_mmc5983_start(); + ao_i2c_start(AO_MMC5983_I2C_INDEX, MMC5983_I2C_ADDR); + d[0] = addr; + ao_i2c_send(d, 1, AO_MMC5983_I2C_INDEX, false); + ao_i2c_start(AO_MMC5983_I2C_INDEX, MMC5983_I2C_ADDR | 1); + ao_i2c_recv(d, 1, AO_MMC5983_I2C_INDEX, true); + ao_mmc5983_stop(); + return d[0]; +} + +static void +ao_mmc5983_raw(struct ao_mmc5983_raw *raw) +{ + ao_mmc5983_start(); + ao_i2c_start(AO_MMC5983_I2C_INDEX, MMC5983_I2C_ADDR); + raw->addr = MMC5983_X_OUT_0; + ao_i2c_send(&(raw->addr), 1, AO_MMC5983_I2C_INDEX, false); + ao_i2c_start(AO_MMC5983_I2C_INDEX, MMC5983_I2C_ADDR | 1); + ao_i2c_recv(&(raw->x0), sizeof(*raw) - 1, AO_MMC5983_I2C_INDEX, true); + ao_mmc5983_stop(); +} + +#else #include static void @@ -70,8 +124,10 @@ ao_mmc5983_raw(struct ao_mmc5983_raw *raw) ao_i2c_bit_stop(); } +#endif + #else -#define AO_MMC5983_SPI_SPEED ao_spi_speed(2000000) +#define AO_MMC5983_SPI_SPEED ao_spi_speed(AO_MMC5983_SPI_INDEX, 2000000) static void ao_mmc5983_start(void) { @@ -356,9 +412,7 @@ ao_mmc5983_init(void) { ao_mmc5983_configured = 0; -#ifdef MMC5983_I2C - ao_enable_output(AO_MMC5983_SPI_CS_PORT, AO_MMC5983_SPI_CS_PIN, 1); -#else +#ifndef MMC5983_I2C ao_enable_input(AO_MMC5983_SPI_MISO_PORT, AO_MMC5983_SPI_MISO_PIN, AO_EXTI_MODE_PULL_NONE);