Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/FastAccelStepper.h
Original file line number Diff line number Diff line change
Expand Up @@ -795,14 +795,16 @@ class FastAccelStepper {
#if defined(SUPPORT_ESP32_PULSE_COUNTER) && (ESP_IDF_VERSION_MAJOR == 5)
bool attachToPulseCounter(uint8_t unused_pcnt_unit = 0,
int16_t low_value = -16384,
int16_t high_value = 16384);
int16_t high_value = 16384,
uint8_t dir_pin_readback = PIN_UNDEFINED);
int16_t readPulseCounter();
void clearPulseCounter();
inline bool pulseCounterAttached() { return _attached_pulse_unit != NULL; }
#endif
#if defined(SUPPORT_ESP32_PULSE_COUNTER) && (ESP_IDF_VERSION_MAJOR == 4)
bool attachToPulseCounter(uint8_t pcnt_unit, int16_t low_value = -16384,
int16_t high_value = 16384);
int16_t high_value = 16384,
uint8_t dir_pin_readback = PIN_UNDEFINED);
int16_t readPulseCounter();
void clearPulseCounter();
inline bool pulseCounterAttached() { return _attached_pulse_cnt_unit >= 0; }
Expand Down
11 changes: 7 additions & 4 deletions src/FastAccelStepper_idf4_esp32_pcnt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,19 @@ uint32_t ctrl_idx[SUPPORT_ESP32_PULSE_COUNTER] = {

bool FastAccelStepper::attachToPulseCounter(uint8_t pcnt_unit,
int16_t low_value,
int16_t high_value) {
int16_t high_value,
uint8_t dir_pin) {
if (pcnt_unit >= SUPPORT_ESP32_PULSE_COUNTER) {
return false;
}

pcnt_config_t cfg;
uint8_t dir_pin = getDirectionPin();
uint8_t step_pin = getStepPin();
cfg.pulse_gpio_num = PCNT_PIN_NOT_USED;
if (dir_pin == PIN_UNDEFINED) {
dir_pin = getDirectionPin();
}
cfg.pulse_gpio_num = PCNT_PIN_NOT_USED;
if (dir_pin == PIN_UNDEFINED || (dir_pin & PIN_EXTERNAL_FLAG) != 0) {
cfg.ctrl_gpio_num = PCNT_PIN_NOT_USED;
cfg.hctrl_mode = PCNT_MODE_KEEP;
cfg.lctrl_mode = PCNT_MODE_KEEP;
Expand Down Expand Up @@ -64,7 +67,7 @@ bool FastAccelStepper::attachToPulseCounter(uint8_t pcnt_unit,
gpio_matrix_in(step_pin, sig_idx[pcnt_unit], 0);
gpio_iomux_in(step_pin,
sig_idx[pcnt_unit]); // test failure without this call
if (dir_pin != PIN_UNDEFINED) {
if (dir_pin != PIN_UNDEFINED && (dir_pin & PIN_EXTERNAL_FLAG) == 0) {
pinMode(dir_pin, OUTPUT);
gpio_matrix_out(dir_pin, 0x100, false, false);
gpio_matrix_in(dir_pin, ctrl_idx[pcnt_unit], 0);
Expand Down
13 changes: 9 additions & 4 deletions src/FastAccelStepper_idf5_esp32_pcnt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ struct pcnt_chan_t {

bool FastAccelStepper::attachToPulseCounter(uint8_t unused_pcnt_unit,
int16_t low_value,
int16_t high_value) {
int16_t high_value,
uint8_t dir_pin) {
pcnt_unit_config_t config = {.low_limit = low_value,
.high_limit = high_value,
.intr_priority = 0,
Expand All @@ -44,8 +45,12 @@ bool FastAccelStepper::attachToPulseCounter(uint8_t unused_pcnt_unit,

pcnt_channel_level_action_t level_high = PCNT_CHANNEL_LEVEL_ACTION_KEEP;
pcnt_channel_level_action_t level_low = PCNT_CHANNEL_LEVEL_ACTION_KEEP;
uint8_t dir_pin = getDirectionPin();
if (dir_pin != PIN_UNDEFINED) {

if (dir_pin == PIN_UNDEFINED) {
dir_pin = getDirectionPin();
}

if (dir_pin != PIN_UNDEFINED && (dir_pin & PIN_EXTERNAL_FLAG) == 0) {
chan_config.level_gpio_num = dir_pin;
if (directionPinHighCountsUp()) {
level_low = PCNT_CHANNEL_LEVEL_ACTION_INVERSE;
Expand Down Expand Up @@ -105,7 +110,7 @@ bool FastAccelStepper::attachToPulseCounter(uint8_t unused_pcnt_unit,
.pulse_sig;
gpio_matrix_in(step_pin, signal, 0);
gpio_iomux_in(step_pin, signal);
if (dir_pin != PIN_UNDEFINED) {
if (dir_pin != PIN_UNDEFINED && (dir_pin & PIN_EXTERNAL_FLAG) == 0) {
pinMode(dir_pin, OUTPUT);
int control = pcnt_periph_signals.groups[0]
.units[unit_id]
Expand Down