X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_ms5607.c;h=1cddcaf570e540656a2e42b2550a299167c82422;hb=b4960336c0ae960bee40fdd337e58fcc8846ac87;hp=febe01117dbc614e11d309327d830d660f8a2e86;hpb=245a49a85dd7b6a7cb9ec36ad02f6bb66e42f4e2;p=fw%2Faltos diff --git a/src/drivers/ao_ms5607.c b/src/drivers/ao_ms5607.c index febe0111..1cddcaf5 100644 --- a/src/drivers/ao_ms5607.c +++ b/src/drivers/ao_ms5607.c @@ -25,9 +25,7 @@ struct ao_ms5607_prom ao_ms5607_prom; static uint8_t ms5607_configured; -#ifndef AO_MS5607_SPI_SPEED -#define AO_MS5607_SPI_SPEED AO_SPI_SPEED_FAST -#endif +#define AO_MS5607_SPI_SPEED ao_spi_speed(20000000) static void ao_ms5607_start(void) { @@ -61,17 +59,17 @@ ao_ms5607_crc(uint8_t *prom) prom[15] = 0; for (cnt = 0; cnt < 16; cnt++) { - n_rem ^= *p++; + n_rem ^= (uint16_t) *p++; for (n_bit = 8; n_bit > 0; n_bit--) { if (n_rem & 0x8000) - n_rem = (n_rem << 1) ^ 0x3000; + n_rem = (uint16_t) ((n_rem << 1) ^ 0x3000U); else n_rem = (n_rem << 1); } } n_rem = (n_rem >> 12) & 0xf; prom[15] = crc_byte; - return n_rem; + return (uint8_t) n_rem; } static bool @@ -115,7 +113,7 @@ ao_ms5607_prom_read(struct ao_ms5607_prom *prom) if (!ao_ms5607_prom_valid((uint8_t *) prom)) { #if HAS_SENSOR_ERRORS - ao_sensor_errors = 1; + AO_SENSOR_ERROR(AO_DATA_MS5607); #else ao_panic(AO_PANIC_SELF_TEST_MS5607); #endif @@ -156,8 +154,7 @@ ao_ms5607_isr(void) static uint32_t ao_ms5607_get_sample(uint8_t cmd) { - uint8_t reply[3]; - uint8_t read; + uint8_t reply[4]; ao_ms5607_done = 0; @@ -175,18 +172,22 @@ ao_ms5607_get_sample(uint8_t cmd) { ao_sleep((void *) &ao_ms5607_done); ao_arch_release_interrupts(); #if AO_MS5607_PRIVATE_PINS - stm_gpio_set(AO_MS5607_CS_PORT, AO_MS5607_CS_PIN, 1); + ao_gpio_set(AO_MS5607_CS_PORT, AO_MS5607_CS_PIN, 1); #else ao_ms5607_stop(); #endif ao_ms5607_start(); - read = AO_MS5607_ADC_READ; - ao_spi_send(&read, 1, AO_MS5607_SPI_INDEX); - ao_spi_recv(&reply, 3, AO_MS5607_SPI_INDEX); + reply[0] = AO_MS5607_ADC_READ; +#if defined(AO_SPI_DUPLEX) && AO_SPI_DUPLEX == 0 + ao_spi_send(reply, 1, AO_MS5607_SPI_INDEX); + ao_spi_recv(reply+1, 3, AO_MS5607_SPI_INDEX); +#else + ao_spi_duplex(&reply, &reply, 4, AO_MS5607_SPI_INDEX); +#endif ao_ms5607_stop(); - return ((uint32_t) reply[0] << 16) | ((uint32_t) reply[1] << 8) | (uint32_t) reply[2]; + return ((uint32_t) reply[1] << 16) | ((uint32_t) reply[2] << 8) | (uint32_t) reply[3]; } #ifndef AO_MS5607_BARO_OVERSAMPLE