Pārlūkot izejas kodu

Apply fixes for DUE

Alternative to #7882. If F_CPU is greater than 1000 it can be evenly divided by 8. Over 10000, 16; over 100000, 32; over 1 million, 64; etc.
Scott Lahteine 6 gadus atpakaļ
vecāks
revīzija
8315a8a716

+ 4
- 4
Marlin/src/HAL/HAL_AVR/HAL_AVR.h Parādīt failu

@@ -102,10 +102,10 @@ extern "C" {
102 102
 #define TEMP_TIMER_NUM 0
103 103
 #define TEMP_TIMER_FREQUENCY (F_CPU / 64.0 / 256.0)
104 104
 
105
-#define HAL_TIMER_RATE ((F_CPU) / 8.0)
106
-#define HAL_STEPPER_TIMER_RATE HAL_TIMER_RATE
107
-#define STEPPER_TIMER_PRESCALE INT0_PRESCALER
108
-#define HAL_TICKS_PER_US (((F_CPU) / 8) / 1000000) // Can not be of type double
105
+#define HAL_TIMER_RATE          ((F_CPU) / 8)    // i.e., 2MHz or 2.5MHz
106
+#define HAL_STEPPER_TIMER_RATE  HAL_TIMER_RATE
107
+#define STEPPER_TIMER_PRESCALE  INT0_PRESCALER
108
+#define HAL_TICKS_PER_US        ((HAL_STEPPER_TIMER_RATE) / 1000000) // Cannot be of type double
109 109
 
110 110
 #define ENABLE_STEPPER_DRIVER_INTERRUPT()  SBI(TIMSK1, OCIE1A)
111 111
 #define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A)

+ 1
- 1
Marlin/src/HAL/HAL_DUE/HAL_timers_Due.h Parādīt failu

@@ -46,7 +46,7 @@
46 46
 #define STEP_TIMER_NUM 3  // index of timer to use for stepper
47 47
 #define TEMP_TIMER_NUM 4  // index of timer to use for temperature
48 48
 
49
-#define HAL_TIMER_RATE         ((F_CPU) / 2.0)  // frequency of timers peripherals
49
+#define HAL_TIMER_RATE         ((F_CPU) / 2)    // frequency of timers peripherals
50 50
 #define STEPPER_TIMER_PRESCALE 1.0              // prescaler for setting stepper frequency
51 51
 #define HAL_STEPPER_TIMER_RATE HAL_TIMER_RATE   // frequency of stepper timer (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE)
52 52
 #define HAL_TICKS_PER_US       ((HAL_STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per us

+ 4
- 4
Marlin/src/HAL/HAL_LPC1768/HAL_timers.cpp Parādīt failu

@@ -33,22 +33,22 @@
33 33
 
34 34
 void HAL_timer_init(void) {
35 35
   SBI(LPC_SC->PCONP, 1);  // power on timer0
36
-  LPC_TIM0->PR = ((HAL_TIMER_RATE / HAL_STEPPER_TIMER_RATE) - 1); // Use prescaler to set frequency if needed
36
+  LPC_TIM0->PR = (HAL_TIMER_RATE) / (HAL_STEPPER_TIMER_RATE) - 1; // Use prescaler to set frequency if needed
37 37
 
38 38
   SBI(LPC_SC->PCONP, 2);  // power on timer1
39
-  LPC_TIM1->PR = ((HAL_TIMER_RATE / 1000000) - 1);
39
+  LPC_TIM1->PR = (HAL_TIMER_RATE) / 1000000 - 1;
40 40
 }
41 41
 
42 42
 void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
43 43
   switch (timer_num) {
44 44
     case 0:
45 45
       LPC_TIM0->MCR = 3;              // Match on MR0, reset on MR0
46
-      LPC_TIM0->MR0 = (uint32_t)(HAL_STEPPER_TIMER_RATE / frequency); // Match value (period) to set frequency
46
+      LPC_TIM0->MR0 = uint32_t(HAL_STEPPER_TIMER_RATE) / frequency; // Match value (period) to set frequency
47 47
       LPC_TIM0->TCR = _BV(0);       // enable
48 48
       break;
49 49
     case 1:
50 50
       LPC_TIM1->MCR = 3;
51
-      LPC_TIM1->MR0 = (uint32_t)(HAL_TEMP_TIMER_RATE / frequency);;
51
+      LPC_TIM1->MR0 = uint32_t(HAL_TEMP_TIMER_RATE) / frequency;
52 52
       LPC_TIM1->TCR = _BV(0);
53 53
       break;
54 54
     default: break;

+ 5
- 5
Marlin/src/HAL/HAL_STM32F1/HAL_timers_Stm32f1.cpp Parādīt failu

@@ -93,14 +93,14 @@ Timer_clock4: Prescaler 128 -> 656.25kHz
93 93
  * TODO: Calculate Timer prescale value, so we get the 32bit to adjust
94 94
  */
95 95
 
96
-void HAL_timer_start (uint8_t timer_num, uint32_t frequency) {
96
+void HAL_timer_start(uint8_t timer_num, uint32_t frequency) {
97 97
   switch (timer_num) {
98 98
     case STEP_TIMER_NUM:
99 99
       StepperTimer.pause();
100 100
       StepperTimer.setCount(0);
101 101
       StepperTimer.setPrescaleFactor(STEPPER_TIMER_PRESCALE);
102 102
       StepperTimer.setOverflow(0xFFFF);
103
-      StepperTimer.setCompare (STEP_TIMER_CHAN, (HAL_STEPPER_TIMER_RATE / frequency));
103
+      StepperTimer.setCompare(STEP_TIMER_CHAN, uint32_t(HAL_STEPPER_TIMER_RATE) / frequency);
104 104
       StepperTimer.refresh();
105 105
       StepperTimer.resume();
106 106
       break;
@@ -109,14 +109,14 @@ void HAL_timer_start (uint8_t timer_num, uint32_t frequency) {
109 109
       TempTimer.setCount(0);
110 110
       TempTimer.setPrescaleFactor(TEMP_TIMER_PRESCALE);
111 111
       TempTimer.setOverflow(0xFFFF);
112
-      TempTimer.setCompare (TEMP_TIMER_CHAN, ((F_CPU / TEMP_TIMER_PRESCALE) / frequency));
112
+      TempTimer.setCompare(TEMP_TIMER_CHAN, (F_CPU) / (TEMP_TIMER_PRESCALE) / frequency);
113 113
       TempTimer.refresh();
114 114
       TempTimer.resume();
115 115
       break;
116 116
   }
117 117
 }
118 118
 
119
-void HAL_timer_enable_interrupt (uint8_t timer_num) {
119
+void HAL_timer_enable_interrupt(uint8_t timer_num) {
120 120
   switch (timer_num) {
121 121
     case STEP_TIMER_NUM:
122 122
       StepperTimer.attachInterrupt(STEP_TIMER_CHAN, stepTC_Handler);
@@ -129,7 +129,7 @@ void HAL_timer_enable_interrupt (uint8_t timer_num) {
129 129
   }
130 130
 }
131 131
 
132
-void HAL_timer_disable_interrupt (uint8_t timer_num) {
132
+void HAL_timer_disable_interrupt(uint8_t timer_num) {
133 133
   switch (timer_num) {
134 134
     case STEP_TIMER_NUM:
135 135
       StepperTimer.detachInterrupt(STEP_TIMER_CHAN);

+ 1
- 1
Marlin/src/HAL/HAL_TEENSY35_36/HAL_timers_Teensy.h Parādīt failu

@@ -59,7 +59,7 @@
59 59
 
60 60
 #define HAL_TIMER_RATE         (FTM0_TIMER_RATE)
61 61
 #define HAL_STEPPER_TIMER_RATE HAL_TIMER_RATE
62
-#define HAL_TICKS_PER_US       (HAL_STEPPER_TIMER_RATE/1000000)
62
+#define HAL_TICKS_PER_US       ((HAL_STEPPER_TIMER_RATE) / 1000000)
63 63
 
64 64
 #define TEMP_TIMER_FREQUENCY   1000
65 65
 

+ 1
- 1
Marlin/src/gcode/config/M43.cpp Parādīt failu

@@ -224,7 +224,7 @@ inline void servo_probe_test() {
224 224
  *                  - Machine continues to operate
225 225
  *                  - Reports changes to endstops
226 226
  *                  - Toggles LED_PIN when an endstop changes
227
- *                  - Can not reliably catch the 5mS pulse from BLTouch type probes
227
+ *                  - Cannot reliably catch the 5mS pulse from BLTouch type probes
228 228
  *
229 229
  *  M43 T       - Toggle pin(s) and report which pin is being toggled
230 230
  *                  S<pin>  - Start Pin number.   If not given, will default to 0

+ 1
- 1
Marlin/src/inc/Conditionals_post.h Parādīt failu

@@ -207,7 +207,7 @@
207 207
     /**
208 208
      * Hidden options for developer
209 209
      */
210
-    // Double stepping start from STEP_DOUBLER_FREQUENCY + 1, quad stepping start from STEP_DOUBLER_FREQUENCY * 2 + 1
210
+    // Double stepping starts at STEP_DOUBLER_FREQUENCY + 1, quad stepping starts at STEP_DOUBLER_FREQUENCY * 2 + 1
211 211
     #ifndef STEP_DOUBLER_FREQUENCY
212 212
       #if ENABLED(ADVANCE) || ENABLED(LIN_ADVANCE)
213 213
         #define STEP_DOUBLER_FREQUENCY 60000 // Hz

+ 3
- 4
Marlin/src/module/stepper.h Parādīt failu

@@ -303,10 +303,9 @@ class Stepper {
303 303
 
304 304
       #ifdef CPU_32_BIT
305 305
         // In case of high-performance processor, it is able to calculate in real-time
306
-        timer = (uint32_t)(HAL_STEPPER_TIMER_RATE) / step_rate;
307
-        if (timer < (HAL_STEPPER_TIMER_RATE / (STEP_DOUBLER_FREQUENCY * 2))) { // (STEP_DOUBLER_FREQUENCY * 2 kHz - this should never happen)
308
-          timer = (HAL_STEPPER_TIMER_RATE / (STEP_DOUBLER_FREQUENCY * 2));
309
-        }
306
+        constexpr uint32_t MIN_TIME_PER_STEP = (HAL_STEPPER_TIMER_RATE) / ((STEP_DOUBLER_FREQUENCY) * 2);
307
+        timer = uint32_t(HAL_STEPPER_TIMER_RATE) / step_rate;
308
+        NOLESS(timer, MIN_TIME_PER_STEP); // (STEP_DOUBLER_FREQUENCY * 2 kHz - this should never happen)
310 309
       #else
311 310
         NOLESS(step_rate, F_CPU / 500000);
312 311
         step_rate -= F_CPU / 500000; // Correct for minimal speed

Notiek ielāde…
Atcelt
Saglabāt