X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_mma655x.c;h=3fd8e064602bc092f00319c2a3878c3b65f0fc80;hb=d0160ed97b432d59e2111d8b17580b9a83e0b03b;hp=b0217368692fb7939ce391663aa815f4aa46132b;hpb=8b2e457db8c4536440ecd7dc35d06f827fc008dc;p=fw%2Faltos diff --git a/src/drivers/ao_mma655x.c b/src/drivers/ao_mma655x.c index b0217368..3fd8e064 100644 --- a/src/drivers/ao_mma655x.c +++ b/src/drivers/ao_mma655x.c @@ -25,17 +25,19 @@ #define DEBUG_LOW 1 #define DEBUG_HIGH 2 #if 1 -#define PRINTD(l, ...) do { if (DEBUG & (l)) { printf ("\r%5u %s: ", ao_tick_count, __func__); printf(__VA_ARGS__); flush(); } } while(0) +#define PRINTD(l, ...) do { if (DEBUG & (l)) { printf ("\r%5lu %s: ", (unsigned long) ao_tick_count, __func__); printf(__VA_ARGS__); flush(); } } while(0) #else #define PRINTD(l,...) #endif +#define AO_MMA655X_SPI_SPEED ao_spi_speed(8333333) /* 120ns clock period */ + static void ao_mma655x_start(void) { ao_spi_get_bit(AO_MMA655X_CS_PORT, AO_MMA655X_CS_PIN, AO_MMA655X_SPI_INDEX, - AO_SPI_SPEED_FAST); + AO_MMA655X_SPI_SPEED); } static void @@ -87,7 +89,7 @@ ao_mma655x_reg_read(uint8_t addr) { uint8_t d[2]; ao_mma655x_start(); - d[0] = addr | (ao_parity(addr) << 7); + d[0] = (uint8_t) (addr | (ao_parity(addr) << 7)); d[1] = 0; ao_spi_send(&d, 2, AO_MMA655X_SPI_INDEX); ao_mma655x_restart(); @@ -108,13 +110,11 @@ ao_mma655x_reg_write(uint8_t addr, uint8_t value) PRINTD(DEBUG_LOW, "write %x %x\n", addr, value); addr |= (1 << 6); /* write mode */ - d[0] = addr | (ao_parity(addr^value) << 7); + d[0] = (uint8_t) (addr | (ao_parity(addr^value) << 7)); d[1] = value; ao_mma655x_start(); ao_spi_send(d, 2, AO_MMA655X_SPI_INDEX); ao_mma655x_stop(); - - addr &= ~(1 << 6); } static uint16_t @@ -141,8 +141,8 @@ ao_mma655x_value(void) PRINTD(DEBUG_LOW, "value RECV %02x %02x\n", d[0], d[1]); v = (uint16_t) d[1] << 2; - v |= d[0] >> 6; - v |= (uint16_t) (d[0] & 3) << 10; + v = (uint16_t) (v | (d[0] >> 6)); + v = (uint16_t) (v | ((d[0] & 3) << 10)); return v; } @@ -223,7 +223,7 @@ ao_mma655x_setup(void) a = ao_mma655x_value(); - st_change = a_st - a; + st_change = (int16_t) (a_st - a); PRINTD(DEBUG_HIGH, "self test %d normal %d change %d\n", a_st, a, st_change);