diff options
author | Bdale Garbee <bdale@gag.com> | 2018-10-08 17:52:22 -0600 |
---|---|---|
committer | Bdale Garbee <bdale@gag.com> | 2018-10-08 17:52:22 -0600 |
commit | 2450e69d3afd3345a6e5f7ca133d929fbdcfdf53 (patch) | |
tree | c04aa34bdecbf909dbeea8854390364bf140e7ca /src/drivers | |
parent | 449ed72371f80f03dcc5dcf66af5c9465e7ed57e (diff) | |
parent | 5a86ff43a2b4a90dbddc1bba48019626e1b83e10 (diff) |
Merge branch 'branch-1.8' into debian
Diffstat (limited to 'src/drivers')
-rw-r--r-- | src/drivers/ao_mma655x.c | 2 | ||||
-rw-r--r-- | src/drivers/ao_ms5607.c | 47 |
2 files changed, 33 insertions, 16 deletions
diff --git a/src/drivers/ao_mma655x.c b/src/drivers/ao_mma655x.c index b9f1709c..5d44bffd 100644 --- a/src/drivers/ao_mma655x.c +++ b/src/drivers/ao_mma655x.c @@ -30,8 +30,6 @@ #define PRINTD(l,...) #endif -uint8_t ao_mma655x_spi_index = AO_MMA655X_SPI_INDEX; - static void ao_mma655x_start(void) { ao_spi_get_bit(AO_MMA655X_CS_PORT, diff --git a/src/drivers/ao_ms5607.c b/src/drivers/ao_ms5607.c index 914e0c1b..53ed992a 100644 --- a/src/drivers/ao_ms5607.c +++ b/src/drivers/ao_ms5607.c @@ -57,10 +57,11 @@ ao_ms5607_crc(uint8_t *prom) uint8_t cnt; uint16_t n_rem = 0; uint8_t n_bit; + uint8_t *p = prom; prom[15] = 0; for (cnt = 0; cnt < 16; cnt++) { - n_rem ^= prom[cnt]; + n_rem ^= *p++; for (n_bit = 8; n_bit > 0; n_bit--) { if (n_rem & 0x8000) n_rem = (n_rem << 1) ^ 0x3000; @@ -73,12 +74,33 @@ ao_ms5607_crc(uint8_t *prom) return n_rem; } +static int +ao_ms5607_prom_valid(uint8_t *prom) +{ + uint8_t crc; + int i; + uint8_t *p; + + /* Look for a value other than 0x0000 or 0xffff */ + p = prom; + for (i = 0; i < 16; i++) + if (*p++ + 1 > 1) + break; + if (i == 16) + return FALSE; + + crc = ao_ms5607_crc(prom); + if (crc != (prom[15] & 0xf)) + return FALSE; + + return TRUE; +} + static void ao_ms5607_prom_read(__xdata struct ao_ms5607_prom *prom) { - uint8_t addr; - uint8_t crc; - __xdata uint16_t *r; + uint8_t addr; + uint16_t *r; r = (__xdata uint16_t *) prom; for (addr = 0; addr < 8; addr++) { @@ -89,22 +111,19 @@ ao_ms5607_prom_read(__xdata struct ao_ms5607_prom *prom) ao_ms5607_stop(); r++; } - crc = ao_ms5607_crc((uint8_t *) prom); - if (crc != (((uint8_t *) prom)[15] & 0xf)) { -#if HAS_TASK - printf ("MS5607 PROM CRC error (computed %x actual %x)\n", - crc, (((uint8_t *) prom)[15] & 0xf)); - flush(); -#endif + + if (!ao_ms5607_prom_valid((uint8_t *) prom)) ao_panic(AO_PANIC_SELF_TEST_MS5607); - } #if __BYTE_ORDER == __LITTLE_ENDIAN /* Byte swap */ r = (uint16_t *) prom; for (addr = 0; addr < 8; addr++) { - uint16_t t = *r; - *r++ = (t << 8) | (t >> 8); + uint8_t *t = (uint8_t *) r; + uint8_t a = t[0]; + t[0] = t[1]; + t[1] = a; + r++; } #endif } |