inport from local

Dependents:   Hobbyking_Cheetah_0511

Committer:
NYX
Date:
Mon Mar 16 06:35:48 2020 +0000
Revision:
0:85b3fd62ea1a
reinport to mbed;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NYX 0:85b3fd62ea1a 1 /* mbed Microcontroller Library
NYX 0:85b3fd62ea1a 2 * Copyright (c) 2006-2016 ARM Limited
NYX 0:85b3fd62ea1a 3 *
NYX 0:85b3fd62ea1a 4 * Licensed under the Apache License, Version 2.0 (the "License");
NYX 0:85b3fd62ea1a 5 * you may not use this file except in compliance with the License.
NYX 0:85b3fd62ea1a 6 * You may obtain a copy of the License at
NYX 0:85b3fd62ea1a 7 *
NYX 0:85b3fd62ea1a 8 * http://www.apache.org/licenses/LICENSE-2.0
NYX 0:85b3fd62ea1a 9 *
NYX 0:85b3fd62ea1a 10 * Unless required by applicable law or agreed to in writing, software
NYX 0:85b3fd62ea1a 11 * distributed under the License is distributed on an "AS IS" BASIS,
NYX 0:85b3fd62ea1a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
NYX 0:85b3fd62ea1a 13 * See the License for the specific language governing permissions and
NYX 0:85b3fd62ea1a 14 * limitations under the License.
NYX 0:85b3fd62ea1a 15 */
NYX 0:85b3fd62ea1a 16 #include <stddef.h>
NYX 0:85b3fd62ea1a 17 #include "us_ticker_api.h"
NYX 0:85b3fd62ea1a 18 #include "PeripheralNames.h"
NYX 0:85b3fd62ea1a 19 #include "hal_tick.h"
NYX 0:85b3fd62ea1a 20
NYX 0:85b3fd62ea1a 21 // A 32-bit timer is used
NYX 0:85b3fd62ea1a 22 #if !TIM_MST_16BIT
NYX 0:85b3fd62ea1a 23
NYX 0:85b3fd62ea1a 24 TIM_HandleTypeDef TimMasterHandle;
NYX 0:85b3fd62ea1a 25
NYX 0:85b3fd62ea1a 26 void us_ticker_init(void)
NYX 0:85b3fd62ea1a 27 {
NYX 0:85b3fd62ea1a 28 /* NOTE: assuming that HAL tick has already been initialized! */
NYX 0:85b3fd62ea1a 29 }
NYX 0:85b3fd62ea1a 30
NYX 0:85b3fd62ea1a 31 uint32_t us_ticker_read()
NYX 0:85b3fd62ea1a 32 {
NYX 0:85b3fd62ea1a 33 return TIM_MST->CNT;
NYX 0:85b3fd62ea1a 34 }
NYX 0:85b3fd62ea1a 35
NYX 0:85b3fd62ea1a 36 void us_ticker_set_interrupt(timestamp_t timestamp)
NYX 0:85b3fd62ea1a 37 {
NYX 0:85b3fd62ea1a 38 // NOTE: This function must be called with interrupts disabled to keep our
NYX 0:85b3fd62ea1a 39 // timer interrupt setup atomic
NYX 0:85b3fd62ea1a 40
NYX 0:85b3fd62ea1a 41 // disable IT while we are handling the correct timestamp
NYX 0:85b3fd62ea1a 42 __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1);
NYX 0:85b3fd62ea1a 43 // Set new output compare value
NYX 0:85b3fd62ea1a 44 __HAL_TIM_SET_COMPARE(&TimMasterHandle, TIM_CHANNEL_1, (uint32_t)timestamp);
NYX 0:85b3fd62ea1a 45 // Enable IT
NYX 0:85b3fd62ea1a 46 __HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC1);
NYX 0:85b3fd62ea1a 47 }
NYX 0:85b3fd62ea1a 48
NYX 0:85b3fd62ea1a 49 void us_ticker_fire_interrupt(void)
NYX 0:85b3fd62ea1a 50 {
NYX 0:85b3fd62ea1a 51 LL_TIM_GenerateEvent_CC1(TimMasterHandle.Instance);
NYX 0:85b3fd62ea1a 52 }
NYX 0:85b3fd62ea1a 53
NYX 0:85b3fd62ea1a 54 /* NOTE: must be called with interrupts disabled! */
NYX 0:85b3fd62ea1a 55 void us_ticker_disable_interrupt(void)
NYX 0:85b3fd62ea1a 56 {
NYX 0:85b3fd62ea1a 57 __HAL_TIM_DISABLE_IT(&TimMasterHandle, TIM_IT_CC1);
NYX 0:85b3fd62ea1a 58 }
NYX 0:85b3fd62ea1a 59
NYX 0:85b3fd62ea1a 60 /* NOTE: must be called with interrupts disabled! */
NYX 0:85b3fd62ea1a 61 void us_ticker_clear_interrupt(void)
NYX 0:85b3fd62ea1a 62 {
NYX 0:85b3fd62ea1a 63 __HAL_TIM_CLEAR_FLAG(&TimMasterHandle, TIM_FLAG_CC1);
NYX 0:85b3fd62ea1a 64 }
NYX 0:85b3fd62ea1a 65
NYX 0:85b3fd62ea1a 66 #endif // !TIM_MST_16BIT