Просмотр исходного кода

Followup to HAL_timer_restrain

Followup to #9985
Scott Lahteine 6 лет назад
Родитель
Сommit
98d48fc731

+ 1
- 1
Marlin/src/HAL/HAL_AVR/HAL_AVR.h Просмотреть файл

@@ -150,7 +150,7 @@ extern "C" {
150 150
 
151 151
 #define _CAT(a, ...) a ## __VA_ARGS__
152 152
 #define HAL_timer_set_compare(timer, compare) (_CAT(TIMER_OCR_, timer) = compare)
153
-#define HAL_timer_restrain(timer, interval_us) NOLESS(_CAT(TIMER_OCR_, timer), _CAT(TIMER_COUNTER_, timer) + interval_us * HAL_TICKS_PER_US)
153
+#define HAL_timer_restrain(timer, interval_ticks) NOLESS(_CAT(TIMER_OCR_, timer), _CAT(TIMER_COUNTER_, timer) + interval_ticks)
154 154
 
155 155
 #define HAL_timer_get_compare(timer) _CAT(TIMER_OCR_, timer)
156 156
 #define HAL_timer_get_count(timer) _CAT(TIMER_COUNTER_, timer)

+ 2
- 2
Marlin/src/HAL/HAL_DUE/HAL_timers_Due.h Просмотреть файл

@@ -109,8 +109,8 @@ FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
109 109
   return pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_CV;
110 110
 }
111 111
 
112
-FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_us) {
113
-  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_us * HAL_TICKS_PER_US;
112
+FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_ticks) {
113
+  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_ticks;
114 114
   if (HAL_timer_get_compare(timer_num) < mincmp) HAL_timer_set_compare(timer_num, mincmp);
115 115
 }
116 116
 

+ 2
- 2
Marlin/src/HAL/HAL_LPC1768/HAL_timers.h Просмотреть файл

@@ -120,8 +120,8 @@ FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
120 120
   return 0;
121 121
 }
122 122
 
123
-FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_us) {
124
-  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_us * HAL_TICKS_PER_US;
123
+FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_ticks) {
124
+  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_ticks;
125 125
   if (HAL_timer_get_compare(timer_num) < mincmp) HAL_timer_set_compare(timer_num, mincmp);
126 126
 }
127 127
 

+ 2
- 2
Marlin/src/HAL/HAL_STM32F1/HAL_timers_Stm32f1.h Просмотреть файл

@@ -154,8 +154,8 @@ FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) {
154 154
   }
155 155
 }
156 156
 
157
-FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_us) {
158
-  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_us * HAL_TICKS_PER_US;
157
+FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_ticks) {
158
+  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_ticks;
159 159
   if (HAL_timer_get_compare(timer_num) < mincmp) HAL_timer_set_compare(timer_num, mincmp);
160 160
 }
161 161
 

+ 2
- 2
Marlin/src/HAL/HAL_STM32F7/HAL_timers_STM32F7.cpp Просмотреть файл

@@ -137,8 +137,8 @@ uint32_t HAL_timer_get_count(const uint8_t timer_num) {
137 137
   return __HAL_TIM_GetCounter(&timerConfig[timer_num].timerdef);
138 138
 }
139 139
 
140
-void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_us) {
141
-  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_us * HAL_TICKS_PER_US;
140
+void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_ticks) {
141
+  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_ticks;
142 142
   if (HAL_timer_get_compare(timer_num) < mincmp) HAL_timer_set_compare(timer_num, mincmp);
143 143
 }
144 144
 

+ 1
- 1
Marlin/src/HAL/HAL_STM32F7/HAL_timers_STM32F7.h Просмотреть файл

@@ -96,7 +96,7 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num);
96 96
 void HAL_timer_set_compare(const uint8_t timer_num, const uint32_t compare);
97 97
 hal_timer_t HAL_timer_get_compare(const uint8_t timer_num);
98 98
 uint32_t HAL_timer_get_count(const uint8_t timer_num);
99
-void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_us);
99
+void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_ticks);
100 100
 
101 101
 void HAL_timer_isr_prologue(const uint8_t timer_num);
102 102
 

+ 2
- 2
Marlin/src/HAL/HAL_TEENSY35_36/HAL_timers_Teensy.h Просмотреть файл

@@ -105,8 +105,8 @@ FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) {
105 105
   return 0;
106 106
 }
107 107
 
108
-FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_us) {
109
-  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_us * HAL_TICKS_PER_US;
108
+FORCE_INLINE static void HAL_timer_restrain(const uint8_t timer_num, const uint16_t interval_ticks) {
109
+  const hal_timer_t mincmp = HAL_timer_get_count(timer_num) + interval_ticks;
110 110
   if (HAL_timer_get_compare(timer_num) < mincmp) HAL_timer_set_compare(timer_num, mincmp);
111 111
 }
112 112
 

+ 9
- 9
Marlin/src/module/stepper.cpp Просмотреть файл

@@ -365,8 +365,8 @@ void Stepper::isr() {
365 365
     _NEXT_ISR(ocr_val);
366 366
 
367 367
     #if DISABLED(LIN_ADVANCE)
368
-      HAL_timer_restrain(STEP_TIMER_NUM, STEP_TIMER_MIN_INTERVAL);
369
-      HAL_ENABLE_ISRs(); // re-enable ISRs
368
+      HAL_timer_restrain(STEP_TIMER_NUM, STEP_TIMER_MIN_INTERVAL * HAL_TICKS_PER_US);
369
+      HAL_ENABLE_ISRs();
370 370
     #endif
371 371
 
372 372
     return;
@@ -419,14 +419,14 @@ void Stepper::isr() {
419 419
         if (current_block->steps[Z_AXIS] > 0) {
420 420
           enable_Z();
421 421
           _NEXT_ISR(HAL_STEPPER_TIMER_RATE / 1000); // Run at slow speed - 1 KHz
422
-          HAL_ENABLE_ISRs(); // re-enable ISRs
422
+          HAL_ENABLE_ISRs();
423 423
           return;
424 424
         }
425 425
       #endif
426 426
     }
427 427
     else {
428 428
       _NEXT_ISR(HAL_STEPPER_TIMER_RATE / 1000); // Run at slow speed - 1 KHz
429
-      HAL_ENABLE_ISRs(); // re-enable ISRs
429
+      HAL_ENABLE_ISRs();
430 430
       return;
431 431
     }
432 432
   }
@@ -727,7 +727,8 @@ void Stepper::isr() {
727 727
   }
728 728
 
729 729
   #if DISABLED(LIN_ADVANCE)
730
-    HAL_timer_restrain(STEP_TIMER_NUM, STEP_TIMER_MIN_INTERVAL);
730
+    // Make sure stepper ISR doesn't monopolize the CPU
731
+    HAL_timer_restrain(STEP_TIMER_NUM, STEP_TIMER_MIN_INTERVAL * HAL_TICKS_PER_US);
731 732
   #endif
732 733
 
733 734
   // If current block is finished, reset pointer
@@ -736,7 +737,7 @@ void Stepper::isr() {
736 737
     planner.discard_current_block();
737 738
   }
738 739
   #if DISABLED(LIN_ADVANCE)
739
-    HAL_ENABLE_ISRs(); // re-enable ISRs
740
+    HAL_ENABLE_ISRs();
740 741
   #endif
741 742
 }
742 743
 
@@ -889,9 +890,8 @@ void Stepper::isr() {
889 890
       nextMainISR = 0;
890 891
     }
891 892
 
892
-    // Don't run the ISR faster than possible
893
-    // Make sure stepper interrupt does not monopolise CPU by adjusting compare to give about 8µs room
894
-    HAL_timer_restrain(STEP_TIMER_NUM, STEP_TIMER_MIN_INTERVAL);
893
+    // Make sure stepper ISR doesn't monopolize the CPU
894
+    HAL_timer_restrain(STEP_TIMER_NUM, STEP_TIMER_MIN_INTERVAL * HAL_TICKS_PER_US);
895 895
 
896 896
     // Restore original ISR settings
897 897
     HAL_ENABLE_ISRs();

Загрузка…
Отмена
Сохранить