Skip to content

Commit db49b36

Browse files
committed
[STM32F4XX] Fix timer interrupt handler
1 parent 307a13c commit db49b36

File tree

16 files changed

+285
-213
lines changed

16 files changed

+285
-213
lines changed

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_B96B_F446VE/hal_tick.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,28 @@ void us_ticker_irq_handler(void);
4444

4545
void timer_irq_handler(void) {
4646
// Channel 1 for mbed timeout
47-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
48-
us_ticker_irq_handler();
47+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
48+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
49+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
50+
us_ticker_irq_handler();
51+
}
4952
}
5053

5154
// Channel 2 for HAL tick
52-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
53-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
54-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
55-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
56-
// Increment HAL variable
57-
HAL_IncTick();
58-
// Prepare next interrupt
59-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
60-
PreviousVal = val;
55+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
56+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
57+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
58+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
59+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
60+
// Increment HAL variable
61+
HAL_IncTick();
62+
// Prepare next interrupt
63+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
64+
PreviousVal = val;
6165
#if DEBUG_TICK > 0
62-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
66+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6367
#endif
68+
}
6469
}
6570
}
6671
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F401VC/hal_tick.c

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}
@@ -78,7 +82,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
7882
// Configure time base
7983
TimMasterHandle.Instance = TIM_MST;
8084
TimMasterHandle.Init.Period = 0xFFFFFFFF;
81-
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
85+
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 �s tick
8286
TimMasterHandle.Init.ClockDivision = 0;
8387
TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
8488
TimMasterHandle.Init.RepetitionCounter = 0;

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F429ZI/hal_tick.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_DISCO_F469NI/hal_tick.c

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}
@@ -76,9 +80,9 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
7680
TimMasterHandle.Instance = TIM_MST;
7781
TimMasterHandle.Init.Period = 0xFFFFFFFF;
7882
if ( SystemCoreClock == 16000000 ) {
79-
TimMasterHandle.Init.Prescaler = (uint32_t)( SystemCoreClock / 1000000) - 1; // 1 µs tick
83+
TimMasterHandle.Init.Prescaler = (uint32_t)( SystemCoreClock / 1000000) - 1; // 1 �s tick
8084
} else {
81-
TimMasterHandle.Init.Prescaler = (uint32_t)( SystemCoreClock / 2 / 1000000) - 1; // 1 µs tick
85+
TimMasterHandle.Init.Prescaler = (uint32_t)( SystemCoreClock / 2 / 1000000) - 1; // 1 �s tick
8286
}
8387
TimMasterHandle.Init.ClockDivision = 0;
8488
TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/hal_tick.c

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4649
}
4750

4851
// Channel 2 for HAL tick
49-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
50-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
51-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
52-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
53-
// Increment HAL variable
54-
HAL_IncTick();
55-
// Prepare next interrupt
56-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
57-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5862
#if 0 // For DEBUG only
59-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6064
#endif
65+
}
6166
}
6267
}
6368
}
@@ -77,7 +82,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
7782
// Configure time base
7883
TimMasterHandle.Instance = TIM_MST;
7984
TimMasterHandle.Init.Period = 0xFFFFFFFF;
80-
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
85+
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 �s tick
8186
TimMasterHandle.Init.ClockDivision = 0;
8287
TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
8388
TimMasterHandle.Init.RepetitionCounter = 0;

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_MTS_DRAGONFLY_F411RE/hal_tick.c

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4649
}
4750

4851
// Channel 2 for HAL tick
49-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
50-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
51-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
52-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
53-
// Increment HAL variable
54-
HAL_IncTick();
55-
// Prepare next interrupt
56-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
57-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5862
#if 0 // For DEBUG only
59-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6064
#endif
65+
}
6166
}
6267
}
6368
}
@@ -77,7 +82,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
7782
// Configure time base
7883
TimMasterHandle.Instance = TIM_MST;
7984
TimMasterHandle.Init.Period = 0xFFFFFFFF;
80-
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
85+
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 �s tick
8186
TimMasterHandle.Init.ClockDivision = 0;
8287
TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
8388
TimMasterHandle.Init.RepetitionCounter = 0;

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F405RG/hal_tick.c

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}
@@ -75,7 +79,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
7579
// Configure time base
7680
TimMasterHandle.Instance = TIM_MST;
7781
TimMasterHandle.Init.Period = 0xFFFFFFFF;
78-
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
82+
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 �s tick
7983
TimMasterHandle.Init.ClockDivision = 0;
8084
TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
8185
TimMasterHandle.Init.RepetitionCounter = 0;

hal/targets/cmsis/TARGET_STM/TARGET_STM32F4/TARGET_MTS_MDOT_F411RE/hal_tick.c

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4649
}
4750

4851
// Channel 2 for HAL tick
49-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
50-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
51-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
52-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
53-
// Increment HAL variable
54-
HAL_IncTick();
55-
// Prepare next interrupt
56-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
57-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5862
#if 0 // For DEBUG only
59-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6064
#endif
65+
}
6166
}
6267
}
6368
}
@@ -77,7 +82,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
7782
// Configure time base
7883
TimMasterHandle.Instance = TIM_MST;
7984
TimMasterHandle.Init.Period = 0xFFFFFFFF;
80-
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 µs tick
85+
TimMasterHandle.Init.Prescaler = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 �s tick
8186
TimMasterHandle.Init.ClockDivision = 0;
8287
TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
8388
TimMasterHandle.Init.RepetitionCounter = 0;

0 commit comments

Comments
 (0)