summaryrefslogtreecommitdiff
path: root/src/drivers/ao_hmc5883.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-05-06 22:47:33 -0700
committerKeith Packard <keithp@keithp.com>2012-05-06 22:47:33 -0700
commit0f0cc91ce8e9807dca48a5c0c53d821f5060e245 (patch)
tree133cab98a14cbde57db187116022a34bc2394d97 /src/drivers/ao_hmc5883.c
parent69feb1e3d94a028d04529edb015654bafd06353b (diff)
altos: STM i2c work.
Start now driven by interrupts Send now done with DMA and interrupts Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/drivers/ao_hmc5883.c')
-rw-r--r--src/drivers/ao_hmc5883.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/drivers/ao_hmc5883.c b/src/drivers/ao_hmc5883.c
index 0077daf9..43d04f70 100644
--- a/src/drivers/ao_hmc5883.c
+++ b/src/drivers/ao_hmc5883.c
@@ -48,13 +48,10 @@ ao_hmc5883_write(uint8_t addr, uint8_t *data, uint8_t len)
{
ao_i2c_get(AO_HMC5883_I2C_INDEX);
ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_WRITE);
- ao_i2c_send(&addr, 1, AO_HMC5883_I2C_INDEX);
+ ao_i2c_send(&addr, 1, AO_HMC5883_I2C_INDEX, FALSE);
ao_hmc5883_addr_reg = addr;
- if (len) {
- ao_i2c_send(data, len, AO_HMC5883_I2C_INDEX);
- ao_hmc5883_update_addr(len);
- }
- ao_i2c_stop(AO_HMC5883_I2C_INDEX);
+ ao_i2c_send(data, len, AO_HMC5883_I2C_INDEX, TRUE);
+ ao_hmc5883_update_addr(len);
ao_i2c_put(AO_HMC5883_I2C_INDEX);
}
@@ -64,15 +61,12 @@ ao_hmc5883_read(uint8_t addr, uint8_t *data, uint8_t len)
ao_i2c_get(AO_HMC5883_I2C_INDEX);
if (addr != ao_hmc5883_addr_reg) {
ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_WRITE);
- ao_i2c_send(&addr, 1, AO_HMC5883_I2C_INDEX);
+ ao_i2c_send(&addr, 1, AO_HMC5883_I2C_INDEX, FALSE);
ao_hmc5883_addr_reg = addr;
}
ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_READ);
- if (len) {
- ao_i2c_recv(data, len, AO_HMC5883_I2C_INDEX);
- ao_hmc5883_update_addr(len);
- }
- ao_i2c_stop(AO_HMC5883_I2C_INDEX);
+ ao_i2c_recv(data, len, AO_HMC5883_I2C_INDEX, TRUE);
+ ao_hmc5883_update_addr(len);
ao_i2c_put(AO_HMC5883_I2C_INDEX);
}
@@ -92,7 +86,7 @@ ao_hmc5883_setup(void)
ao_i2c_get(AO_HMC5883_I2C_INDEX);
present = ao_i2c_start(AO_HMC5883_I2C_INDEX, HMC5883_ADDR_READ);
- ao_i2c_stop(AO_HMC5883_I2C_INDEX);
+ ao_i2c_recv(NULL, 0, AO_HMC5883_I2C_INDEX, TRUE);
ao_i2c_put(AO_HMC5883_I2C_INDEX);
if (!present)
return 0;
@@ -109,7 +103,7 @@ ao_hmc5883_show(void)
{
ao_i2c_get(AO_HMC5883_I2C_INDEX);
data = ao_i2c_start(AO_HMC5883_I2C_INDEX, addr << 1);
- ao_i2c_stop(AO_HMC5883_I2C_INDEX);
+ ao_i2c_recv(NULL, 0, AO_HMC5883_I2C_INDEX, TRUE);
ao_i2c_put(AO_HMC5883_I2C_INDEX);
if (data)
printf("address %02x responds\n", addr << 1);