X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdrivers%2Fao_mma655x.c;h=b0217368692fb7939ce391663aa815f4aa46132b;hb=HEAD;hp=5d44bffdae8982bead6f95152be2d4ddd0acf111;hpb=171d12cb7bb0ea185e9b8b6d90e1c0fb94b19008;p=fw%2Faltos diff --git a/src/drivers/ao_mma655x.c b/src/drivers/ao_mma655x.c index 5d44bffd..f79ea2d7 100644 --- a/src/drivers/ao_mma655x.c +++ b/src/drivers/ao_mma655x.c @@ -25,37 +25,37 @@ #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(AO_MMA655X_SPI_INDEX, 8333333) /* 120ns clock period */ + static void ao_mma655x_start(void) { ao_spi_get_bit(AO_MMA655X_CS_PORT, AO_MMA655X_CS_PIN, - AO_MMA655X_CS, AO_MMA655X_SPI_INDEX, - AO_SPI_SPEED_FAST); + AO_MMA655X_SPI_SPEED); } static void ao_mma655x_stop(void) { ao_spi_put_bit(AO_MMA655X_CS_PORT, AO_MMA655X_CS_PIN, - AO_MMA655X_CS, AO_MMA655X_SPI_INDEX); } static void ao_mma655x_restart(void) { uint8_t i; - ao_gpio_set(AO_MMA655X_CS_PORT, AO_MMA655X_CS_PIN, AO_MMA655X_CS, 1); + ao_gpio_set(AO_MMA655X_CS_PORT, AO_MMA655X_CS_PIN, 1); /* Emperical testing on STM32L151 at 32MHz for this delay amount */ for (i = 0; i < 10; i++) ao_arch_nop(); - ao_gpio_set(AO_MMA655X_CS_PORT, AO_MMA655X_CS_PIN, AO_MMA655X_CS, 0); + ao_gpio_set(AO_MMA655X_CS_PORT, AO_MMA655X_CS_PIN, 0); } static uint8_t @@ -89,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(); @@ -110,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 @@ -143,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; } @@ -225,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); @@ -234,7 +232,7 @@ ao_mma655x_setup(void) ao_delay(AO_ST_DELAY); } if (tries == AO_ST_TRIES) - ao_sensor_errors = 1; + AO_SENSOR_ERROR(AO_DATA_MMA655X); ao_mma655x_reg_write(AO_MMA655X_DEVCFG, DEVCFG_VALUE | (1 << AO_MMA655X_DEVCFG_ENDINIT)); @@ -259,7 +257,7 @@ ao_mma655x_dump(void) printf ("MMA655X value %d\n", ao_mma655x_current); } -__code struct ao_cmds ao_mma655x_cmds[] = { +const struct ao_cmds ao_mma655x_cmds[] = { { ao_mma655x_dump, "A\0Display MMA655X data" }, { 0, NULL }, }; @@ -277,7 +275,7 @@ ao_mma655x(void) } } -static __xdata struct ao_task ao_mma655x_task; +static struct ao_task ao_mma655x_task; void ao_mma655x_init(void)