mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_NUVOTON/TARGET_NANO100/device/StdDriver/nano100_timer.c@174:b96e65c34a4d, 2017-10-02 (annotated)
- Committer:
- AnnaBridge
- Date:
- Mon Oct 02 15:33:19 2017 +0100
- Revision:
- 174:b96e65c34a4d
This updates the lib to the mbed lib v 152
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 174:b96e65c34a4d | 1 | /**************************************************************************//** |
AnnaBridge | 174:b96e65c34a4d | 2 | * @file timer.c |
AnnaBridge | 174:b96e65c34a4d | 3 | * @version V1.00 |
AnnaBridge | 174:b96e65c34a4d | 4 | * $Revision: 11 $ |
AnnaBridge | 174:b96e65c34a4d | 5 | * $Date: 15/06/23 5:15p $ |
AnnaBridge | 174:b96e65c34a4d | 6 | * @brief Nano100 series TIMER driver source file |
AnnaBridge | 174:b96e65c34a4d | 7 | * |
AnnaBridge | 174:b96e65c34a4d | 8 | * @note |
AnnaBridge | 174:b96e65c34a4d | 9 | * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved. |
AnnaBridge | 174:b96e65c34a4d | 10 | *****************************************************************************/ |
AnnaBridge | 174:b96e65c34a4d | 11 | #include "Nano100Series.h" |
AnnaBridge | 174:b96e65c34a4d | 12 | |
AnnaBridge | 174:b96e65c34a4d | 13 | /** @addtogroup NANO100_Device_Driver NANO100 Device Driver |
AnnaBridge | 174:b96e65c34a4d | 14 | @{ |
AnnaBridge | 174:b96e65c34a4d | 15 | */ |
AnnaBridge | 174:b96e65c34a4d | 16 | |
AnnaBridge | 174:b96e65c34a4d | 17 | /** @addtogroup NANO100_TIMER_Driver TIMER Driver |
AnnaBridge | 174:b96e65c34a4d | 18 | @{ |
AnnaBridge | 174:b96e65c34a4d | 19 | */ |
AnnaBridge | 174:b96e65c34a4d | 20 | |
AnnaBridge | 174:b96e65c34a4d | 21 | |
AnnaBridge | 174:b96e65c34a4d | 22 | /** @addtogroup NANO100_TIMER_EXPORTED_FUNCTIONS TIMER Exported Functions |
AnnaBridge | 174:b96e65c34a4d | 23 | @{ |
AnnaBridge | 174:b96e65c34a4d | 24 | */ |
AnnaBridge | 174:b96e65c34a4d | 25 | |
AnnaBridge | 174:b96e65c34a4d | 26 | /** |
AnnaBridge | 174:b96e65c34a4d | 27 | * @brief This API is used to configure timer to operate in specified mode |
AnnaBridge | 174:b96e65c34a4d | 28 | * and frequency. If timer cannot work in target frequency, a closest |
AnnaBridge | 174:b96e65c34a4d | 29 | * frequency will be chose and returned. |
AnnaBridge | 174:b96e65c34a4d | 30 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 31 | * @param[in] u32Mode Operation mode. Possible options are |
AnnaBridge | 174:b96e65c34a4d | 32 | * - \ref TIMER_ONESHOT_MODE |
AnnaBridge | 174:b96e65c34a4d | 33 | * - \ref TIMER_PERIODIC_MODE |
AnnaBridge | 174:b96e65c34a4d | 34 | * - \ref TIMER_TOGGLE_MODE |
AnnaBridge | 174:b96e65c34a4d | 35 | * - \ref TIMER_CONTINUOUS_MODE |
AnnaBridge | 174:b96e65c34a4d | 36 | * @param[in] u32Freq Target working frequency |
AnnaBridge | 174:b96e65c34a4d | 37 | * @return Real Timer working frequency |
AnnaBridge | 174:b96e65c34a4d | 38 | * @note After calling this API, Timer is \b NOT running yet. But could start timer running be calling |
AnnaBridge | 174:b96e65c34a4d | 39 | * \ref TIMER_Start macro or program registers directly |
AnnaBridge | 174:b96e65c34a4d | 40 | */ |
AnnaBridge | 174:b96e65c34a4d | 41 | uint32_t TIMER_Open(TIMER_T *timer, uint32_t u32Mode, uint32_t u32Freq) |
AnnaBridge | 174:b96e65c34a4d | 42 | { |
AnnaBridge | 174:b96e65c34a4d | 43 | uint32_t u32Clk = TIMER_GetModuleClock(timer); |
AnnaBridge | 174:b96e65c34a4d | 44 | uint32_t u32Cmpr = 0, u32Prescale = 0; |
AnnaBridge | 174:b96e65c34a4d | 45 | |
AnnaBridge | 174:b96e65c34a4d | 46 | // Fastest possible timer working freq is u32Clk / 2. While cmpr = 2, pre-scale = 0 |
AnnaBridge | 174:b96e65c34a4d | 47 | if(u32Freq > (u32Clk / 2)) { |
AnnaBridge | 174:b96e65c34a4d | 48 | u32Cmpr = 2; |
AnnaBridge | 174:b96e65c34a4d | 49 | } else { |
AnnaBridge | 174:b96e65c34a4d | 50 | if(u32Clk >= 0x2000000) { |
AnnaBridge | 174:b96e65c34a4d | 51 | u32Prescale = 3; // real prescaler value is 4 |
AnnaBridge | 174:b96e65c34a4d | 52 | u32Clk >>= 2; |
AnnaBridge | 174:b96e65c34a4d | 53 | } else if(u32Clk >= 0x1000000) { |
AnnaBridge | 174:b96e65c34a4d | 54 | u32Prescale = 1; // real prescaler value is 2 |
AnnaBridge | 174:b96e65c34a4d | 55 | u32Clk >>= 1; |
AnnaBridge | 174:b96e65c34a4d | 56 | } |
AnnaBridge | 174:b96e65c34a4d | 57 | u32Cmpr = u32Clk / u32Freq; |
AnnaBridge | 174:b96e65c34a4d | 58 | } |
AnnaBridge | 174:b96e65c34a4d | 59 | timer->CMPR = u32Cmpr; |
AnnaBridge | 174:b96e65c34a4d | 60 | timer->PRECNT = u32Prescale; |
AnnaBridge | 174:b96e65c34a4d | 61 | timer->CTL = u32Mode; |
AnnaBridge | 174:b96e65c34a4d | 62 | |
AnnaBridge | 174:b96e65c34a4d | 63 | |
AnnaBridge | 174:b96e65c34a4d | 64 | return(u32Clk / (u32Cmpr * (u32Prescale + 1))); |
AnnaBridge | 174:b96e65c34a4d | 65 | } |
AnnaBridge | 174:b96e65c34a4d | 66 | |
AnnaBridge | 174:b96e65c34a4d | 67 | /** |
AnnaBridge | 174:b96e65c34a4d | 68 | * @brief This API stops Timer counting and disable the Timer interrupt function |
AnnaBridge | 174:b96e65c34a4d | 69 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 70 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 71 | */ |
AnnaBridge | 174:b96e65c34a4d | 72 | void TIMER_Close(TIMER_T *timer) |
AnnaBridge | 174:b96e65c34a4d | 73 | { |
AnnaBridge | 174:b96e65c34a4d | 74 | timer->CTL = 0; |
AnnaBridge | 174:b96e65c34a4d | 75 | timer->IER = 0; |
AnnaBridge | 174:b96e65c34a4d | 76 | } |
AnnaBridge | 174:b96e65c34a4d | 77 | |
AnnaBridge | 174:b96e65c34a4d | 78 | /** |
AnnaBridge | 174:b96e65c34a4d | 79 | * @brief This API is used to create a delay loop for u32usec micro seconds |
AnnaBridge | 174:b96e65c34a4d | 80 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 81 | * @param[in] u32Usec Delay period in micro seconds with 10 usec every step. Valid values are between 10~1000000 (10 micro second ~ 1 second) |
AnnaBridge | 174:b96e65c34a4d | 82 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 83 | * @note This API overwrites the register setting of the timer used to count the delay time. |
AnnaBridge | 174:b96e65c34a4d | 84 | * @note This API use polling mode. So there is no need to enable interrupt for the timer module used to generate delay |
AnnaBridge | 174:b96e65c34a4d | 85 | */ |
AnnaBridge | 174:b96e65c34a4d | 86 | void TIMER_Delay(TIMER_T *timer, uint32_t u32Usec) |
AnnaBridge | 174:b96e65c34a4d | 87 | { |
AnnaBridge | 174:b96e65c34a4d | 88 | uint32_t u32Clk = TIMER_GetModuleClock(timer); |
AnnaBridge | 174:b96e65c34a4d | 89 | uint32_t u32Prescale = 0, delay = SystemCoreClock / u32Clk; |
AnnaBridge | 174:b96e65c34a4d | 90 | long long u64Cmpr; |
AnnaBridge | 174:b96e65c34a4d | 91 | |
AnnaBridge | 174:b96e65c34a4d | 92 | // Clear current timer configuration |
AnnaBridge | 174:b96e65c34a4d | 93 | timer->CTL = 0; |
AnnaBridge | 174:b96e65c34a4d | 94 | |
AnnaBridge | 174:b96e65c34a4d | 95 | if(u32Clk == 10000) { // min delay is 100us if timer clock source is LIRC 10k |
AnnaBridge | 174:b96e65c34a4d | 96 | u32Usec = ((u32Usec + 99) / 100) * 100; |
AnnaBridge | 174:b96e65c34a4d | 97 | } else { // 10 usec every step |
AnnaBridge | 174:b96e65c34a4d | 98 | u32Usec = ((u32Usec + 9) / 10) * 10; |
AnnaBridge | 174:b96e65c34a4d | 99 | } |
AnnaBridge | 174:b96e65c34a4d | 100 | |
AnnaBridge | 174:b96e65c34a4d | 101 | if(u32Clk >= 0x2000000) { |
AnnaBridge | 174:b96e65c34a4d | 102 | u32Prescale = 3; // real prescaler value is 4 |
AnnaBridge | 174:b96e65c34a4d | 103 | u32Clk >>= 2; |
AnnaBridge | 174:b96e65c34a4d | 104 | } else if(u32Clk >= 0x1000000) { |
AnnaBridge | 174:b96e65c34a4d | 105 | u32Prescale = 1; // real prescaler value is 2 |
AnnaBridge | 174:b96e65c34a4d | 106 | u32Clk >>= 1; |
AnnaBridge | 174:b96e65c34a4d | 107 | } |
AnnaBridge | 174:b96e65c34a4d | 108 | |
AnnaBridge | 174:b96e65c34a4d | 109 | // u32Usec * u32Clk might overflow if using uint32_t |
AnnaBridge | 174:b96e65c34a4d | 110 | u64Cmpr = ((long long)u32Usec * (long long)u32Clk) / (long long)1000000; |
AnnaBridge | 174:b96e65c34a4d | 111 | |
AnnaBridge | 174:b96e65c34a4d | 112 | timer->CMPR = (uint32_t)u64Cmpr; |
AnnaBridge | 174:b96e65c34a4d | 113 | timer->PRECNT = u32Prescale; |
AnnaBridge | 174:b96e65c34a4d | 114 | timer->CTL = TIMER_CTL_TMR_EN_Msk; // one shot mode |
AnnaBridge | 174:b96e65c34a4d | 115 | |
AnnaBridge | 174:b96e65c34a4d | 116 | // When system clock is faster than timer clock, it is possible timer active bit cannot set in time while we check it. |
AnnaBridge | 174:b96e65c34a4d | 117 | // And the while loop below return immediately, so put a tiny delay here allowing timer start counting and raise active flag. |
AnnaBridge | 174:b96e65c34a4d | 118 | for(; delay > 0; delay--) { |
AnnaBridge | 174:b96e65c34a4d | 119 | __NOP(); |
AnnaBridge | 174:b96e65c34a4d | 120 | } |
AnnaBridge | 174:b96e65c34a4d | 121 | |
AnnaBridge | 174:b96e65c34a4d | 122 | while(timer->CTL & TIMER_CTL_TMR_ACT_Msk); |
AnnaBridge | 174:b96e65c34a4d | 123 | |
AnnaBridge | 174:b96e65c34a4d | 124 | } |
AnnaBridge | 174:b96e65c34a4d | 125 | |
AnnaBridge | 174:b96e65c34a4d | 126 | /** |
AnnaBridge | 174:b96e65c34a4d | 127 | * @brief This API is used to enable timer capture function with specified mode and capture edge |
AnnaBridge | 174:b96e65c34a4d | 128 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 129 | * @param[in] u32CapMode Timer capture mode. Could be |
AnnaBridge | 174:b96e65c34a4d | 130 | * - \ref TIMER_CAPTURE_FREE_COUNTING_MODE |
AnnaBridge | 174:b96e65c34a4d | 131 | * - \ref TIMER_CAPTURE_TRIGGER_COUNTING_MODE |
AnnaBridge | 174:b96e65c34a4d | 132 | * - \ref TIMER_CAPTURE_COUNTER_RESET_MODE |
AnnaBridge | 174:b96e65c34a4d | 133 | * @param[in] u32Edge Timer capture edge. Possible values are |
AnnaBridge | 174:b96e65c34a4d | 134 | * - \ref TIMER_CAPTURE_FALLING_EDGE |
AnnaBridge | 174:b96e65c34a4d | 135 | * - \ref TIMER_CAPTURE_RISING_EDGE |
AnnaBridge | 174:b96e65c34a4d | 136 | * - \ref TIMER_CAPTURE_FALLING_THEN_RISING_EDGE |
AnnaBridge | 174:b96e65c34a4d | 137 | * - \ref TIMER_CAPTURE_RISING_THEN_FALLING_EDGE |
AnnaBridge | 174:b96e65c34a4d | 138 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 139 | * @note Timer frequency should be configured separately by using \ref TIMER_Open API, or program registers directly |
AnnaBridge | 174:b96e65c34a4d | 140 | */ |
AnnaBridge | 174:b96e65c34a4d | 141 | void TIMER_EnableCapture(TIMER_T *timer, uint32_t u32CapMode, uint32_t u32Edge) |
AnnaBridge | 174:b96e65c34a4d | 142 | { |
AnnaBridge | 174:b96e65c34a4d | 143 | |
AnnaBridge | 174:b96e65c34a4d | 144 | timer->CTL = (timer->CTL & ~(TIMER_CTL_TCAP_MODE_Msk | |
AnnaBridge | 174:b96e65c34a4d | 145 | TIMER_CTL_TCAP_CNT_MODE_Msk | |
AnnaBridge | 174:b96e65c34a4d | 146 | TIMER_CTL_TCAP_EDGE_Msk)) | |
AnnaBridge | 174:b96e65c34a4d | 147 | u32CapMode | u32Edge | TIMER_CTL_TCAP_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 148 | } |
AnnaBridge | 174:b96e65c34a4d | 149 | |
AnnaBridge | 174:b96e65c34a4d | 150 | /** |
AnnaBridge | 174:b96e65c34a4d | 151 | * @brief This API is used to disable the Timer capture function |
AnnaBridge | 174:b96e65c34a4d | 152 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 153 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 154 | */ |
AnnaBridge | 174:b96e65c34a4d | 155 | void TIMER_DisableCapture(TIMER_T *timer) |
AnnaBridge | 174:b96e65c34a4d | 156 | { |
AnnaBridge | 174:b96e65c34a4d | 157 | timer->CTL &= ~TIMER_CTL_TCAP_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 158 | |
AnnaBridge | 174:b96e65c34a4d | 159 | } |
AnnaBridge | 174:b96e65c34a4d | 160 | |
AnnaBridge | 174:b96e65c34a4d | 161 | /** |
AnnaBridge | 174:b96e65c34a4d | 162 | * @brief This function is used to enable the Timer counter function with specify detection edge |
AnnaBridge | 174:b96e65c34a4d | 163 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 164 | * @param[in] u32Edge Detection edge of counter pin. Could be ether |
AnnaBridge | 174:b96e65c34a4d | 165 | * - \ref TIMER_COUNTER_RISING_EDGE, or |
AnnaBridge | 174:b96e65c34a4d | 166 | * - \ref TIMER_COUNTER_FALLING_EDGE |
AnnaBridge | 174:b96e65c34a4d | 167 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 168 | * @note Timer compare value should be configured separately by using \ref TIMER_SET_CMP_VALUE macro or program registers directly |
AnnaBridge | 174:b96e65c34a4d | 169 | */ |
AnnaBridge | 174:b96e65c34a4d | 170 | void TIMER_EnableEventCounter(TIMER_T *timer, uint32_t u32Edge) |
AnnaBridge | 174:b96e65c34a4d | 171 | { |
AnnaBridge | 174:b96e65c34a4d | 172 | timer->CTL = (timer->CTL & ~TIMER_CTL_EVENT_EDGE_Msk) | u32Edge; |
AnnaBridge | 174:b96e65c34a4d | 173 | timer->CTL |= TIMER_CTL_EVENT_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 174 | } |
AnnaBridge | 174:b96e65c34a4d | 175 | |
AnnaBridge | 174:b96e65c34a4d | 176 | /** |
AnnaBridge | 174:b96e65c34a4d | 177 | * @brief This API is used to disable the Timer event counter function. |
AnnaBridge | 174:b96e65c34a4d | 178 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 179 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 180 | */ |
AnnaBridge | 174:b96e65c34a4d | 181 | void TIMER_DisableEventCounter(TIMER_T *timer) |
AnnaBridge | 174:b96e65c34a4d | 182 | { |
AnnaBridge | 174:b96e65c34a4d | 183 | timer->CTL &= ~TIMER_CTL_EVENT_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 184 | } |
AnnaBridge | 174:b96e65c34a4d | 185 | |
AnnaBridge | 174:b96e65c34a4d | 186 | /** |
AnnaBridge | 174:b96e65c34a4d | 187 | * @brief This API is used to get the clock frequency of Timer |
AnnaBridge | 174:b96e65c34a4d | 188 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 189 | * @return Timer clock frequency |
AnnaBridge | 174:b96e65c34a4d | 190 | * @note This API cannot return correct clock rate if timer source is external clock input. |
AnnaBridge | 174:b96e65c34a4d | 191 | */ |
AnnaBridge | 174:b96e65c34a4d | 192 | uint32_t TIMER_GetModuleClock(TIMER_T *timer) |
AnnaBridge | 174:b96e65c34a4d | 193 | { |
AnnaBridge | 174:b96e65c34a4d | 194 | uint32_t u32Src; |
AnnaBridge | 174:b96e65c34a4d | 195 | const uint32_t au32Clk[] = {__HXT, __LXT, __LIRC, 0}; // we don't know actual clock if external pin is clock source, set to 0 here |
AnnaBridge | 174:b96e65c34a4d | 196 | |
AnnaBridge | 174:b96e65c34a4d | 197 | if(timer == TIMER0) |
AnnaBridge | 174:b96e65c34a4d | 198 | u32Src = (CLK->CLKSEL1 & CLK_CLKSEL1_TMR0_S_Msk) >> CLK_CLKSEL1_TMR0_S_Pos; |
AnnaBridge | 174:b96e65c34a4d | 199 | else if(timer == TIMER1) |
AnnaBridge | 174:b96e65c34a4d | 200 | u32Src = (CLK->CLKSEL1 & CLK_CLKSEL1_TMR1_S_Msk) >> CLK_CLKSEL1_TMR1_S_Pos; |
AnnaBridge | 174:b96e65c34a4d | 201 | else if(timer == TIMER2) |
AnnaBridge | 174:b96e65c34a4d | 202 | u32Src = (CLK->CLKSEL2 & CLK_CLKSEL2_TMR2_S_Msk) >> CLK_CLKSEL2_TMR2_S_Pos; |
AnnaBridge | 174:b96e65c34a4d | 203 | else // Timer 3 |
AnnaBridge | 174:b96e65c34a4d | 204 | u32Src = (CLK->CLKSEL2 & CLK_CLKSEL2_TMR3_S_Msk) >> CLK_CLKSEL2_TMR3_S_Pos; |
AnnaBridge | 174:b96e65c34a4d | 205 | |
AnnaBridge | 174:b96e65c34a4d | 206 | if(u32Src < 4) |
AnnaBridge | 174:b96e65c34a4d | 207 | return au32Clk[u32Src]; |
AnnaBridge | 174:b96e65c34a4d | 208 | else |
AnnaBridge | 174:b96e65c34a4d | 209 | return __HIRC; |
AnnaBridge | 174:b96e65c34a4d | 210 | |
AnnaBridge | 174:b96e65c34a4d | 211 | } |
AnnaBridge | 174:b96e65c34a4d | 212 | |
AnnaBridge | 174:b96e65c34a4d | 213 | /** |
AnnaBridge | 174:b96e65c34a4d | 214 | * @brief This function is used to enable the Timer frequency counter function |
AnnaBridge | 174:b96e65c34a4d | 215 | * @param[in] timer The base address of Timer module. Can be \ref TIMER0 or \ref TIMER2 |
AnnaBridge | 174:b96e65c34a4d | 216 | * @param[in] u32DropCount This parameter has no effect in Nano100 series BSP |
AnnaBridge | 174:b96e65c34a4d | 217 | * @param[in] u32Timeout This parameter has no effect in Nano100 series BSP |
AnnaBridge | 174:b96e65c34a4d | 218 | * @param[in] u32EnableInt Enable interrupt assertion after capture complete or not. Valid values are TRUE and FALSE |
AnnaBridge | 174:b96e65c34a4d | 219 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 220 | * @details This function is used to calculate input event frequency. After enable |
AnnaBridge | 174:b96e65c34a4d | 221 | * this function, a pair of timers, TIMER0 and TIMER1, or TIMER2 and TIMER3 |
AnnaBridge | 174:b96e65c34a4d | 222 | * will be configured for this function. The mode used to calculate input |
AnnaBridge | 174:b96e65c34a4d | 223 | * event frequency is mentioned as "Inter Timer Trigger Mode" in Technical |
AnnaBridge | 174:b96e65c34a4d | 224 | * Reference Manual |
AnnaBridge | 174:b96e65c34a4d | 225 | */ |
AnnaBridge | 174:b96e65c34a4d | 226 | void TIMER_EnableFreqCounter(TIMER_T *timer, |
AnnaBridge | 174:b96e65c34a4d | 227 | uint32_t u32DropCount, |
AnnaBridge | 174:b96e65c34a4d | 228 | uint32_t u32Timeout, |
AnnaBridge | 174:b96e65c34a4d | 229 | uint32_t u32EnableInt) |
AnnaBridge | 174:b96e65c34a4d | 230 | { |
AnnaBridge | 174:b96e65c34a4d | 231 | TIMER_T *t; // store the timer base to configure compare value |
AnnaBridge | 174:b96e65c34a4d | 232 | |
AnnaBridge | 174:b96e65c34a4d | 233 | t = (timer == TIMER0) ? TIMER1 : TIMER3; |
AnnaBridge | 174:b96e65c34a4d | 234 | |
AnnaBridge | 174:b96e65c34a4d | 235 | t->CMPR = 0xFFFFFF; |
AnnaBridge | 174:b96e65c34a4d | 236 | t->IER = u32EnableInt ? TIMER_IER_TCAP_IE_Msk : 0; |
AnnaBridge | 174:b96e65c34a4d | 237 | timer->CTL = TIMER_CTL_INTR_TRG_EN_Msk | TIMER_CTL_TMR_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 238 | |
AnnaBridge | 174:b96e65c34a4d | 239 | return; |
AnnaBridge | 174:b96e65c34a4d | 240 | } |
AnnaBridge | 174:b96e65c34a4d | 241 | /** |
AnnaBridge | 174:b96e65c34a4d | 242 | * @brief This function is used to disable the Timer frequency counter function. |
AnnaBridge | 174:b96e65c34a4d | 243 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 244 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 245 | */ |
AnnaBridge | 174:b96e65c34a4d | 246 | void TIMER_DisableFreqCounter(TIMER_T *timer) |
AnnaBridge | 174:b96e65c34a4d | 247 | { |
AnnaBridge | 174:b96e65c34a4d | 248 | timer->CTL &= ~TIMER_CTL_INTR_TRG_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 249 | } |
AnnaBridge | 174:b96e65c34a4d | 250 | |
AnnaBridge | 174:b96e65c34a4d | 251 | /** |
AnnaBridge | 174:b96e65c34a4d | 252 | * @brief This function is used to select the interrupt source used to trigger other modules. |
AnnaBridge | 174:b96e65c34a4d | 253 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 254 | * @param[in] u32Src Selects the interrupt source to trigger other modules. Could be: |
AnnaBridge | 174:b96e65c34a4d | 255 | * - \ref TIMER_TIMEOUT_TRIGGER |
AnnaBridge | 174:b96e65c34a4d | 256 | * - \ref TIMER_CAPTURE_TRIGGER |
AnnaBridge | 174:b96e65c34a4d | 257 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 258 | */ |
AnnaBridge | 174:b96e65c34a4d | 259 | void TIMER_SetTriggerSource(TIMER_T *timer, uint32_t u32Src) |
AnnaBridge | 174:b96e65c34a4d | 260 | { |
AnnaBridge | 174:b96e65c34a4d | 261 | timer->CTL = (timer->CTL & ~TIMER_CTL_CAP_TRG_EN_Msk) | u32Src; |
AnnaBridge | 174:b96e65c34a4d | 262 | } |
AnnaBridge | 174:b96e65c34a4d | 263 | |
AnnaBridge | 174:b96e65c34a4d | 264 | /** |
AnnaBridge | 174:b96e65c34a4d | 265 | * @brief This function is used to set modules trigger by timer interrupt |
AnnaBridge | 174:b96e65c34a4d | 266 | * @param[in] timer The base address of Timer module |
AnnaBridge | 174:b96e65c34a4d | 267 | * @param[in] u32Mask The mask of modules (ADC, DAC and PDMA) trigger by timer. Is the combination of |
AnnaBridge | 174:b96e65c34a4d | 268 | * - \ref TIMER_CTL_PDMA_TEEN_Msk, |
AnnaBridge | 174:b96e65c34a4d | 269 | * - \ref TIMER_CTL_ADC_TEEN_Msk, and |
AnnaBridge | 174:b96e65c34a4d | 270 | * - \ref TIMER_CTL_DAC_TEEN_Msk, |
AnnaBridge | 174:b96e65c34a4d | 271 | * @return None |
AnnaBridge | 174:b96e65c34a4d | 272 | */ |
AnnaBridge | 174:b96e65c34a4d | 273 | void TIMER_SetTriggerTarget(TIMER_T *timer, uint32_t u32Mask) |
AnnaBridge | 174:b96e65c34a4d | 274 | { |
AnnaBridge | 174:b96e65c34a4d | 275 | timer->CTL = (timer->CTL & ~(TIMER_CTL_PDMA_TEEN_Msk | TIMER_CTL_DAC_TEEN_Msk | TIMER_CTL_ADC_TEEN_Msk)) | u32Mask; |
AnnaBridge | 174:b96e65c34a4d | 276 | } |
AnnaBridge | 174:b96e65c34a4d | 277 | |
AnnaBridge | 174:b96e65c34a4d | 278 | /*@}*/ /* end of group NANO100_TIMER_EXPORTED_FUNCTIONS */ |
AnnaBridge | 174:b96e65c34a4d | 279 | |
AnnaBridge | 174:b96e65c34a4d | 280 | /*@}*/ /* end of group NANO100_TIMER_Driver */ |
AnnaBridge | 174:b96e65c34a4d | 281 | |
AnnaBridge | 174:b96e65c34a4d | 282 | /*@}*/ /* end of group NANO100_Device_Driver */ |
AnnaBridge | 174:b96e65c34a4d | 283 | |
AnnaBridge | 174:b96e65c34a4d | 284 | /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/ |