|
@@ -47,7 +47,10 @@
|
47
|
47
|
* TODO: Calculate Timer prescale value, so we get the 32bit to adjust
|
48
|
48
|
*/
|
49
|
49
|
|
50
|
|
-void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+void timer_set_interrupt_priority(uint_fast8_t timer_num, uint_fast8_t priority) {
|
51
|
54
|
nvic_irq_num irq_num;
|
52
|
55
|
switch (timer_num) {
|
53
|
56
|
case 1: irq_num = NVIC_TIMER1_CC; break;
|
|
@@ -64,9 +67,14 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
64
|
67
|
* This should never happen. Add a Sanitycheck for timer number.
|
65
|
68
|
* Should be a general timer since basic timers have no CC channels.
|
66
|
69
|
*/
|
67
|
|
- break;
|
|
70
|
+ return;
|
68
|
71
|
}
|
69
|
72
|
|
|
73
|
+ nvic_irq_set_priority(irq_num, priority);
|
|
74
|
+}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
70
|
78
|
/**
|
71
|
79
|
* Give the Stepper ISR a higher priority (lower number)
|
72
|
80
|
* so it automatically preempts the Temperature ISR.
|
|
@@ -83,7 +91,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
83
|
91
|
timer_set_compare(STEP_TIMER_DEV, STEP_TIMER_CHAN, _MIN(hal_timer_t(HAL_TIMER_TYPE_MAX), (STEPPER_TIMER_RATE) / frequency));
|
84
|
92
|
timer_no_ARR_preload_ARPE(STEP_TIMER_DEV); // Need to be sure no preload on ARR register
|
85
|
93
|
timer_attach_interrupt(STEP_TIMER_DEV, STEP_TIMER_CHAN, stepTC_Handler);
|
86
|
|
- nvic_irq_set_priority(irq_num, STEP_TIMER_IRQ_PRIO);
|
|
94
|
+ timer_set_interrupt_priority(STEP_TIMER_NUM, STEP_TIMER_IRQ_PRIO);
|
87
|
95
|
timer_generate_update(STEP_TIMER_DEV);
|
88
|
96
|
timer_resume(STEP_TIMER_DEV);
|
89
|
97
|
break;
|
|
@@ -95,7 +103,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
|
95
|
103
|
timer_set_reload(TEMP_TIMER_DEV, 0xFFFF);
|
96
|
104
|
timer_set_compare(TEMP_TIMER_DEV, TEMP_TIMER_CHAN, _MIN(hal_timer_t(HAL_TIMER_TYPE_MAX), (F_CPU) / (TEMP_TIMER_PRESCALE) / frequency));
|
97
|
105
|
timer_attach_interrupt(TEMP_TIMER_DEV, TEMP_TIMER_CHAN, tempTC_Handler);
|
98
|
|
- nvic_irq_set_priority(irq_num, TEMP_TIMER_IRQ_PRIO);
|
|
106
|
+ timer_set_interrupt_priority(TEMP_TIMER_NUM, TEMP_TIMER_IRQ_PRIO);
|
99
|
107
|
timer_generate_update(TEMP_TIMER_DEV);
|
100
|
108
|
timer_resume(TEMP_TIMER_DEV);
|
101
|
109
|
break;
|