/** * \addtogroup stm32w-cpu * * @{ */ /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** * File Name : stm32w108_systick.c * Author : MCD Application Team * Version : V2.0.3 * Date : 09/22/2008 * Description : This file provides all the SysTick firmware functions. ******************************************************************************** * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. *******************************************************************************/ #include #include "stm32w-systick.h" /* SysTick registers bit mask */ /* CTRL TICKINT Mask */ #define CTRL_TICKINT_Set ((uint32_t)0x00000002) #define CTRL_TICKINT_Reset ((uint32_t)0xFFFFFFFD) /*--------------------------------------------------------------------------*/ /** * \brief Configures the SysTick clock source. * \param SysTick_CLKSource specifies the SysTick clock source. * This parameter can be one of the following values: * SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 * selected as SysTick clock source. * SysTick_CLKSource_HCLK: AHB clock selected as * SysTick clock source. */ void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) { /* Check the parameters */ assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); if(SysTick_CLKSource == SysTick_CLKSource_HCLK) { SysTick->CTRL |= SysTick_CLKSource_HCLK; } else { SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; } } /*--------------------------------------------------------------------------*/ /** * \brief Sets SysTick Reload value. * \param Reload SysTick Reload new value. Must be between 1 and 0xFFFFFF. */ void SysTick_SetReload(uint32_t Reload) { /* Check the parameters */ assert_param(IS_SYSTICK_RELOAD(Reload)); SysTick->LOAD = Reload; } /*--------------------------------------------------------------------------*/ /** * \brief Enables or disables the SysTick counter. * \param SysTick_Counter new state of the SysTick counter. * This parameter can be one of the following values: * - SysTick_Counter_Disable: Disable counter * - SysTick_Counter_Enable: Enable counter * - SysTick_Counter_Clear: Clear counter value to 0 */ void SysTick_CounterCmd(uint32_t SysTick_Counter) { /* Check the parameters */ assert_param(IS_SYSTICK_COUNTER(SysTick_Counter)); if(SysTick_Counter == SysTick_Counter_Enable) { SysTick->CTRL |= SysTick_Counter_Enable; } else if(SysTick_Counter == SysTick_Counter_Disable) { SysTick->CTRL &= SysTick_Counter_Disable; } else { /* SysTick_Counter == SysTick_Counter_Clear */ SysTick->VAL = SysTick_Counter_Clear; } } /*--------------------------------------------------------------------------*/ /** * \brief Enables or disables the SysTick Interrupt. * \param NewState new state of the SysTick Interrupt. * This parameter can be: ENABLE or DISABLE. */ void SysTick_ITConfig(FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if(NewState != DISABLE) { SysTick->CTRL |= CTRL_TICKINT_Set; } else { SysTick->CTRL &= CTRL_TICKINT_Reset; } } /*--------------------------------------------------------------------------*/ /** * \brief Gets SysTick counter value. * \return SysTick current value */ uint32_t SysTick_GetCounter(void) { return (SysTick->VAL); } /*--------------------------------------------------------------------------*/ /** * \brief Checks whether the specified SysTick flag is set or not. * \param SysTick_FLAG specifies the flag to check. * This parameter can be one of the following values: * - SysTick_FLAG_COUNT * - SysTick_FLAG_SKEW * - SysTick_FLAG_NOREF */ FlagStatus SysTick_GetFlagStatus(uint8_t SysTick_FLAG) { uint32_t statusreg = 0, tmp = 0; FlagStatus bitstatus = RESET; /* Check the parameters */ assert_param(IS_SYSTICK_FLAG(SysTick_FLAG)); /* Get the SysTick register index */ tmp = SysTick_FLAG >> 3; if(tmp == 2) { /* The flag to check is in CTRL register */ statusreg = SysTick->CTRL; } else { /* The flag to check is in CALIB register */ statusreg = SysTick->CALIB; } if((statusreg & ((uint32_t) 1 << SysTick_FLAG)) != (uint32_t) RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ /** @} */