Added: Getting steps remaining on stop
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
Reference in New Issue
Block a user