/** ****************************************************************************** * @file stm8l10x_clk.c * @brief This file contains all the functions for the CLK peripheral. * @author STMicroelectronics - MCD Application Team * @version V1.1.0 * @date 09/14/2009 ****************************************************************************** * * 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. * *

© COPYRIGHT 2009 STMicroelectronics

* @image html logo.bmp ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm8l10x_clk.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private Constants ---------------------------------------------------------*/ /** * @addtogroup CLK_Private_Constants * @{ */ __CONST uint8_t HSIDivFactor[4] = {1, 2, 4, 8}; /*!< Holds the different HSI Dividor factors */ /** * @} */ /** * @addtogroup CLK_Public_Functions * @{ */ /** * @brief Deinitializes the CLK peripheral registers to their default reset * values. * @par Parameters: * None * @retval None */ void CLK_DeInit(void) { CLK->CKDIVR = CLK_CKDIVR_RESET_VALUE; CLK->PCKENR = CLK_PCKENR_RESET_VALUE; CLK->CCOR = CLK_CCOR_RESET_VALUE; } /** * @brief Enables or disablle the Configurable Clock Output (CCO). * @param[in] NewState : New state of CCEN bit (CCO register). * This parameter can be any of the @ref FunctionalState enumeration. * @retval None */ void CLK_CCOCmd(FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Set CCOEN bit */ CLK->CCOR |= CLK_CCOR_CCOEN; } else { /* Reset CCOEN bit */ CLK->CCOR &= (uint8_t)(~CLK_CCOR_CCOEN); } } /** * @brief Enables or disables the specified peripheral CLK. * @param[in] CLK_Peripheral : This parameter specifies the peripheral clock to gate. * This parameter can be any of the @ref CLK_Peripheral_TypeDef enumeration. * @param[in] NewState : New state of specified peripheral clock. * This parameter can be any of the @ref FunctionalState enumeration. * @retval None */ void CLK_PeripheralClockConfig(CLK_Peripheral_TypeDef CLK_Peripheral, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState)); assert_param(IS_CLK_PERIPHERAL(CLK_Peripheral)); if (NewState != DISABLE) { /* Enable the peripheral Clock */ CLK->PCKENR |= ((uint8_t)CLK_Peripheral); } else { /* Disable the peripheral Clock */ CLK->PCKENR &= (uint8_t)(~(uint8_t)CLK_Peripheral); } } /** * @brief Configures the HSI master clock dividers. * @param[in] CLK_MasterPrescaler : Specifies the HSI clock divider to apply. * This parameter can be any of the @ref CLK_MasterPrescaler_TypeDef enumeration. * @retval None */ void CLK_MasterPrescalerConfig(CLK_MasterPrescaler_TypeDef CLK_MasterPrescaler) { /* check teh parameters */ assert_param(IS_CLK_MASTER_PRESCALER(CLK_MasterPrescaler)); CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_HSIDIV); CLK->CKDIVR = (uint8_t)CLK_MasterPrescaler; } /** * @brief Output the selected clock on a dedicated I/O pin. * @param[in] CLK_CCO : Specifies the clock source. * This parameter can be any of the @ref CLK_Output_TypeDef enumeration. * @retval None * @par Required preconditions: * The dedicated I/O pin must be set at 1 in the corresponding Px_CR1 register \n * to be set as input with pull-up or push-pull output. */ void CLK_CCOConfig(CLK_Output_TypeDef CLK_Output) { /* check teh parameters */ assert_param(IS_CLK_OUTPUT(CLK_Output)); /* Clears of the CCO type bits part */ CLK->CCOR &= (uint8_t)(~CLK_CCOR_CCOSEL); /* Selects the source provided on cco_ck output */ CLK->CCOR |= ((uint8_t)CLK_Output); /* Enable the clock output */ CLK->CCOR |= CLK_CCOR_CCOEN; } /** * @brief This function returns the frequencies of different on chip clocks. * @par Parameters: * None * @retval uint32_t : The master clock frequency */ uint32_t CLK_GetClockFreq(void) { uint32_t clockfrequency = 0; uint8_t tmp = 0, presc = 0; tmp = (uint8_t)(CLK->CKDIVR & CLK_CKDIVR_HSIDIV); presc = HSIDivFactor[tmp]; clockfrequency = HSI_VALUE / presc; return((uint32_t)clockfrequency); } /** * @} */ /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/