@@ -27,11 +27,10 @@ extern int mbed_sdk_inited;
27
27
void init_16bit_timer (void );
28
28
void init_32bit_timer (void );
29
29
30
- #if TIM_MST_BIT_WIDTH == 16
31
30
// Variables also reset in us_ticker_init()
31
+ uint32_t total_ticks = 0 ;
32
32
uint32_t prev_time = 0 ;
33
- uint32_t elapsed_time = 0 ;
34
- #endif
33
+ uint16_t prev_tick_remainder = 0 ;
35
34
36
35
// Overwrite default HAL functions defined as "weak"
37
36
@@ -47,26 +46,28 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
47
46
48
47
uint32_t HAL_GetTick ()
49
48
{
50
- #if TIM_MST_BIT_WIDTH == 16
51
- uint32_t new_time ;
52
- if (mbed_sdk_inited ) {
53
- // Apply the latest time recorded just before the sdk is inited
54
- new_time = ticker_read_us (get_us_ticker_data ()) + prev_time ;
55
- prev_time = 0 ; // Use this time only once
56
- return (new_time / 1000 );
49
+ uint32_t new_time = us_ticker_read ();
50
+ uint32_t elapsed_ticks = 0 ;
51
+ uint32_t elapsed_time = (((new_time - prev_time ) & US_TICKER_MASK ) + prev_tick_remainder );
52
+ prev_time = new_time ;
53
+ if (elapsed_time < 1000 ) { // elapsed time less than 1ms
54
+ elapsed_ticks = 0 ;
55
+ prev_tick_remainder = elapsed_time ;
56
+ } else if (elapsed_time < 2000 ) { // elapsed time less than 2ms
57
+ elapsed_ticks = 1 ;
58
+ prev_tick_remainder = elapsed_time - 1000 ;
59
+ } else if (elapsed_time < 65536 ) { // For 16-bit ticker max value of 2^16 = 65536
60
+ while (elapsed_time >= 1000 ) {
61
+ elapsed_ticks ++ ;
62
+ elapsed_time -= 1000 ;
63
+ }
64
+ prev_tick_remainder = elapsed_time ;
57
65
} else {
58
- new_time = us_ticker_read ();
59
- elapsed_time += (new_time - prev_time ) & 0xFFFF ; // Only use the lower 16 bits
60
- prev_time = new_time ;
61
- return (elapsed_time / 1000 );
66
+ elapsed_ticks = elapsed_ticks / 1000 ;
67
+ prev_tick_remainder = elapsed_time % 1000 ;
62
68
}
63
- #else // 32-bit timer
64
- if (mbed_sdk_inited ) {
65
- return (ticker_read_us (get_us_ticker_data ()) / 1000 );
66
- } else {
67
- return (us_ticker_read () / 1000 );
68
- }
69
- #endif
69
+ total_ticks += elapsed_ticks ;
70
+ return total_ticks ;
70
71
}
71
72
72
73
void HAL_SuspendTick (void )
0 commit comments