fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Fri Feb 26 11:45:10 2016 +0000
Revision:
74:9322579e4309
Synchronized with git revision 121804a99d058122097dc72cb02236fa317a1cb4

Full URL: https://github.com/mbedmicro/mbed/commit/121804a99d058122097dc72cb02236fa317a1cb4/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 74:9322579e4309 1 /**
mbed_official 74:9322579e4309 2 ******************************************************************************
mbed_official 74:9322579e4309 3 * @file hal_tick.c
mbed_official 74:9322579e4309 4 * @author MCD Application Team
mbed_official 74:9322579e4309 5 * @brief Initialization of HAL tick
mbed_official 74:9322579e4309 6 ******************************************************************************
mbed_official 74:9322579e4309 7 * @attention
mbed_official 74:9322579e4309 8 *
mbed_official 74:9322579e4309 9 * <h2><center>&copy; COPYRIGHT 2016 STMicroelectronics</center></h2>
mbed_official 74:9322579e4309 10 *
mbed_official 74:9322579e4309 11 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 74:9322579e4309 12 * are permitted provided that the following conditions are met:
mbed_official 74:9322579e4309 13 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 74:9322579e4309 14 * this list of conditions and the following disclaimer.
mbed_official 74:9322579e4309 15 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 74:9322579e4309 16 * this list of conditions and the following disclaimer in the documentation
mbed_official 74:9322579e4309 17 * and/or other materials provided with the distribution.
mbed_official 74:9322579e4309 18 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 74:9322579e4309 19 * may be used to endorse or promote products derived from this software
mbed_official 74:9322579e4309 20 * without specific prior written permission.
mbed_official 74:9322579e4309 21 *
mbed_official 74:9322579e4309 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 74:9322579e4309 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 74:9322579e4309 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 74:9322579e4309 25 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 74:9322579e4309 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 74:9322579e4309 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 74:9322579e4309 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 74:9322579e4309 29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 74:9322579e4309 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 74:9322579e4309 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 74:9322579e4309 32 *
mbed_official 74:9322579e4309 33 ******************************************************************************
mbed_official 74:9322579e4309 34 */
mbed_official 74:9322579e4309 35 #include "hal_tick.h"
mbed_official 74:9322579e4309 36
mbed_official 74:9322579e4309 37 // 0=NO, 1=PG6 toggles at each tick
mbed_official 74:9322579e4309 38 #define DEBUG_TICK 0
mbed_official 74:9322579e4309 39
mbed_official 74:9322579e4309 40 TIM_HandleTypeDef TimMasterHandle;
mbed_official 74:9322579e4309 41 uint32_t PreviousVal = 0;
mbed_official 74:9322579e4309 42
mbed_official 74:9322579e4309 43 void HAL_IncTick(void);
mbed_official 74:9322579e4309 44 void us_ticker_irq_handler(void);
mbed_official 74:9322579e4309 45
mbed_official 74:9322579e4309 46 void timer_irq_handler(void) {
mbed_official 74:9322579e4309 47 // Channel 1 for mbed timeout
mbed_official 74:9322579e4309 48 if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
mbed_official 74:9322579e4309 49 __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
mbed_official 74:9322579e4309 50 us_ticker_irq_handler();
mbed_official 74:9322579e4309 51 }
mbed_official 74:9322579e4309 52
mbed_official 74:9322579e4309 53 // Channel 2 for HAL tick
mbed_official 74:9322579e4309 54 if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
mbed_official 74:9322579e4309 55 __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
mbed_official 74:9322579e4309 56 uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
mbed_official 74:9322579e4309 57 if ((val - PreviousVal) >= HAL_TICK_DELAY) {
mbed_official 74:9322579e4309 58 // Increment HAL variable
mbed_official 74:9322579e4309 59 HAL_IncTick();
mbed_official 74:9322579e4309 60 // Prepare next interrupt
mbed_official 74:9322579e4309 61 __HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
mbed_official 74:9322579e4309 62 PreviousVal = val;
mbed_official 74:9322579e4309 63 #if DEBUG_TICK > 0
mbed_official 74:9322579e4309 64 HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
mbed_official 74:9322579e4309 65 #endif
mbed_official 74:9322579e4309 66 }
mbed_official 74:9322579e4309 67 }
mbed_official 74:9322579e4309 68 }
mbed_official 74:9322579e4309 69
mbed_official 74:9322579e4309 70 // Reconfigure the HAL tick using a standard timer instead of systick.
mbed_official 74:9322579e4309 71 HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
mbed_official 74:9322579e4309 72 RCC_ClkInitTypeDef RCC_ClkInitStruct;
mbed_official 74:9322579e4309 73 uint32_t PclkFreq;
mbed_official 74:9322579e4309 74
mbed_official 74:9322579e4309 75 // Get clock configuration
mbed_official 74:9322579e4309 76 // Note: PclkFreq contains here the Latency (not used after)
mbed_official 74:9322579e4309 77 HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &PclkFreq);
mbed_official 74:9322579e4309 78
mbed_official 74:9322579e4309 79 // Get TIM5 clock value
mbed_official 74:9322579e4309 80 PclkFreq = HAL_RCC_GetPCLK1Freq();
mbed_official 74:9322579e4309 81
mbed_official 74:9322579e4309 82 // Enable timer clock
mbed_official 74:9322579e4309 83 TIM_MST_RCC;
mbed_official 74:9322579e4309 84
mbed_official 74:9322579e4309 85 // Reset timer
mbed_official 74:9322579e4309 86 TIM_MST_RESET_ON;
mbed_official 74:9322579e4309 87 TIM_MST_RESET_OFF;
mbed_official 74:9322579e4309 88
mbed_official 74:9322579e4309 89 // Configure time base
mbed_official 74:9322579e4309 90 TimMasterHandle.Instance = TIM_MST;
mbed_official 74:9322579e4309 91 TimMasterHandle.Init.Period = 0xFFFFFFFF;
mbed_official 74:9322579e4309 92
mbed_official 74:9322579e4309 93 // TIMxCLK = PCLKx when the APB prescaler = 1 else TIMxCLK = 2 * PCLKx
mbed_official 74:9322579e4309 94 if (RCC_ClkInitStruct.APB1CLKDivider == RCC_HCLK_DIV1)
mbed_official 74:9322579e4309 95 TimMasterHandle.Init.Prescaler = (uint16_t)((PclkFreq) / 1000000) - 1; // 1 us tick
mbed_official 74:9322579e4309 96 else
mbed_official 74:9322579e4309 97 TimMasterHandle.Init.Prescaler = (uint16_t)((PclkFreq * 2) / 1000000) - 1; // 1 us tick
mbed_official 74:9322579e4309 98
mbed_official 74:9322579e4309 99 TimMasterHandle.Init.ClockDivision = 0;
mbed_official 74:9322579e4309 100 TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
mbed_official 74:9322579e4309 101 TimMasterHandle.Init.RepetitionCounter = 0;
mbed_official 74:9322579e4309 102 HAL_TIM_OC_Init(&TimMasterHandle);
mbed_official 74:9322579e4309 103
mbed_official 74:9322579e4309 104 NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler);
mbed_official 74:9322579e4309 105 NVIC_EnableIRQ(TIM_MST_IRQ);
mbed_official 74:9322579e4309 106
mbed_official 74:9322579e4309 107 // Channel 1 for mbed timeout
mbed_official 74:9322579e4309 108 HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_1);
mbed_official 74:9322579e4309 109
mbed_official 74:9322579e4309 110 // Channel 2 for HAL tick
mbed_official 74:9322579e4309 111 HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_2);
mbed_official 74:9322579e4309 112 PreviousVal = __HAL_TIM_GetCounter(&TimMasterHandle);
mbed_official 74:9322579e4309 113 __HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, PreviousVal + HAL_TICK_DELAY);
mbed_official 74:9322579e4309 114 __HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC2);
mbed_official 74:9322579e4309 115
mbed_official 74:9322579e4309 116 #if DEBUG_TICK > 0
mbed_official 74:9322579e4309 117 __GPIOG_CLK_ENABLE();
mbed_official 74:9322579e4309 118 GPIO_InitTypeDef GPIO_InitStruct;
mbed_official 74:9322579e4309 119 GPIO_InitStruct.Pin = GPIO_PIN_6;
mbed_official 74:9322579e4309 120 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
mbed_official 74:9322579e4309 121 GPIO_InitStruct.Pull = GPIO_PULLUP;
mbed_official 74:9322579e4309 122 GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
mbed_official 74:9322579e4309 123 HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
mbed_official 74:9322579e4309 124 #endif
mbed_official 74:9322579e4309 125
mbed_official 74:9322579e4309 126 return HAL_OK;
mbed_official 74:9322579e4309 127 }
mbed_official 74:9322579e4309 128
mbed_official 74:9322579e4309 129 /**
mbed_official 74:9322579e4309 130 * @}
mbed_official 74:9322579e4309 131 */
mbed_official 74:9322579e4309 132
mbed_official 74:9322579e4309 133 /**
mbed_official 74:9322579e4309 134 * @}
mbed_official 74:9322579e4309 135 */
mbed_official 74:9322579e4309 136
mbed_official 74:9322579e4309 137 /**
mbed_official 74:9322579e4309 138 * @}
mbed_official 74:9322579e4309 139 */
mbed_official 74:9322579e4309 140 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/