Skip to content

Commit daa5aba

Browse files
committed
timerutils: improve enableTimerClock and constexpr getTimerClkSrc
1 parent 3da846b commit daa5aba

2 files changed

Lines changed: 144 additions & 137 deletions

File tree

src/drivers/hardware_specific/stm32/stm32_timerutils.cpp

Lines changed: 50 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -10,209 +10,124 @@
1010

1111
void enableTimerClock(TIM_HandleTypeDef *htim)
1212
{
13-
// Enable TIM clock
13+
switch ((uintptr_t)htim->Instance)
14+
{
1415
#if defined(TIM1_BASE)
15-
if (htim->Instance == TIM1) {
16+
case TIM1_BASE:
1617
__HAL_RCC_TIM1_CLK_ENABLE();
17-
}
18+
return;
1819
#endif
1920
#if defined(TIM2_BASE)
20-
if (htim->Instance == TIM2) {
21+
case TIM2_BASE:
2122
__HAL_RCC_TIM2_CLK_ENABLE();
22-
}
23+
return;
2324
#endif
2425
#if defined(TIM3_BASE)
25-
if (htim->Instance == TIM3) {
26+
case TIM3_BASE:
2627
__HAL_RCC_TIM3_CLK_ENABLE();
27-
}
28+
return;
2829
#endif
2930
#if defined(TIM4_BASE)
30-
if (htim->Instance == TIM4) {
31+
case TIM4_BASE:
3132
__HAL_RCC_TIM4_CLK_ENABLE();
32-
}
33+
return;
3334
#endif
3435
#if defined(TIM5_BASE)
35-
if (htim->Instance == TIM5) {
36+
case TIM5_BASE:
3637
__HAL_RCC_TIM5_CLK_ENABLE();
37-
}
38+
return;
3839
#endif
3940
#if defined(TIM6_BASE)
40-
if (htim->Instance == TIM6) {
41+
case TIM6_BASE:
4142
__HAL_RCC_TIM6_CLK_ENABLE();
42-
}
43+
return;
4344
#endif
4445
#if defined(TIM7_BASE)
45-
if (htim->Instance == TIM7) {
46+
case TIM7_BASE:
4647
__HAL_RCC_TIM7_CLK_ENABLE();
47-
}
48+
return;
4849
#endif
4950
#if defined(TIM8_BASE)
50-
if (htim->Instance == TIM8) {
51+
case TIM8_BASE:
5152
__HAL_RCC_TIM8_CLK_ENABLE();
52-
}
53+
return;
5354
#endif
5455
#if defined(TIM9_BASE)
55-
if (htim->Instance == TIM9) {
56+
case TIM9_BASE:
5657
__HAL_RCC_TIM9_CLK_ENABLE();
57-
}
58+
return;
5859
#endif
5960
#if defined(TIM10_BASE)
60-
if (htim->Instance == TIM10) {
61+
case TIM10_BASE:
6162
__HAL_RCC_TIM10_CLK_ENABLE();
62-
}
63+
return;
6364
#endif
6465
#if defined(TIM11_BASE)
65-
if (htim->Instance == TIM11) {
66+
case TIM11_BASE:
6667
__HAL_RCC_TIM11_CLK_ENABLE();
67-
}
68+
return;
6869
#endif
6970
#if defined(TIM12_BASE)
70-
if (htim->Instance == TIM12) {
71+
case TIM12_BASE:
7172
__HAL_RCC_TIM12_CLK_ENABLE();
72-
}
73+
return;
7374
#endif
7475
#if defined(TIM13_BASE)
75-
if (htim->Instance == TIM13) {
76+
case TIM13_BASE:
7677
__HAL_RCC_TIM13_CLK_ENABLE();
77-
}
78+
return;
7879
#endif
7980
#if defined(TIM14_BASE)
80-
if (htim->Instance == TIM14) {
81+
case TIM14_BASE:
8182
__HAL_RCC_TIM14_CLK_ENABLE();
82-
}
83+
return;
8384
#endif
8485
#if defined(TIM15_BASE)
85-
if (htim->Instance == TIM15) {
86+
case TIM15_BASE:
8687
__HAL_RCC_TIM15_CLK_ENABLE();
87-
}
88+
return;
8889
#endif
8990
#if defined(TIM16_BASE)
90-
if (htim->Instance == TIM16) {
91+
case TIM16_BASE:
9192
__HAL_RCC_TIM16_CLK_ENABLE();
92-
}
93+
return;
9394
#endif
9495
#if defined(TIM17_BASE)
95-
if (htim->Instance == TIM17) {
96+
case TIM17_BASE:
9697
__HAL_RCC_TIM17_CLK_ENABLE();
97-
}
98+
return;
9899
#endif
99100
#if defined(TIM18_BASE)
100-
if (htim->Instance == TIM18) {
101+
case TIM18_BASE:
101102
__HAL_RCC_TIM18_CLK_ENABLE();
102-
}
103+
return;
103104
#endif
104105
#if defined(TIM19_BASE)
105-
if (htim->Instance == TIM19) {
106+
case TIM19_BASE:
106107
__HAL_RCC_TIM19_CLK_ENABLE();
107-
}
108+
return;
108109
#endif
109110
#if defined(TIM20_BASE)
110-
if (htim->Instance == TIM20) {
111+
case TIM20_BASE:
111112
__HAL_RCC_TIM20_CLK_ENABLE();
112-
}
113+
return;
113114
#endif
114115
#if defined(TIM21_BASE)
115-
if (htim->Instance == TIM21) {
116+
case TIM21_BASE:
116117
__HAL_RCC_TIM21_CLK_ENABLE();
117-
}
118+
return;
118119
#endif
119120
#if defined(TIM22_BASE)
120-
if (htim->Instance == TIM22) {
121+
case TIM22_BASE:
121122
__HAL_RCC_TIM22_CLK_ENABLE();
122-
}
123+
return;
123124
#endif
124-
}
125-
126-
uint8_t getTimerClkSrc(TIM_TypeDef *tim)
127-
{
128-
uint8_t clkSrc = 0;
129-
130-
if (tim != (TIM_TypeDef *)NC)
131-
#if defined(STM32C0xx) || defined(STM32F0xx) || defined(STM32G0xx)
132-
/* TIMx source CLK is PCKL1 */
133-
clkSrc = 1;
134-
#else
135-
{
136-
/* Get source clock depending on TIM instance */
137-
switch ((uint32_t)tim) {
138-
#if defined(TIM2_BASE)
139-
case (uint32_t)TIM2_BASE:
140-
#endif
141-
#if defined(TIM3_BASE)
142-
case (uint32_t)TIM3_BASE:
143-
#endif
144-
#if defined(TIM4_BASE)
145-
case (uint32_t)TIM4_BASE:
146-
#endif
147-
#if defined(TIM5_BASE)
148-
case (uint32_t)TIM5_BASE:
149-
#endif
150-
#if defined(TIM6_BASE)
151-
case (uint32_t)TIM6_BASE:
152-
#endif
153-
#if defined(TIM7_BASE)
154-
case (uint32_t)TIM7_BASE:
155-
#endif
156-
#if defined(TIM12_BASE)
157-
case (uint32_t)TIM12_BASE:
158-
#endif
159-
#if defined(TIM13_BASE)
160-
case (uint32_t)TIM13_BASE:
161-
#endif
162-
#if defined(TIM14_BASE)
163-
case (uint32_t)TIM14_BASE:
164-
#endif
165-
#if defined(TIM18_BASE)
166-
case (uint32_t)TIM18_BASE:
167-
#endif
168-
clkSrc = 1;
169-
break;
170-
#if defined(TIM1_BASE)
171-
case (uint32_t)TIM1_BASE:
172-
#endif
173-
#if defined(TIM8_BASE)
174-
case (uint32_t)TIM8_BASE:
175-
#endif
176-
#if defined(TIM9_BASE)
177-
case (uint32_t)TIM9_BASE:
178-
#endif
179-
#if defined(TIM10_BASE)
180-
case (uint32_t)TIM10_BASE:
181-
#endif
182-
#if defined(TIM11_BASE)
183-
case (uint32_t)TIM11_BASE:
184-
#endif
185-
#if defined(TIM15_BASE)
186-
case (uint32_t)TIM15_BASE:
187-
#endif
188-
#if defined(TIM16_BASE)
189-
case (uint32_t)TIM16_BASE:
190-
#endif
191-
#if defined(TIM17_BASE)
192-
case (uint32_t)TIM17_BASE:
193-
#endif
194-
#if defined(TIM19_BASE)
195-
case (uint32_t)TIM19_BASE:
196-
#endif
197-
#if defined(TIM20_BASE)
198-
case (uint32_t)TIM20_BASE:
199-
#endif
200-
#if defined(TIM21_BASE)
201-
case (uint32_t)TIM21_BASE:
202-
#endif
203-
#if defined(TIM22_BASE)
204-
case (uint32_t)TIM22_BASE:
205-
#endif
206-
clkSrc = 2;
207-
break;
208-
default:
209-
_Error_Handler("TIM: Unknown timer instance", (int)tim);
210-
break;
211-
}
125+
126+
default:
127+
break;
212128
}
213-
#endif
214-
return clkSrc;
215129
}
130+
216131
#endif
217132

218133
void stm32_pauseTimer(TIM_HandleTypeDef* handle){

src/drivers/hardware_specific/stm32/stm32_timerutils.h

Lines changed: 94 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,101 @@
55

66
#if defined(_STM32_DEF_) || defined(TARGET_STM32H7)
77

8+
#include "stm32_def.h"
9+
810
#if defined(HAL_TIM_MODULE_ONLY)
9-
extern "C" void enableTimerClock(TIM_HandleTypeDef *htim);
10-
extern "C" uint8_t getTimerClkSrc(TIM_TypeDef *tim);
11+
void enableTimerClock(TIM_HandleTypeDef *htim);
12+
13+
constexpr uint8_t getTimerClkSrc(TIM_TypeDef *tim)
14+
{
15+
uint8_t clkSrc = 0;
16+
17+
if (tim != (TIM_TypeDef *)NC)
18+
#if defined(STM32C0xx) || defined(STM32F0xx) || defined(STM32G0xx)
19+
/* TIMx source CLK is PCKL1 */
20+
clkSrc = 1;
21+
#else
22+
{
23+
/* Get source clock depending on TIM instance */
24+
switch ((uintptr_t)tim) {
25+
#if defined(TIM2_BASE)
26+
case TIM2_BASE:
27+
#endif
28+
#if defined(TIM3_BASE)
29+
case TIM3_BASE:
30+
#endif
31+
#if defined(TIM4_BASE)
32+
case TIM4_BASE:
33+
#endif
34+
#if defined(TIM5_BASE)
35+
case TIM5_BASE:
36+
#endif
37+
#if defined(TIM6_BASE)
38+
case TIM6_BASE:
39+
#endif
40+
#if defined(TIM7_BASE)
41+
case TIM7_BASE:
42+
#endif
43+
#if defined(TIM12_BASE)
44+
case TIM12_BASE:
45+
#endif
46+
#if defined(TIM13_BASE)
47+
case TIM13_BASE:
48+
#endif
49+
#if defined(TIM14_BASE)
50+
case TIM14_BASE:
51+
#endif
52+
#if defined(TIM18_BASE)
53+
case TIM18_BASE:
54+
#endif
55+
clkSrc = 1;
56+
break;
57+
#if defined(TIM1_BASE)
58+
case TIM1_BASE:
59+
#endif
60+
#if defined(TIM8_BASE)
61+
case TIM8_BASE:
62+
#endif
63+
#if defined(TIM9_BASE)
64+
case TIM9_BASE:
65+
#endif
66+
#if defined(TIM10_BASE)
67+
case TIM10_BASE:
68+
#endif
69+
#if defined(TIM11_BASE)
70+
case TIM11_BASE:
71+
#endif
72+
#if defined(TIM15_BASE)
73+
case TIM15_BASE:
74+
#endif
75+
#if defined(TIM16_BASE)
76+
case TIM16_BASE:
77+
#endif
78+
#if defined(TIM17_BASE)
79+
case TIM17_BASE:
80+
#endif
81+
#if defined(TIM19_BASE)
82+
case TIM19_BASE:
83+
#endif
84+
#if defined(TIM20_BASE)
85+
case TIM20_BASE:
86+
#endif
87+
#if defined(TIM21_BASE)
88+
case TIM21_BASE:
89+
#endif
90+
#if defined(TIM22_BASE)
91+
case TIM22_BASE:
92+
#endif
93+
clkSrc = 2;
94+
break;
95+
default:
96+
_Error_Handler("TIM: Unknown timer instance", (int)tim);
97+
break;
98+
}
99+
}
100+
#endif
101+
return clkSrc;
102+
}
11103
#endif
12104

13105
void stm32_pauseTimer(TIM_HandleTypeDef* handle);

0 commit comments

Comments
 (0)