summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
4af1fba)
MISO is supposed to rise when the sample value is ready, but sometimes
we miss the interrupt which should be generated. I spent a day
attempting to fix this, but was unable to make it 100%. Instead, add a
10ms timeout, which is longer than the sample time (8.2ms), and then
read MISO directly. If the interrupt fires, we'll read a bit sooner.
Signed-off-by: Keith Packard <keithp@keithp.com>
ao_ms5607_isr(void)
{
ao_exti_disable(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN);
ao_ms5607_isr(void)
{
ao_exti_disable(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN);
ao_wakeup((void *) &ao_ms5607_done);
}
ao_wakeup((void *) &ao_ms5607_done);
}
ao_ms5607_get_sample(uint8_t cmd) {
uint8_t reply[4];
ao_ms5607_get_sample(uint8_t cmd) {
uint8_t reply[4];
- ao_spi_send(&cmd, 1, AO_MS5607_SPI_INDEX);
ao_exti_enable(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN);
ao_exti_enable(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN);
+ ao_spi_send(&cmd, 1, AO_MS5607_SPI_INDEX);
+
#if AO_MS5607_PRIVATE_PINS
#if AO_MS5607_PRIVATE_PINS
- ao_spi_put(AO_MS5607_SPI_INDEX);
+ ao_spi_put_pins(AO_MS5607_SPI_INDEX);
#endif
ao_arch_block_interrupts();
#endif
ao_arch_block_interrupts();
- while (!ao_gpio_get(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN) &&
- !ao_ms5607_done)
- {
+#if !HAS_TASK
+#define ao_sleep_for(a,t) ao_sleep(a)
+#endif
+ while (!ao_gpio_get(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN)) {
if (ao_sleep_for((void *) &ao_ms5607_done, AO_MS_TO_TICKS(10)))
break;
}
if (ao_sleep_for((void *) &ao_ms5607_done, AO_MS_TO_TICKS(10)))
break;
}
+ ao_exti_disable(AO_MS5607_MISO_PORT, AO_MS5607_MISO_PIN);
ao_arch_release_interrupts();
#if AO_MS5607_PRIVATE_PINS
ao_arch_release_interrupts();
#if AO_MS5607_PRIVATE_PINS
- ao_gpio_set(AO_MS5607_CS_PORT, AO_MS5607_CS_PIN, 1);
+ ao_spi_clr_cs(AO_MS5607_CS_PORT, 1 << (AO_MS5607_CS_PIN));
#else
ao_ms5607_stop();
#endif
#else
ao_ms5607_stop();
#endif