mirror of
https://github.com/0015/ThatProject.git
synced 2026-01-13 01:37:43 +03:00
45 lines
1.2 KiB
C++
Executable File
45 lines
1.2 KiB
C++
Executable File
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "freertos/queue.h"
|
|
#include "driver/pcnt.h"
|
|
|
|
#define PCNT_H_LIM_VAL INT16_MAX
|
|
#define PCNT_L_LIM_VAL INT16_MIN
|
|
|
|
static pcnt_unit_t unit = PCNT_UNIT_0;
|
|
|
|
void mt8901_init(int16_t sig_pin, int16_t dir_pin) {
|
|
/* Prepare configuration for the PCNT unit */
|
|
pcnt_config_t pcnt_config;
|
|
pcnt_config.pulse_gpio_num = sig_pin;
|
|
pcnt_config.ctrl_gpio_num = dir_pin;
|
|
pcnt_config.channel = PCNT_CHANNEL_0;
|
|
pcnt_config.unit = unit;
|
|
pcnt_config.pos_mode = PCNT_COUNT_DEC;
|
|
pcnt_config.neg_mode = PCNT_COUNT_INC;
|
|
pcnt_config.lctrl_mode = PCNT_MODE_REVERSE;
|
|
pcnt_config.hctrl_mode = PCNT_MODE_KEEP;
|
|
pcnt_config.counter_h_lim = PCNT_H_LIM_VAL;
|
|
pcnt_config.counter_l_lim = PCNT_L_LIM_VAL;
|
|
|
|
/* Initialize PCNT unit */
|
|
pcnt_unit_config(&pcnt_config);
|
|
|
|
/* Configure and enable the input filter */
|
|
pcnt_set_filter_value(unit, 1000);
|
|
pcnt_filter_enable(unit);
|
|
|
|
/* Initialize PCNT's counter */
|
|
pcnt_counter_pause(unit);
|
|
pcnt_counter_clear(unit);
|
|
|
|
/* Everything is set up, now go to counting */
|
|
pcnt_counter_resume(unit);
|
|
}
|
|
|
|
int16_t mt8901_get_count() {
|
|
int16_t count = 0;
|
|
pcnt_get_counter_value(unit, &count);
|
|
return count;
|
|
}
|