#include <ao_fast_timer.h>
#include <ao_event.h>
-__xdata int32_t ao_quadrature_count[AO_QUADRATURE_COUNT];
+int32_t ao_quadrature_count[AO_QUADRATURE_COUNT];
#ifndef AO_QUADRATURE_SINGLE_CODE
static int8_t ao_quadrature_step[AO_QUADRATURE_COUNT];
#endif
};
static void
-_ao_quadrature_set(uint8_t q, uint8_t new) {
+_ao_quadrature_set(uint8_t q, uint8_t new)
+{
uint8_t old;
ao_arch_block_interrupts();
#endif
}
+static void
+_ao_quadrature_start_one(uint8_t q, uint8_t new)
+{
+ ao_arch_block_interrupts();
+ ao_quadrature_state[q] = new;
+ ao_arch_release_interrupts();
+}
+
int32_t
ao_quadrature_poll(uint8_t q)
{
int8_t t = 0;
#endif
- ao_cmd_decimal();
- q = ao_cmd_lex_i;
+ q = ao_cmd_decimal();
if (q >= AO_QUADRATURE_COUNT)
ao_cmd_status = ao_cmd_syntax_error;
if (ao_cmd_status != ao_cmd_success)
t = ao_quadrature_step[q];
printf("step %3d ", t);
#endif
- printf ("count %3d state %2x\n", c, s);
+ printf ("count %3ld state %2x\n", (long) c, s);
flush();
}
}
{ 0, NULL }
};
-#define init(q) do { \
- ao_enable_input(port(q), bita(q), 0); \
- ao_enable_input(port(q), bitb(q), 0); \
+#define init(q) do { \
+ ao_enable_input(port(q), bita(q), 0); \
+ ao_enable_input(port(q), bitb(q), 0); \
+ _ao_quadrature_start_one(q, _ao_quadrature_get(q)); \
} while (0)
void