Add an option to specify "pulse" timer
This commit is contained in:
		| @@ -109,6 +109,10 @@ extern "C" { | |||||||
| #define STEPPER_TIMER_PRESCALE  8 | #define STEPPER_TIMER_PRESCALE  8 | ||||||
| #define HAL_TICKS_PER_US        ((HAL_STEPPER_TIMER_RATE) / 1000000) // Cannot be of type double | #define HAL_TICKS_PER_US        ((HAL_STEPPER_TIMER_RATE) / 1000000) // Cannot be of type double | ||||||
|  |  | ||||||
|  | #define PULSE_TIMER_NUM         TEMP_TIMER_NUM | ||||||
|  | #define TIMER_COUNTER_0         TCNT0 | ||||||
|  | #define PULSE_TIMER_PRESCALE    8 | ||||||
|  |  | ||||||
| #define ENABLE_STEPPER_DRIVER_INTERRUPT()  SBI(TIMSK1, OCIE1A) | #define ENABLE_STEPPER_DRIVER_INTERRUPT()  SBI(TIMSK1, OCIE1A) | ||||||
| #define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A) | #define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -64,6 +64,9 @@ typedef uint32_t hal_timer_t; | |||||||
| #define HAL_STEP_TIMER_ISR  void TC3_Handler() | #define HAL_STEP_TIMER_ISR  void TC3_Handler() | ||||||
| #define HAL_TEMP_TIMER_ISR  void TC4_Handler() | #define HAL_TEMP_TIMER_ISR  void TC4_Handler() | ||||||
|  |  | ||||||
|  | #define PULSE_TIMER_NUM STEP_TIMER_NUM | ||||||
|  | #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE | ||||||
|  |  | ||||||
| // -------------------------------------------------------------------------- | // -------------------------------------------------------------------------- | ||||||
| // Types | // Types | ||||||
| // -------------------------------------------------------------------------- | // -------------------------------------------------------------------------- | ||||||
|   | |||||||
| @@ -53,6 +53,9 @@ typedef uint32_t hal_timer_t; | |||||||
| #define HAL_TEMP_TIMER_RATE    1000000 | #define HAL_TEMP_TIMER_RATE    1000000 | ||||||
| #define TEMP_TIMER_FREQUENCY   1000 // temperature interrupt frequency | #define TEMP_TIMER_FREQUENCY   1000 // temperature interrupt frequency | ||||||
|  |  | ||||||
|  | #define PULSE_TIMER_NUM STEP_TIMER_NUM | ||||||
|  | #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE | ||||||
|  |  | ||||||
| #define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) | #define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) | ||||||
| #define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) | #define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) | ||||||
| #define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) | #define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) | ||||||
|   | |||||||
| @@ -56,6 +56,9 @@ typedef uint16_t hal_timer_t; | |||||||
| #define HAL_STEPPER_TIMER_RATE (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE)   // frequency of stepper timer (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE) | #define HAL_STEPPER_TIMER_RATE (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE)   // frequency of stepper timer (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE) | ||||||
| #define HAL_TICKS_PER_US       ((HAL_STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per us | #define HAL_TICKS_PER_US       ((HAL_STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per us | ||||||
|  |  | ||||||
|  | #define PULSE_TIMER_NUM STEP_TIMER_NUM | ||||||
|  | #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE | ||||||
|  |  | ||||||
| #define TEMP_TIMER_PRESCALE     1000 // prescaler for setting Temp timer, 72Khz | #define TEMP_TIMER_PRESCALE     1000 // prescaler for setting Temp timer, 72Khz | ||||||
| #define TEMP_TIMER_FREQUENCY    1000 // temperature interrupt frequency | #define TEMP_TIMER_FREQUENCY    1000 // temperature interrupt frequency | ||||||
|  |  | ||||||
|   | |||||||
| @@ -57,6 +57,9 @@ typedef uint32_t hal_timer_t; | |||||||
| #define STEPPER_TIMER STEP_TIMER_NUM // Alias? | #define STEPPER_TIMER STEP_TIMER_NUM // Alias? | ||||||
| #define STEPPER_TIMER_PRESCALE 0 // Not defined anywhere else! | #define STEPPER_TIMER_PRESCALE 0 // Not defined anywhere else! | ||||||
|  |  | ||||||
|  | #define PULSE_TIMER_NUM STEP_TIMER_NUM | ||||||
|  | #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE | ||||||
|  |  | ||||||
| #define HAL_TIMER_RATE         (FTM0_TIMER_RATE) | #define HAL_TIMER_RATE         (FTM0_TIMER_RATE) | ||||||
| #define HAL_STEPPER_TIMER_RATE HAL_TIMER_RATE | #define HAL_STEPPER_TIMER_RATE HAL_TIMER_RATE | ||||||
| #define HAL_TICKS_PER_US       ((HAL_STEPPER_TIMER_RATE) / 1000000) | #define HAL_TICKS_PER_US       ((HAL_STEPPER_TIMER_RATE) / 1000000) | ||||||
|   | |||||||
| @@ -564,7 +564,7 @@ void Stepper::isr() { | |||||||
|      * 10µs = 160 or 200 cycles. |      * 10µs = 160 or 200 cycles. | ||||||
|      */ |      */ | ||||||
|     #if EXTRA_CYCLES_XYZE > 20 |     #if EXTRA_CYCLES_XYZE > 20 | ||||||
|       hal_timer_t pulse_start = HAL_timer_get_current_count(STEP_TIMER_NUM); |       hal_timer_t pulse_start = HAL_timer_get_current_count(PULSE_TIMER_NUM); | ||||||
|     #endif |     #endif | ||||||
|  |  | ||||||
|     #if HAS_X_STEP |     #if HAS_X_STEP | ||||||
| @@ -596,8 +596,8 @@ void Stepper::isr() { | |||||||
|  |  | ||||||
|     // For minimum pulse time wait before stopping pulses |     // For minimum pulse time wait before stopping pulses | ||||||
|     #if EXTRA_CYCLES_XYZE > 20 |     #if EXTRA_CYCLES_XYZE > 20 | ||||||
|       while (EXTRA_CYCLES_XYZE > (uint32_t)(HAL_timer_get_current_count(STEP_TIMER_NUM) - pulse_start) * (STEPPER_TIMER_PRESCALE)) { /* nada */ } |       while (EXTRA_CYCLES_XYZE > (uint32_t)(HAL_timer_get_current_count(PULSE_TIMER_NUM) - pulse_start) * (PULSE_TIMER_PRESCALE)) { /* nada */ } | ||||||
|       pulse_start = HAL_timer_get_current_count(STEP_TIMER_NUM); |       pulse_start = HAL_timer_get_current_count(PULSE_TIMER_NUM); | ||||||
|     #elif EXTRA_CYCLES_XYZE > 0 |     #elif EXTRA_CYCLES_XYZE > 0 | ||||||
|       DELAY_NOPS(EXTRA_CYCLES_XYZE); |       DELAY_NOPS(EXTRA_CYCLES_XYZE); | ||||||
|     #endif |     #endif | ||||||
| @@ -637,7 +637,7 @@ void Stepper::isr() { | |||||||
|  |  | ||||||
|     // For minimum pulse time wait after stopping pulses also |     // For minimum pulse time wait after stopping pulses also | ||||||
|     #if EXTRA_CYCLES_XYZE > 20 |     #if EXTRA_CYCLES_XYZE > 20 | ||||||
|       if (i) while (EXTRA_CYCLES_XYZE > (uint32_t)(HAL_timer_get_current_count(STEP_TIMER_NUM) - pulse_start) * (STEPPER_TIMER_PRESCALE)) { /* nada */ } |       if (i) while (EXTRA_CYCLES_XYZE > (uint32_t)(HAL_timer_get_current_count(PULSE_TIMER_NUM) - pulse_start) * (PULSE_TIMER_PRESCALE)) { /* nada */ } | ||||||
|     #elif EXTRA_CYCLES_XYZE > 0 |     #elif EXTRA_CYCLES_XYZE > 0 | ||||||
|       if (i) DELAY_NOPS(EXTRA_CYCLES_XYZE); |       if (i) DELAY_NOPS(EXTRA_CYCLES_XYZE); | ||||||
|     #endif |     #endif | ||||||
| @@ -818,7 +818,7 @@ void Stepper::isr() { | |||||||
|     for (uint8_t i = step_loops; i--;) { |     for (uint8_t i = step_loops; i--;) { | ||||||
|  |  | ||||||
|       #if EXTRA_CYCLES_E > 20 |       #if EXTRA_CYCLES_E > 20 | ||||||
|         hal_timer_t pulse_start = HAL_timer_get_current_count(STEP_TIMER_NUM); |         hal_timer_t pulse_start = HAL_timer_get_current_count(PULSE_TIMER_NUM); | ||||||
|       #endif |       #endif | ||||||
|  |  | ||||||
|       START_E_PULSE(0); |       START_E_PULSE(0); | ||||||
| @@ -837,8 +837,8 @@ void Stepper::isr() { | |||||||
|  |  | ||||||
|       // For minimum pulse time wait before stopping pulses |       // For minimum pulse time wait before stopping pulses | ||||||
|       #if EXTRA_CYCLES_E > 20 |       #if EXTRA_CYCLES_E > 20 | ||||||
|         while (EXTRA_CYCLES_E > (hal_timer_t)(HAL_timer_get_current_count(STEP_TIMER_NUM) - pulse_start) * (STEPPER_TIMER_PRESCALE)) { /* nada */ } |         while (EXTRA_CYCLES_E > (hal_timer_t)(HAL_timer_get_current_count(PULSE_TIMER_NUM) - pulse_start) * (PULSE_TIMER_PRESCALE)) { /* nada */ } | ||||||
|         pulse_start = HAL_timer_get_current_count(STEP_TIMER_NUM); |         pulse_start = HAL_timer_get_current_count(PULSE_TIMER_NUM); | ||||||
|       #elif EXTRA_CYCLES_E > 0 |       #elif EXTRA_CYCLES_E > 0 | ||||||
|         DELAY_NOPS(EXTRA_CYCLES_E); |         DELAY_NOPS(EXTRA_CYCLES_E); | ||||||
|       #endif |       #endif | ||||||
| @@ -859,7 +859,7 @@ void Stepper::isr() { | |||||||
|  |  | ||||||
|       // For minimum pulse time wait before looping |       // For minimum pulse time wait before looping | ||||||
|       #if EXTRA_CYCLES_E > 20 |       #if EXTRA_CYCLES_E > 20 | ||||||
|         if (i) while (EXTRA_CYCLES_E > (hal_timer_t)(HAL_timer_get_current_count(STEP_TIMER_NUM) - pulse_start) * (STEPPER_TIMER_PRESCALE)) { /* nada */ } |         if (i) while (EXTRA_CYCLES_E > (hal_timer_t)(HAL_timer_get_current_count(PULSE_TIMER_NUM) - pulse_start) * (PULSE_TIMER_PRESCALE)) { /* nada */ } | ||||||
|       #elif EXTRA_CYCLES_E > 0 |       #elif EXTRA_CYCLES_E > 0 | ||||||
|         if (i) DELAY_NOPS(EXTRA_CYCLES_E); |         if (i) DELAY_NOPS(EXTRA_CYCLES_E); | ||||||
|       #endif |       #endif | ||||||
| @@ -1299,7 +1299,7 @@ void Stepper::report_positions() { | |||||||
|  |  | ||||||
|   #if EXTRA_CYCLES_BABYSTEP > 20 |   #if EXTRA_CYCLES_BABYSTEP > 20 | ||||||
|     #define _SAVE_START const hal_timer_t pulse_start = HAL_timer_get_current_count(STEP_TIMER_NUM) |     #define _SAVE_START const hal_timer_t pulse_start = HAL_timer_get_current_count(STEP_TIMER_NUM) | ||||||
|     #define _PULSE_WAIT while (EXTRA_CYCLES_BABYSTEP > (uint32_t)(HAL_timer_get_current_count(STEP_TIMER_NUM) - pulse_start) * (STEPPER_TIMER_PRESCALE)) { /* nada */ } |     #define _PULSE_WAIT while (EXTRA_CYCLES_BABYSTEP > (uint32_t)(HAL_timer_get_current_count(STEP_TIMER_NUM) - pulse_start) * (PULSE_TIMER_PRESCALE)) { /* nada */ } | ||||||
|   #else |   #else | ||||||
|     #define _SAVE_START NOOP |     #define _SAVE_START NOOP | ||||||
|     #if EXTRA_CYCLES_BABYSTEP > 0 |     #if EXTRA_CYCLES_BABYSTEP > 0 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user