Added: Getting steps remaining on stop

This commit is contained in:
AlexanderHD27
2024-09-26 18:46:44 +02:00
parent 1ad6c75788
commit b2ffcb5d72
4 changed files with 76 additions and 85 deletions

View File

@@ -22,15 +22,20 @@ counter:
JMP X-- l1
l1:
PULL NOBLOCK
MOV Y, OSR
JMP !Y l1_end
IRQ WAIT 2 REL
SET PINS, 1
SET PINS, 1
IRQ WAIT 2 REL
SET PINS, 0
MOV X, OSR
JMP X-- l1
l1_end:
MOV ISR, X
PUSH NOBLOCK
IRQ SET 0 REL
; SM 2 + 0 -> IRQ 2
; SM 3 + 0 -> IRQ 3

View File

@@ -47,18 +47,19 @@ TMC2209_step_dual::TMC2209_step_dual(
void TMC2209_step_dual::init_gpio() {
gpio_init(this->enable0_pin);
gpio_init(this->enable1_pin);
gpio_init(this->dir0_pin);
gpio_init(this->dir1_pin);
gpio_set_dir(this->enable0_pin, GPIO_OUT);
gpio_set_dir(this->enable1_pin, GPIO_OUT);
gpio_set_dir(this->dir0_pin, GPIO_OUT);
gpio_set_dir(this->dir1_pin, GPIO_OUT);
gpio_put(this->enable0_pin, 0);
gpio_put(this->enable1_pin, 0);
gpio_put(this->dir0_pin, 0);
gpio_put(this->dir1_pin, 0);
sleep_ms(1);
gpio_init(this->dir0_pin);
gpio_init(this->dir1_pin);
gpio_set_dir(this->dir0_pin, GPIO_OUT);
gpio_set_dir(this->dir1_pin, GPIO_OUT);
gpio_put(this->dir0_pin, 1);
gpio_put(this->dir1_pin, 1);
sleep_ms(1);
};
void TMC2209_step_dual::init_pio() {
@@ -76,8 +77,6 @@ void TMC2209_step_dual::init_pio() {
pio_gpio_init(this->pio_core, this->step0_pin);
pio_gpio_init(this->pio_core, this->step1_pin);
pio_gpio_init(this->pio_core, this->dir0_pin);
pio_gpio_init(this->pio_core, this->dir1_pin);
pio_sm_set_consecutive_pindirs(this->pio_core, this->sm_num_counter0, this->step0_pin, 1, true);
pio_sm_set_consecutive_pindirs(this->pio_core, this->sm_num_counter1, this->step1_pin, 1, true);
@@ -114,8 +113,8 @@ void TMC2209_step_dual::init_pio() {
pio_sm_set_clkdiv(this->pio_core, this->sm_num_divider0, clock_div);
pio_sm_set_clkdiv(this->pio_core, this->sm_num_divider1, clock_div);
pio_sm_set_clkdiv(this->pio_core, this->sm_num_counter0, clock_div*0.5);
pio_sm_set_clkdiv(this->pio_core, this->sm_num_counter1, clock_div*0.5);
pio_sm_set_clkdiv(this->pio_core, this->sm_num_counter0, 1.0);
pio_sm_set_clkdiv(this->pio_core, this->sm_num_counter1, 1.0);
pio_sm_set_enabled(this->pio_core, this->sm_num_divider0, true);
pio_sm_set_enabled(this->pio_core, this->sm_num_divider1, true);
@@ -166,6 +165,7 @@ void TMC2209_step_dual::set_conf1(uint frequency, bool dir) {
};
void TMC2209_step_dual::pulse0(uint n) {
this->remaining_step_count0 = n;
this->done_flag0_arm = true;
pio_sm_put_blocking(
this->pio_core, this->sm_num_counter0, n
@@ -173,6 +173,7 @@ void TMC2209_step_dual::pulse0(uint n) {
};
void TMC2209_step_dual::pulse1(uint n) {
this->remaining_step_count1 = n;
this->done_flag1_arm = true;
pio_sm_put_blocking(
this->pio_core, this->sm_num_counter1, n
@@ -204,6 +205,8 @@ void TMC2209_step_dual::pulse1_int(int n) {
};
void TMC2209_step_dual::irq_handler0() {
this->remaining_step_count0 = pio_sm_get(this->pio_core, this->sm_num_counter0);
if(this->done_flag0_arm) {
done_flag0 = true;
} else {
@@ -213,6 +216,8 @@ void TMC2209_step_dual::irq_handler0() {
}
void TMC2209_step_dual::irq_handler1() {
this->remaining_step_count1 = pio_sm_get(this->pio_core, this->sm_num_counter1);
if(this->done_flag1_arm) {
done_flag1 = true;
} else {
@@ -267,4 +272,12 @@ bool TMC2209_step_dual::wait1(int timeout_ms) {
}
return false;
};
uint TMC2209_step_dual::get_remaining_steps0() {
return this->remaining_step_count0;
};
uint TMC2209_step_dual::get_remaining_steps1() {
return this->remaining_step_count1;
};