|
- #ifndef FreqMeasureMultiIMXRT_h
- #define FreqMeasureMultiIMXRT_h
-
- #if defined(__IMXRT1062__)
-
- struct freq_pwm_pin_info_struct {
- IMXRT_FLEXPWM_t *pflexpwm;
- uint8_t module; // 0-3, 0-3
- uint8_t channel; // 0=X, 1=A, 2=B
- uint8_t muxval; //
- uint8_t irq; // which IRQ to use
- void (*isr)(); // interrupt handler.
- volatile uint32_t *select_input_register; // Which register controls the selection
- const uint32_t select_val; // Value for that selection
- };
-
-
-
- class FreqMeasureMulti
- {
- public:
- bool begin(uint32_t pin);
- bool begin(uint32_t pin, uint8_t mode);
- uint32_t available(void);
- uint32_t read(void);
- uint8_t readLevel(void);
- static float countToFrequency(uint32_t count);
- static float countToNanoseconds(uint32_t count);
- void end(void);
- private:
- static const struct freq_pwm_pin_info_struct freq_pwm_pin_info[];
- static FreqMeasureMulti *list[16];
- fmultiRecord buffer_value[FREQMEASUREMULTI_BUFFER_LEN];
- uint8_t buffer_head;
- uint8_t buffer_tail;
-
- IMXRT_FLEXPWM_t *_pflexpwm;
- void processChannelISR(uint8_t channel, uint32_t capture, uint8_t edge);
- void isr();
- uint8_t last_read_level;
-
- uint8_t _pin; // remember the pin number;
- uint8_t _mode; // remember the mode we are using.
- uint8_t _channel;
- FreqMeasureMulti *_next = nullptr; // in case we have multiple ones who are on the same module.
- uint32_t _capture_previous[2]; // Not sure yet
- uint16_t capture_msw = 0;
-
- static void flexpwm1_0_isr();
- static void flexpwm1_1_isr();
- static void flexpwm1_2_isr();
- static void flexpwm1_3_isr();
- static void flexpwm2_0_isr();
- static void flexpwm2_1_isr();
- static void flexpwm2_2_isr();
- static void flexpwm2_3_isr();
- static void flexpwm3_0_isr();
- static void flexpwm3_1_isr();
- static void flexpwm3_3_isr();
- static void flexpwm4_0_isr();
- static void flexpwm4_1_isr();
- static void flexpwm4_2_isr();
- };
-
- #endif // IMXRT
- #endif
|