It is based on https://developer.mbed.org/users/gregeric/code/Nucleo_Hello_Encoder/
Diff: rotary_encoder_abz_phase/rotary_encoder_abz_phase.hpp
- Revision:
- 0:caf1d0bc4b90
- Child:
- 1:0b315dd1bbbf
diff -r 000000000000 -r caf1d0bc4b90 rotary_encoder_abz_phase/rotary_encoder_abz_phase.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rotary_encoder_abz_phase/rotary_encoder_abz_phase.hpp Sat Feb 06 14:24:56 2016 +0000 @@ -0,0 +1,42 @@ +#ifndef INCLUDED_ROTARY_ENCODER_A_PHASE_H +#define INCLUDED_ROTARY_ENCODER_A_PHASE_H + +#include "rotary_encoder_base.hpp" +#include "mbed.h" + +/* + * TIM1_CH1: AF1 @ PA_8 + * TIM1_CH2: AF1 @ PA_9 + * + * TIM2_CH1: AF1 @ PA_0 + * TIM2_CH2: AF1 @ PA_1 + * + * TIM3_CH1: AF2 @ PB_4 + * TIM3_CH2: AF2 @ PB_5 + * + * TIM4_CH1: AF2 @ PB_6, PD_12 + * TIM4_CH2: AF2 @ PB_7, PD_13 + * + * TIM5_CH1: AF2 @ PA_0* *TIM5 used by mbed system ticker so unavailable + * TIM5_CH2: AF2 @ PA_1* + * + */ + +class rotary_encoder_abz_phase : public rotary_encoder_base { +public: + rotary_encoder_abz_phase(TIM_TypeDef* timer_type, PinName z_pin, size_t resolution); + virtual ~rotary_encoder_abz_phase() {} + + virtual int32_t get_counts() const; + + virtual void reset(); + +private: + void intr_z_phase_first(); + void intr_z_phase(); + + InterruptIn z_phase_intr_; + uint32_t counts_in_prev_intr_; +}; + +#endif