diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/drivers/ao_quadrature.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/src/drivers/ao_quadrature.c b/src/drivers/ao_quadrature.c index 59e84518..250e035f 100644 --- a/src/drivers/ao_quadrature.c +++ b/src/drivers/ao_quadrature.c @@ -111,7 +111,8 @@ static const struct {  };  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(); @@ -136,6 +137,14 @@ ao_quadrature_isr(void)  #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)  { @@ -204,9 +213,10 @@ static const struct ao_cmds ao_quadrature_cmds[] = {  	{ 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  | 
