lib_tmr.c 4.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
/**
  ******************************************************************************
  * @file    lib_tmr.c 
  * @author  Application Team
  * @version V1.1.0
  * @date    2019-10-28
  * @brief   Timer library.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
#include "lib_tmr.h"

#define TMR_CTRL_RSTValue       (0UL)
#define TMR_VALUE_RSTValue      (0UL)
#define TMR_RELOAD_RSTValue     (0UL)

/**
  * @brief  Initializes the timer peripheral registers to their default reset values.
  * @param  TMRx: 
                TMR0 ~ TMR3
  * @retval None
  */
void TMR_DeInit(TMR_Type *TMRx)
{
  /* Check parameters */
  assert_parameters(IS_TMR_ALL_INSTANCE(TMRx));
  
  /* Disable timer */
  TMRx->CTRL &= ~TMR_CTRL_EN;
  /* clear interrupt status */
  TMRx->INTSTS = TMR_INTSTS_INTSTS;
  /* write default reset values */
  TMRx->CTRL   = TMR_CTRL_RSTValue;
  TMRx->RELOAD = TMR_RELOAD_RSTValue;
  TMRx->VALUE  =  TMR_VALUE_RSTValue;   
}

/**
  * @brief  Initializes timer.
  * @param  TMRx: 
                TMR0 ~ TMR3
            InitStruct: Timer configuration.
                ClockSource:
                    TMR_CLKSRC_INTERNAL
                    TMR_CLKSRC_EXTERNAL
                EXTGT:
                    TMR_EXTGT_DISABLE
                    TMR_EXTGT_ENABLE
                Period: the auto-reload value
  * @retval None
  */
void TMR_Init(TMR_Type *TMRx, TMR_InitType *InitStruct)
{
  uint32_t tmp;
  
  /* Check parameters */
  assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); 
  assert_parameters(IS_TMR_CLKSRC(InitStruct->ClockSource));
  assert_parameters(IS_TMR_EXTGT(InitStruct->EXTGT));
 
  tmp = TMRx->CTRL;
  tmp &= ~(TMR_CTRL_EXTCLK|TMR_CTRL_EXTEN);
  tmp |= (InitStruct->ClockSource|InitStruct->EXTGT);
  TMRx->CTRL = tmp;
  TMRx->VALUE = InitStruct->Period;
  TMRx->RELOAD = InitStruct->Period;
}

/**
  * @brief  Fills each TMR_InitType member with its default value.
  * @param  InitStruct: pointer to an TMR_InitType structure which will be initialized.
  * @retval None
  */
void TMR_StructInit(TMR_InitType *InitStruct)
{
  /*--------------- Reset TMR init structure parameters values ---------------*/
  /* Initialize the ClockSource member */
  InitStruct->ClockSource = TMR_CLKSRC_INTERNAL;
  /* Initialize the EXTGT member */
  InitStruct->EXTGT = TMR_EXTGT_DISABLE;  
  /* Initialize the Period member */
  InitStruct->Period = 0;   
}

/**
  * @brief  Enables or disables timer interrupt.
  * @param  TMRx:
                TMR0~TMR3
            NewState: 
                ENABLE
                DISABLE
  * @retval None
  */
void TMR_INTConfig(TMR_Type *TMRx, uint32_t NewState)
{
  /* Check parameters */
  assert_parameters(IS_TMR_ALL_INSTANCE(TMRx));
  assert_parameters(IS_FUNCTIONAL_STATE(NewState));
  
  if (NewState == ENABLE)
  {
    TMRx->CTRL |= TMR_CTRL_INTEN;
  }
  else
  {
    TMRx->CTRL &= ~TMR_CTRL_INTEN;
  }
}

/**
  * @brief  Gets timer interrupt status.
  * @param  TMRx:
                TMR0~TMR3
  * @retval Interrupt status.
  */
uint8_t TMR_GetINTStatus(TMR_Type *TMRx)
{
  /* Check parameters */
  assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); 
  
  if (TMRx->INTSTS & TMR_INTSTS_INTSTS)
    return 1;
  else
    return 0;
}

/**
  * @brief  Clears timer interrupt status bit.
  * @param  TMRx:
                TMR0~TMR3
  * @retval None.
  */
void TMR_ClearINTStatus(TMR_Type *TMRx)
{
  /* Check parameters */
  assert_parameters(IS_TMR_ALL_INSTANCE(TMRx));
  
  TMRx->INTSTS = TMR_INTSTS_INTSTS;
}

/**
  * @brief  Enables or disables timer.
  * @param  TMRx:
                TMR0~TMR3
            NewState: 
                ENABLE
                DISABLE
  * @retval None
  */
void TMR_Cmd(TMR_Type *TMRx, uint32_t NewState)
{
  /* Check parameters */
  assert_parameters(IS_TMR_ALL_INSTANCE(TMRx));
  assert_parameters(IS_FUNCTIONAL_STATE(NewState));
  
  if (NewState == ENABLE)
    TMRx->CTRL |= TMR_CTRL_EN;
  else
    TMRx->CTRL &= ~TMR_CTRL_EN;
}

/**
  * @brief  Gets timer current value.
  * @param  TMRx:
                TMR0~TMR3
  * @retval timer value.
  */
uint32_t TMR_GetCurrentValue(TMR_Type *TMRx)
{
  /* Check parameters */
  assert_parameters(IS_TMR_ALL_INSTANCE(TMRx));
  
  return (TMRx->VALUE);
}

/*********************************** END OF FILE ******************************/