Rev 39 | Rev 42 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 39 | Rev 41 | ||
|---|---|---|---|
| Line 6... | Line 6... | ||
| 6 | */ |
6 | */ |
| 7 | #include "stm32f1xx_hal.h" |
7 | #include "stm32f1xx_hal.h" |
| 8 | #include "misc.h" |
8 | #include "misc.h" |
| 9 | #include "main.h" |
9 | #include "main.h" |
| 10 | 10 | ||
| 11 | - | ||
| 12 | unsigned volatile long RPM_Time[RPM_SAMPLES]; // sampled on both edges |
11 | unsigned volatile long RPM_Time[RPM_SAMPLES]; // sampled on both edges |
| - | 12 | unsigned volatile char RPM_Level[RPM_SAMPLES]; // active level when sampled |
|
| 13 | unsigned volatile long RPM_Count; // incremented every reading |
13 | unsigned volatile long RPM_Count; // incremented every reading |
| 14 | 14 | ||
| 15 | // this is set if there is a timer timeout interrupt |
15 | // this is set if there is a timer timeout interrupt |
| 16 | unsigned char volatile periodPulse = 0; |
16 | unsigned char volatile periodPulse = 0; |
| 17 | 17 | ||
| 18 | unsigned char volatile tim3triggered = 0; |
18 | unsigned char volatile tim3triggered = 0; |
| 19 | 19 | ||
| 20 | static void |
20 | static void |
| 21 | triggerTim3 (void) |
21 | triggerTim3 (void) |
| 22 | { |
22 | { |
| 23 | htim3.Instance->CNT = 0; |
23 | htim3.Instance->CNT = 0; |
| 24 | htim3.Instance->CR1 |= TIM_CR1_CEN; |
24 | htim3.Instance->CR1 |= TIM_CR1_CEN; |
| 25 | - | ||
| 26 | } |
25 | } |
| 27 | 26 | ||
| 28 | void |
27 | void |
| 29 | TIM2_IRQHandler (void) |
28 | TIM2_IRQHandler (void) |
| 30 | { |
29 | { |
| - | 30 | // rising edge trigger CB pulse |
|
| 31 | if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC1)) |
31 | if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC1)) |
| 32 | { |
32 | { |
| 33 | __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_CC1); |
33 | __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_CC1); |
| 34 | RPM_Time[RPM_Count] = __HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_1); |
34 | RPM_Time[RPM_Count] = __HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_1); |
| - | 35 | RPM_Level[RPM_Count] = 1; // rising so it is high now. |
|
| 35 | RPM_Count = (RPM_Count + 1) % RPM_SAMPLES; |
36 | RPM_Count = (RPM_Count + 1) % RPM_SAMPLES; |
| - | 37 | // trigger timer some time after falling edge |
|
| - | 38 | if(tim3triggered ==0 ) |
|
| 36 | 39 | ||
| 37 | if ( tim3triggered == 0) |
- | |
| 38 | { |
40 | { |
| 39 | tim3triggered = 1; // make it a monostable |
- | |
| 40 | periodPulse = 0; |
41 | tim3triggered = 1; |
| 41 | triggerTim3 (); |
42 | triggerTim3 (); |
| 42 | } |
43 | } |
| - | 44 | ||
| - | 45 | } |
|
| - | 46 | // falling edge trigger CB pulse |
|
| - | 47 | if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC2)) |
|
| - | 48 | { |
|
| - | 49 | __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_CC2); |
|
| - | 50 | RPM_Time[RPM_Count] = __HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_2); |
|
| - | 51 | RPM_Level[RPM_Count] = 0; // falling so it is low now. |
|
| - | 52 | RPM_Count = (RPM_Count + 1) % RPM_SAMPLES; |
|
| - | 53 | // indicate that CB pulse is owning the timer 3 timing |
|
| - | 54 | periodPulse = 0; |
|
| 43 | } |
55 | } |
| 44 | } |
- | |
| 45 | 56 | ||
| - | 57 | } |
|
| 46 | 58 | ||
| 47 | // timer variable shared between TIM3 and TIM4 handler. |
59 | // timer variable shared between TIM3 and TIM4 handler. |
| 48 | static char chtTimer = 0; |
60 | static char chtTimer = 0; |
| 49 | 61 | ||
| 50 | void |
62 | void |
| Line 52... | Line 64... | ||
| 52 | { |
64 | { |
| 53 | if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE)) |
65 | if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE)) |
| 54 | { |
66 | { |
| 55 | __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); |
67 | __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE); |
| 56 | 68 | ||
| - | 69 | ||
| 57 | tim3triggered = 0; |
70 | tim3triggered = 0; |
| 58 | if (chtTimer >= 3) // every 300mS |
71 | if (chtTimer >= 3) // every 300mS |
| 59 | { |
72 | { |
| 60 | chtTimer = 0; |
73 | chtTimer = 0; |
| 61 | 74 | ||
| Line 111... | Line 124... | ||
| 111 | } |
124 | } |
| 112 | } |
125 | } |
| 113 | 126 | ||
| 114 | if (periodPulse == 1) |
127 | if (periodPulse == 1) |
| 115 | { |
128 | { |
| 116 | triggerTim3 (); |
129 | triggerTim3 (); |
| 117 | 130 | ||
| 118 | } |
131 | } |
| - | 132 | // indicate that timer 4 firing is owning the timer 3 trigger |
|
| 119 | periodPulse = 1; |
133 | periodPulse = 1; |
| 120 | 134 | ||
| 121 | - | ||
| 122 | chtTimer++; |
135 | chtTimer++; |
| 123 | } |
136 | } |
| 124 | 137 | ||
| 125 | } |
138 | } |
| 126 | 139 | ||
| 127 | - | ||
| 128 | void |
140 | void |
| 129 | resetSerialTimeout (void) |
141 | resetSerialTimeout (void) |
| 130 | { |
142 | { |
| 131 | __disable_irq (); |
143 | __disable_irq (); |
| 132 | NoSerialInCTR = 0; |
144 | NoSerialInCTR = 0; |