Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Smoothie by
libs/LPC17xx/LPC17xxLib/src/lpc17xx_timer.c@2:1df0b61d3b5a, 2014-02-28 (annotated)
- Committer:
- Michael J. Spencer
- Date:
- Fri Feb 28 18:52:52 2014 -0800
- Revision:
- 2:1df0b61d3b5a
Update to latest Smoothie.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Michael J. Spencer |
2:1df0b61d3b5a | 1 | #ifdef __LPC17XX__ |
| Michael J. Spencer |
2:1df0b61d3b5a | 2 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 3 | /********************************************************************** |
| Michael J. Spencer |
2:1df0b61d3b5a | 4 | * $Id$ lpc17xx_timer.c 2011-03-10 |
| Michael J. Spencer |
2:1df0b61d3b5a | 5 | *//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 6 | * @file lpc17xx_timer.c |
| Michael J. Spencer |
2:1df0b61d3b5a | 7 | * @brief Contains all functions support for Timer firmware library |
| Michael J. Spencer |
2:1df0b61d3b5a | 8 | * on LPC17xx |
| Michael J. Spencer |
2:1df0b61d3b5a | 9 | * @version 3.1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 10 | * @date 10. March. 2011 |
| Michael J. Spencer |
2:1df0b61d3b5a | 11 | * @author NXP MCU SW Application Team |
| Michael J. Spencer |
2:1df0b61d3b5a | 12 | * |
| Michael J. Spencer |
2:1df0b61d3b5a | 13 | * Copyright(C) 2011, NXP Semiconductor |
| Michael J. Spencer |
2:1df0b61d3b5a | 14 | * All rights reserved. |
| Michael J. Spencer |
2:1df0b61d3b5a | 15 | * |
| Michael J. Spencer |
2:1df0b61d3b5a | 16 | *********************************************************************** |
| Michael J. Spencer |
2:1df0b61d3b5a | 17 | * Software that is described herein is for illustrative purposes only |
| Michael J. Spencer |
2:1df0b61d3b5a | 18 | * which provides customers with programming information regarding the |
| Michael J. Spencer |
2:1df0b61d3b5a | 19 | * products. This software is supplied "AS IS" without any warranties. |
| Michael J. Spencer |
2:1df0b61d3b5a | 20 | * NXP Semiconductors assumes no responsibility or liability for the |
| Michael J. Spencer |
2:1df0b61d3b5a | 21 | * use of the software, conveys no license or title under any patent, |
| Michael J. Spencer |
2:1df0b61d3b5a | 22 | * copyright, or mask work right to the product. NXP Semiconductors |
| Michael J. Spencer |
2:1df0b61d3b5a | 23 | * reserves the right to make changes in the software without |
| Michael J. Spencer |
2:1df0b61d3b5a | 24 | * notification. NXP Semiconductors also make no representation or |
| Michael J. Spencer |
2:1df0b61d3b5a | 25 | * warranty that such application will be suitable for the specified |
| Michael J. Spencer |
2:1df0b61d3b5a | 26 | * use without further testing or modification. |
| Michael J. Spencer |
2:1df0b61d3b5a | 27 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 28 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 29 | /* Peripheral group ----------------------------------------------------------- */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 30 | /** @addtogroup TIM |
| Michael J. Spencer |
2:1df0b61d3b5a | 31 | * @{ |
| Michael J. Spencer |
2:1df0b61d3b5a | 32 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 33 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 34 | /* Includes ------------------------------------------------------------------- */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 35 | #include "lpc17xx_timer.h" |
| Michael J. Spencer |
2:1df0b61d3b5a | 36 | #include "lpc17xx_clkpwr.h" |
| Michael J. Spencer |
2:1df0b61d3b5a | 37 | #include "lpc17xx_pinsel.h" |
| Michael J. Spencer |
2:1df0b61d3b5a | 38 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 39 | /* If this source file built with example, the LPC17xx FW library configuration |
| Michael J. Spencer |
2:1df0b61d3b5a | 40 | * file in each example directory ("lpc17xx_libcfg.h") must be included, |
| Michael J. Spencer |
2:1df0b61d3b5a | 41 | * otherwise the default FW library configuration file must be included instead |
| Michael J. Spencer |
2:1df0b61d3b5a | 42 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 43 | #ifdef __BUILD_WITH_EXAMPLE__ |
| Michael J. Spencer |
2:1df0b61d3b5a | 44 | #include "lpc17xx_libcfg.h" |
| Michael J. Spencer |
2:1df0b61d3b5a | 45 | #else |
| Michael J. Spencer |
2:1df0b61d3b5a | 46 | #include "lpc17xx_libcfg_default.h" |
| Michael J. Spencer |
2:1df0b61d3b5a | 47 | #endif /* __BUILD_WITH_EXAMPLE__ */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 48 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 49 | #ifdef _TIM |
| Michael J. Spencer |
2:1df0b61d3b5a | 50 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 51 | /* Private Functions ---------------------------------------------------------- */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 52 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 53 | static uint32_t getPClock (uint32_t timernum); |
| Michael J. Spencer |
2:1df0b61d3b5a | 54 | static uint32_t converUSecToVal (uint32_t timernum, uint32_t usec); |
| Michael J. Spencer |
2:1df0b61d3b5a | 55 | static uint32_t converPtrToTimeNum (LPC_TIM_TypeDef *TIMx); |
| Michael J. Spencer |
2:1df0b61d3b5a | 56 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 57 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 58 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 59 | * @brief Get peripheral clock of each timer controller |
| Michael J. Spencer |
2:1df0b61d3b5a | 60 | * @param[in] timernum Timer number |
| Michael J. Spencer |
2:1df0b61d3b5a | 61 | * @return Peripheral clock of timer |
| Michael J. Spencer |
2:1df0b61d3b5a | 62 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 63 | static uint32_t getPClock (uint32_t timernum) |
| Michael J. Spencer |
2:1df0b61d3b5a | 64 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 65 | uint32_t clkdlycnt = 0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 66 | switch (timernum) |
| Michael J. Spencer |
2:1df0b61d3b5a | 67 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 68 | case 0: |
| Michael J. Spencer |
2:1df0b61d3b5a | 69 | clkdlycnt = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_TIMER0); |
| Michael J. Spencer |
2:1df0b61d3b5a | 70 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 71 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 72 | case 1: |
| Michael J. Spencer |
2:1df0b61d3b5a | 73 | clkdlycnt = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_TIMER1); |
| Michael J. Spencer |
2:1df0b61d3b5a | 74 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 75 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 76 | case 2: |
| Michael J. Spencer |
2:1df0b61d3b5a | 77 | clkdlycnt = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_TIMER2); |
| Michael J. Spencer |
2:1df0b61d3b5a | 78 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 79 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 80 | case 3: |
| Michael J. Spencer |
2:1df0b61d3b5a | 81 | clkdlycnt = CLKPWR_GetPCLK (CLKPWR_PCLKSEL_TIMER3); |
| Michael J. Spencer |
2:1df0b61d3b5a | 82 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 83 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 84 | return clkdlycnt; |
| Michael J. Spencer |
2:1df0b61d3b5a | 85 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 86 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 87 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 88 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 89 | * @brief Convert a time to a timer count value |
| Michael J. Spencer |
2:1df0b61d3b5a | 90 | * @param[in] timernum Timer number |
| Michael J. Spencer |
2:1df0b61d3b5a | 91 | * @param[in] usec Time in microseconds |
| Michael J. Spencer |
2:1df0b61d3b5a | 92 | * @return The number of required clock ticks to give the time delay |
| Michael J. Spencer |
2:1df0b61d3b5a | 93 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 94 | uint32_t converUSecToVal (uint32_t timernum, uint32_t usec) |
| Michael J. Spencer |
2:1df0b61d3b5a | 95 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 96 | uint64_t clkdlycnt; |
| Michael J. Spencer |
2:1df0b61d3b5a | 97 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 98 | // Get Pclock of timer |
| Michael J. Spencer |
2:1df0b61d3b5a | 99 | clkdlycnt = (uint64_t) getPClock(timernum); |
| Michael J. Spencer |
2:1df0b61d3b5a | 100 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 101 | clkdlycnt = (clkdlycnt * usec) / 1000000; |
| Michael J. Spencer |
2:1df0b61d3b5a | 102 | return (uint32_t) clkdlycnt; |
| Michael J. Spencer |
2:1df0b61d3b5a | 103 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 104 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 105 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 106 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 107 | * @brief Convert a timer register pointer to a timer number |
| Michael J. Spencer |
2:1df0b61d3b5a | 108 | * @param[in] TIMx Pointer to LPC_TIM_TypeDef, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 109 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 110 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 111 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 112 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 113 | * @return The timer number (0 to 3) or -1 if register pointer is bad |
| Michael J. Spencer |
2:1df0b61d3b5a | 114 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 115 | uint32_t converPtrToTimeNum (LPC_TIM_TypeDef *TIMx) |
| Michael J. Spencer |
2:1df0b61d3b5a | 116 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 117 | uint32_t tnum = (uint32_t)-1; |
| Michael J. Spencer |
2:1df0b61d3b5a | 118 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 119 | if (TIMx == LPC_TIM0) |
| Michael J. Spencer |
2:1df0b61d3b5a | 120 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 121 | tnum = 0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 122 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 123 | else if (TIMx == LPC_TIM1) |
| Michael J. Spencer |
2:1df0b61d3b5a | 124 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 125 | tnum = 1; |
| Michael J. Spencer |
2:1df0b61d3b5a | 126 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 127 | else if (TIMx == LPC_TIM2) |
| Michael J. Spencer |
2:1df0b61d3b5a | 128 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 129 | tnum = 2; |
| Michael J. Spencer |
2:1df0b61d3b5a | 130 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 131 | else if (TIMx == LPC_TIM3) |
| Michael J. Spencer |
2:1df0b61d3b5a | 132 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 133 | tnum = 3; |
| Michael J. Spencer |
2:1df0b61d3b5a | 134 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 135 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 136 | return tnum; |
| Michael J. Spencer |
2:1df0b61d3b5a | 137 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 138 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 139 | /* End of Private Functions ---------------------------------------------------- */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 140 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 141 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 142 | /* Public Functions ----------------------------------------------------------- */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 143 | /** @addtogroup TIM_Public_Functions |
| Michael J. Spencer |
2:1df0b61d3b5a | 144 | * @{ |
| Michael J. Spencer |
2:1df0b61d3b5a | 145 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 146 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 147 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 148 | * @brief Get Interrupt Status |
| Michael J. Spencer |
2:1df0b61d3b5a | 149 | * @param[in] TIMx Timer selection, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 150 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 151 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 152 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 153 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 154 | * @param[in] IntFlag: interrupt type, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 155 | * - TIM_MR0_INT: Interrupt for Match channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 156 | * - TIM_MR1_INT: Interrupt for Match channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 157 | * - TIM_MR2_INT: Interrupt for Match channel 2 |
| Michael J. Spencer |
2:1df0b61d3b5a | 158 | * - TIM_MR3_INT: Interrupt for Match channel 3 |
| Michael J. Spencer |
2:1df0b61d3b5a | 159 | * - TIM_CR0_INT: Interrupt for Capture channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 160 | * - TIM_CR1_INT: Interrupt for Capture channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 161 | * @return FlagStatus |
| Michael J. Spencer |
2:1df0b61d3b5a | 162 | * - SET : interrupt |
| Michael J. Spencer |
2:1df0b61d3b5a | 163 | * - RESET : no interrupt |
| Michael J. Spencer |
2:1df0b61d3b5a | 164 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 165 | FlagStatus TIM_GetIntStatus(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag) |
| Michael J. Spencer |
2:1df0b61d3b5a | 166 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 167 | uint8_t temp; |
| Michael J. Spencer |
2:1df0b61d3b5a | 168 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 169 | CHECK_PARAM(PARAM_TIM_INT_TYPE(IntFlag)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 170 | temp = (TIMx->IR)& TIM_IR_CLR(IntFlag); |
| Michael J. Spencer |
2:1df0b61d3b5a | 171 | if (temp) |
| Michael J. Spencer |
2:1df0b61d3b5a | 172 | return SET; |
| Michael J. Spencer |
2:1df0b61d3b5a | 173 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 174 | return RESET; |
| Michael J. Spencer |
2:1df0b61d3b5a | 175 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 176 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 177 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 178 | * @brief Get Capture Interrupt Status |
| Michael J. Spencer |
2:1df0b61d3b5a | 179 | * @param[in] TIMx Timer selection, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 180 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 181 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 182 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 183 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 184 | * @param[in] IntFlag: interrupt type, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 185 | * - TIM_MR0_INT: Interrupt for Match channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 186 | * - TIM_MR1_INT: Interrupt for Match channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 187 | * - TIM_MR2_INT: Interrupt for Match channel 2 |
| Michael J. Spencer |
2:1df0b61d3b5a | 188 | * - TIM_MR3_INT: Interrupt for Match channel 3 |
| Michael J. Spencer |
2:1df0b61d3b5a | 189 | * - TIM_CR0_INT: Interrupt for Capture channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 190 | * - TIM_CR1_INT: Interrupt for Capture channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 191 | * @return FlagStatus |
| Michael J. Spencer |
2:1df0b61d3b5a | 192 | * - SET : interrupt |
| Michael J. Spencer |
2:1df0b61d3b5a | 193 | * - RESET : no interrupt |
| Michael J. Spencer |
2:1df0b61d3b5a | 194 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 195 | FlagStatus TIM_GetIntCaptureStatus(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag) |
| Michael J. Spencer |
2:1df0b61d3b5a | 196 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 197 | uint8_t temp; |
| Michael J. Spencer |
2:1df0b61d3b5a | 198 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 199 | CHECK_PARAM(PARAM_TIM_INT_TYPE(IntFlag)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 200 | temp = (TIMx->IR) & (1<<(4+IntFlag)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 201 | if(temp) |
| Michael J. Spencer |
2:1df0b61d3b5a | 202 | return SET; |
| Michael J. Spencer |
2:1df0b61d3b5a | 203 | return RESET; |
| Michael J. Spencer |
2:1df0b61d3b5a | 204 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 205 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 206 | * @brief Clear Interrupt pending |
| Michael J. Spencer |
2:1df0b61d3b5a | 207 | * @param[in] TIMx Timer selection, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 208 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 209 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 210 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 211 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 212 | * @param[in] IntFlag: interrupt type, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 213 | * - TIM_MR0_INT: Interrupt for Match channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 214 | * - TIM_MR1_INT: Interrupt for Match channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 215 | * - TIM_MR2_INT: Interrupt for Match channel 2 |
| Michael J. Spencer |
2:1df0b61d3b5a | 216 | * - TIM_MR3_INT: Interrupt for Match channel 3 |
| Michael J. Spencer |
2:1df0b61d3b5a | 217 | * - TIM_CR0_INT: Interrupt for Capture channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 218 | * - TIM_CR1_INT: Interrupt for Capture channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 219 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 220 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 221 | void TIM_ClearIntPending(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag) |
| Michael J. Spencer |
2:1df0b61d3b5a | 222 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 223 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 224 | CHECK_PARAM(PARAM_TIM_INT_TYPE(IntFlag)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 225 | TIMx->IR = TIM_IR_CLR(IntFlag); |
| Michael J. Spencer |
2:1df0b61d3b5a | 226 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 227 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 228 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 229 | * @brief Clear Capture Interrupt pending |
| Michael J. Spencer |
2:1df0b61d3b5a | 230 | * @param[in] TIMx Timer selection, should be |
| Michael J. Spencer |
2:1df0b61d3b5a | 231 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 232 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 233 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 234 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 235 | * @param[in] IntFlag interrupt type, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 236 | * - TIM_MR0_INT: Interrupt for Match channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 237 | * - TIM_MR1_INT: Interrupt for Match channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 238 | * - TIM_MR2_INT: Interrupt for Match channel 2 |
| Michael J. Spencer |
2:1df0b61d3b5a | 239 | * - TIM_MR3_INT: Interrupt for Match channel 3 |
| Michael J. Spencer |
2:1df0b61d3b5a | 240 | * - TIM_CR0_INT: Interrupt for Capture channel 0 |
| Michael J. Spencer |
2:1df0b61d3b5a | 241 | * - TIM_CR1_INT: Interrupt for Capture channel 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 242 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 243 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 244 | void TIM_ClearIntCapturePending(LPC_TIM_TypeDef *TIMx, TIM_INT_TYPE IntFlag) |
| Michael J. Spencer |
2:1df0b61d3b5a | 245 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 246 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 247 | CHECK_PARAM(PARAM_TIM_INT_TYPE(IntFlag)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 248 | TIMx->IR = (1<<(4+IntFlag)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 249 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 250 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 251 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 252 | * @brief Configuration for Timer at initial time |
| Michael J. Spencer |
2:1df0b61d3b5a | 253 | * @param[in] TimerCounterMode timer counter mode, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 254 | * - TIM_TIMER_MODE: Timer mode |
| Michael J. Spencer |
2:1df0b61d3b5a | 255 | * - TIM_COUNTER_RISING_MODE: Counter rising mode |
| Michael J. Spencer |
2:1df0b61d3b5a | 256 | * - TIM_COUNTER_FALLING_MODE: Counter falling mode |
| Michael J. Spencer |
2:1df0b61d3b5a | 257 | * - TIM_COUNTER_ANY_MODE:Counter on both edges |
| Michael J. Spencer |
2:1df0b61d3b5a | 258 | * @param[in] TIM_ConfigStruct pointer to TIM_TIMERCFG_Type or |
| Michael J. Spencer |
2:1df0b61d3b5a | 259 | * TIM_COUNTERCFG_Type |
| Michael J. Spencer |
2:1df0b61d3b5a | 260 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 261 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 262 | void TIM_ConfigStructInit(TIM_MODE_OPT TimerCounterMode, void *TIM_ConfigStruct) |
| Michael J. Spencer |
2:1df0b61d3b5a | 263 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 264 | if (TimerCounterMode == TIM_TIMER_MODE ) |
| Michael J. Spencer |
2:1df0b61d3b5a | 265 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 266 | TIM_TIMERCFG_Type * pTimeCfg = (TIM_TIMERCFG_Type *)TIM_ConfigStruct; |
| Michael J. Spencer |
2:1df0b61d3b5a | 267 | pTimeCfg->PrescaleOption = TIM_PRESCALE_USVAL; |
| Michael J. Spencer |
2:1df0b61d3b5a | 268 | pTimeCfg->PrescaleValue = 1; |
| Michael J. Spencer |
2:1df0b61d3b5a | 269 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 270 | else |
| Michael J. Spencer |
2:1df0b61d3b5a | 271 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 272 | TIM_COUNTERCFG_Type * pCounterCfg = (TIM_COUNTERCFG_Type *)TIM_ConfigStruct; |
| Michael J. Spencer |
2:1df0b61d3b5a | 273 | pCounterCfg->CountInputSelect = TIM_COUNTER_INCAP0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 274 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 275 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 276 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 277 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 278 | * @brief Initial Timer/Counter device |
| Michael J. Spencer |
2:1df0b61d3b5a | 279 | * Set Clock frequency for Timer |
| Michael J. Spencer |
2:1df0b61d3b5a | 280 | * Set initial configuration for Timer |
| Michael J. Spencer |
2:1df0b61d3b5a | 281 | * @param[in] TIMx Timer selection, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 282 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 283 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 284 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 285 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 286 | * @param[in] TimerCounterMode Timer counter mode, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 287 | * - TIM_TIMER_MODE: Timer mode |
| Michael J. Spencer |
2:1df0b61d3b5a | 288 | * - TIM_COUNTER_RISING_MODE: Counter rising mode |
| Michael J. Spencer |
2:1df0b61d3b5a | 289 | * - TIM_COUNTER_FALLING_MODE: Counter falling mode |
| Michael J. Spencer |
2:1df0b61d3b5a | 290 | * - TIM_COUNTER_ANY_MODE:Counter on both edges |
| Michael J. Spencer |
2:1df0b61d3b5a | 291 | * @param[in] TIM_ConfigStruct pointer to TIM_TIMERCFG_Type |
| Michael J. Spencer |
2:1df0b61d3b5a | 292 | * that contains the configuration information for the |
| Michael J. Spencer |
2:1df0b61d3b5a | 293 | * specified Timer peripheral. |
| Michael J. Spencer |
2:1df0b61d3b5a | 294 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 295 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 296 | void TIM_Init(LPC_TIM_TypeDef *TIMx, TIM_MODE_OPT TimerCounterMode, void *TIM_ConfigStruct) |
| Michael J. Spencer |
2:1df0b61d3b5a | 297 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 298 | TIM_TIMERCFG_Type *pTimeCfg; |
| Michael J. Spencer |
2:1df0b61d3b5a | 299 | TIM_COUNTERCFG_Type *pCounterCfg; |
| Michael J. Spencer |
2:1df0b61d3b5a | 300 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 301 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 302 | CHECK_PARAM(PARAM_TIM_MODE_OPT(TimerCounterMode)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 303 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 304 | //set power |
| Michael J. Spencer |
2:1df0b61d3b5a | 305 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 306 | if (TIMx== LPC_TIM0) |
| Michael J. Spencer |
2:1df0b61d3b5a | 307 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 308 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM0, ENABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 309 | //PCLK_Timer0 = CCLK/4 |
| Michael J. Spencer |
2:1df0b61d3b5a | 310 | CLKPWR_SetPCLKDiv (CLKPWR_PCLKSEL_TIMER0, CLKPWR_PCLKSEL_CCLK_DIV_4); |
| Michael J. Spencer |
2:1df0b61d3b5a | 311 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 312 | else if (TIMx== LPC_TIM1) |
| Michael J. Spencer |
2:1df0b61d3b5a | 313 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 314 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM1, ENABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 315 | //PCLK_Timer1 = CCLK/4 |
| Michael J. Spencer |
2:1df0b61d3b5a | 316 | CLKPWR_SetPCLKDiv (CLKPWR_PCLKSEL_TIMER1, CLKPWR_PCLKSEL_CCLK_DIV_4); |
| Michael J. Spencer |
2:1df0b61d3b5a | 317 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 318 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 319 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 320 | else if (TIMx== LPC_TIM2) |
| Michael J. Spencer |
2:1df0b61d3b5a | 321 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 322 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM2, ENABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 323 | //PCLK_Timer2= CCLK/4 |
| Michael J. Spencer |
2:1df0b61d3b5a | 324 | CLKPWR_SetPCLKDiv (CLKPWR_PCLKSEL_TIMER2, CLKPWR_PCLKSEL_CCLK_DIV_4); |
| Michael J. Spencer |
2:1df0b61d3b5a | 325 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 326 | else if (TIMx== LPC_TIM3) |
| Michael J. Spencer |
2:1df0b61d3b5a | 327 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 328 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM3, ENABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 329 | //PCLK_Timer3= CCLK/4 |
| Michael J. Spencer |
2:1df0b61d3b5a | 330 | CLKPWR_SetPCLKDiv (CLKPWR_PCLKSEL_TIMER3, CLKPWR_PCLKSEL_CCLK_DIV_4); |
| Michael J. Spencer |
2:1df0b61d3b5a | 331 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 332 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 333 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 334 | TIMx->CCR &= ~TIM_CTCR_MODE_MASK; |
| Michael J. Spencer |
2:1df0b61d3b5a | 335 | TIMx->CCR |= TIM_TIMER_MODE; |
| Michael J. Spencer |
2:1df0b61d3b5a | 336 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 337 | TIMx->TC =0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 338 | TIMx->PC =0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 339 | TIMx->PR =0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 340 | TIMx->TCR |= (1<<1); //Reset Counter |
| Michael J. Spencer |
2:1df0b61d3b5a | 341 | TIMx->TCR &= ~(1<<1); //release reset |
| Michael J. Spencer |
2:1df0b61d3b5a | 342 | if (TimerCounterMode == TIM_TIMER_MODE ) |
| Michael J. Spencer |
2:1df0b61d3b5a | 343 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 344 | pTimeCfg = (TIM_TIMERCFG_Type *)TIM_ConfigStruct; |
| Michael J. Spencer |
2:1df0b61d3b5a | 345 | if (pTimeCfg->PrescaleOption == TIM_PRESCALE_TICKVAL) |
| Michael J. Spencer |
2:1df0b61d3b5a | 346 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 347 | TIMx->PR = pTimeCfg->PrescaleValue -1 ; |
| Michael J. Spencer |
2:1df0b61d3b5a | 348 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 349 | else |
| Michael J. Spencer |
2:1df0b61d3b5a | 350 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 351 | TIMx->PR = converUSecToVal (converPtrToTimeNum(TIMx),pTimeCfg->PrescaleValue)-1; |
| Michael J. Spencer |
2:1df0b61d3b5a | 352 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 353 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 354 | else |
| Michael J. Spencer |
2:1df0b61d3b5a | 355 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 356 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 357 | pCounterCfg = (TIM_COUNTERCFG_Type *)TIM_ConfigStruct; |
| Michael J. Spencer |
2:1df0b61d3b5a | 358 | TIMx->CCR &= ~TIM_CTCR_INPUT_MASK; |
| Michael J. Spencer |
2:1df0b61d3b5a | 359 | if (pCounterCfg->CountInputSelect == TIM_COUNTER_INCAP1) |
| Michael J. Spencer |
2:1df0b61d3b5a | 360 | TIMx->CCR |= _BIT(2); |
| Michael J. Spencer |
2:1df0b61d3b5a | 361 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 362 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 363 | // Clear interrupt pending |
| Michael J. Spencer |
2:1df0b61d3b5a | 364 | TIMx->IR = 0xFFFFFFFF; |
| Michael J. Spencer |
2:1df0b61d3b5a | 365 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 366 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 367 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 368 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 369 | * @brief Close Timer/Counter device |
| Michael J. Spencer |
2:1df0b61d3b5a | 370 | * @param[in] TIMx Pointer to timer device, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 371 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 372 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 373 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 374 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 375 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 376 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 377 | void TIM_DeInit (LPC_TIM_TypeDef *TIMx) |
| Michael J. Spencer |
2:1df0b61d3b5a | 378 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 379 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 380 | // Disable timer/counter |
| Michael J. Spencer |
2:1df0b61d3b5a | 381 | TIMx->TCR = 0x00; |
| Michael J. Spencer |
2:1df0b61d3b5a | 382 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 383 | // Disable power |
| Michael J. Spencer |
2:1df0b61d3b5a | 384 | if (TIMx== LPC_TIM0) |
| Michael J. Spencer |
2:1df0b61d3b5a | 385 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM0, DISABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 386 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 387 | else if (TIMx== LPC_TIM1) |
| Michael J. Spencer |
2:1df0b61d3b5a | 388 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM1, DISABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 389 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 390 | else if (TIMx== LPC_TIM2) |
| Michael J. Spencer |
2:1df0b61d3b5a | 391 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM2, DISABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 392 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 393 | else if (TIMx== LPC_TIM3) |
| Michael J. Spencer |
2:1df0b61d3b5a | 394 | CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCTIM2, DISABLE); |
| Michael J. Spencer |
2:1df0b61d3b5a | 395 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 396 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 397 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 398 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 399 | * @brief Start/Stop Timer/Counter device |
| Michael J. Spencer |
2:1df0b61d3b5a | 400 | * @param[in] TIMx Pointer to timer device, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 401 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 402 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 403 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 404 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 405 | * @param[in] NewState |
| Michael J. Spencer |
2:1df0b61d3b5a | 406 | * - ENABLE : set timer enable |
| Michael J. Spencer |
2:1df0b61d3b5a | 407 | * - DISABLE : disable timer |
| Michael J. Spencer |
2:1df0b61d3b5a | 408 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 409 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 410 | void TIM_Cmd(LPC_TIM_TypeDef *TIMx, FunctionalState NewState) |
| Michael J. Spencer |
2:1df0b61d3b5a | 411 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 412 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 413 | if (NewState == ENABLE) |
| Michael J. Spencer |
2:1df0b61d3b5a | 414 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 415 | TIMx->TCR |= TIM_ENABLE; |
| Michael J. Spencer |
2:1df0b61d3b5a | 416 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 417 | else |
| Michael J. Spencer |
2:1df0b61d3b5a | 418 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 419 | TIMx->TCR &= ~TIM_ENABLE; |
| Michael J. Spencer |
2:1df0b61d3b5a | 420 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 421 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 422 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 423 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 424 | * @brief Reset Timer/Counter device, |
| Michael J. Spencer |
2:1df0b61d3b5a | 425 | * Make TC and PC are synchronously reset on the next |
| Michael J. Spencer |
2:1df0b61d3b5a | 426 | * positive edge of PCLK |
| Michael J. Spencer |
2:1df0b61d3b5a | 427 | * @param[in] TIMx Pointer to timer device, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 428 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 429 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 430 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 431 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 432 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 433 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 434 | void TIM_ResetCounter(LPC_TIM_TypeDef *TIMx) |
| Michael J. Spencer |
2:1df0b61d3b5a | 435 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 436 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 437 | TIMx->TCR |= TIM_RESET; |
| Michael J. Spencer |
2:1df0b61d3b5a | 438 | TIMx->TCR &= ~TIM_RESET; |
| Michael J. Spencer |
2:1df0b61d3b5a | 439 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 440 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 441 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 442 | * @brief Configuration for Match register |
| Michael J. Spencer |
2:1df0b61d3b5a | 443 | * @param[in] TIMx Pointer to timer device, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 444 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 445 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 446 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 447 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 448 | * @param[in] TIM_MatchConfigStruct Pointer to TIM_MATCHCFG_Type |
| Michael J. Spencer |
2:1df0b61d3b5a | 449 | * - MatchChannel : choose channel 0 or 1 |
| Michael J. Spencer |
2:1df0b61d3b5a | 450 | * - IntOnMatch : if SET, interrupt will be generated when MRxx match |
| Michael J. Spencer |
2:1df0b61d3b5a | 451 | * the value in TC |
| Michael J. Spencer |
2:1df0b61d3b5a | 452 | * - StopOnMatch : if SET, TC and PC will be stopped whenM Rxx match |
| Michael J. Spencer |
2:1df0b61d3b5a | 453 | * the value in TC |
| Michael J. Spencer |
2:1df0b61d3b5a | 454 | * - ResetOnMatch : if SET, Reset on MR0 when MRxx match |
| Michael J. Spencer |
2:1df0b61d3b5a | 455 | * the value in TC |
| Michael J. Spencer |
2:1df0b61d3b5a | 456 | * -ExtMatchOutputType: Select output for external match |
| Michael J. Spencer |
2:1df0b61d3b5a | 457 | * + 0: Do nothing for external output pin if match |
| Michael J. Spencer |
2:1df0b61d3b5a | 458 | * + 1: Force external output pin to low if match |
| Michael J. Spencer |
2:1df0b61d3b5a | 459 | * + 2: Force external output pin to high if match |
| Michael J. Spencer |
2:1df0b61d3b5a | 460 | * + 3: Toggle external output pin if match |
| Michael J. Spencer |
2:1df0b61d3b5a | 461 | * MatchValue: Set the value to be compared with TC value |
| Michael J. Spencer |
2:1df0b61d3b5a | 462 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 463 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 464 | void TIM_ConfigMatch(LPC_TIM_TypeDef *TIMx, TIM_MATCHCFG_Type *TIM_MatchConfigStruct) |
| Michael J. Spencer |
2:1df0b61d3b5a | 465 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 466 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 467 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 468 | CHECK_PARAM(PARAM_TIM_EXTMATCH_OPT(TIM_MatchConfigStruct->ExtMatchOutputType)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 469 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 470 | switch(TIM_MatchConfigStruct->MatchChannel) |
| Michael J. Spencer |
2:1df0b61d3b5a | 471 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 472 | case 0: |
| Michael J. Spencer |
2:1df0b61d3b5a | 473 | TIMx->MR0 = TIM_MatchConfigStruct->MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 474 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 475 | case 1: |
| Michael J. Spencer |
2:1df0b61d3b5a | 476 | TIMx->MR1 = TIM_MatchConfigStruct->MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 477 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 478 | case 2: |
| Michael J. Spencer |
2:1df0b61d3b5a | 479 | TIMx->MR2 = TIM_MatchConfigStruct->MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 480 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 481 | case 3: |
| Michael J. Spencer |
2:1df0b61d3b5a | 482 | TIMx->MR3 = TIM_MatchConfigStruct->MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 483 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 484 | default: |
| Michael J. Spencer |
2:1df0b61d3b5a | 485 | //Error match value |
| Michael J. Spencer |
2:1df0b61d3b5a | 486 | //Error loop |
| Michael J. Spencer |
2:1df0b61d3b5a | 487 | while(1); |
| Michael J. Spencer |
2:1df0b61d3b5a | 488 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 489 | //interrupt on MRn |
| Michael J. Spencer |
2:1df0b61d3b5a | 490 | TIMx->MCR &=~TIM_MCR_CHANNEL_MASKBIT(TIM_MatchConfigStruct->MatchChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 491 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 492 | if (TIM_MatchConfigStruct->IntOnMatch) |
| Michael J. Spencer |
2:1df0b61d3b5a | 493 | TIMx->MCR |= TIM_INT_ON_MATCH(TIM_MatchConfigStruct->MatchChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 494 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 495 | //reset on MRn |
| Michael J. Spencer |
2:1df0b61d3b5a | 496 | if (TIM_MatchConfigStruct->ResetOnMatch) |
| Michael J. Spencer |
2:1df0b61d3b5a | 497 | TIMx->MCR |= TIM_RESET_ON_MATCH(TIM_MatchConfigStruct->MatchChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 498 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 499 | //stop on MRn |
| Michael J. Spencer |
2:1df0b61d3b5a | 500 | if (TIM_MatchConfigStruct->StopOnMatch) |
| Michael J. Spencer |
2:1df0b61d3b5a | 501 | TIMx->MCR |= TIM_STOP_ON_MATCH(TIM_MatchConfigStruct->MatchChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 502 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 503 | // match output type |
| Michael J. Spencer |
2:1df0b61d3b5a | 504 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 505 | TIMx->EMR &= ~TIM_EM_MASK(TIM_MatchConfigStruct->MatchChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 506 | TIMx->EMR |= TIM_EM_SET(TIM_MatchConfigStruct->MatchChannel,TIM_MatchConfigStruct->ExtMatchOutputType); |
| Michael J. Spencer |
2:1df0b61d3b5a | 507 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 508 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 509 | * @brief Update Match value |
| Michael J. Spencer |
2:1df0b61d3b5a | 510 | * @param[in] TIMx Pointer to timer device, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 511 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 512 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 513 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 514 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 515 | * @param[in] MatchChannel Match channel, should be: 0..3 |
| Michael J. Spencer |
2:1df0b61d3b5a | 516 | * @param[in] MatchValue updated match value |
| Michael J. Spencer |
2:1df0b61d3b5a | 517 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 518 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 519 | void TIM_UpdateMatchValue(LPC_TIM_TypeDef *TIMx,uint8_t MatchChannel, uint32_t MatchValue) |
| Michael J. Spencer |
2:1df0b61d3b5a | 520 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 521 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 522 | switch(MatchChannel) |
| Michael J. Spencer |
2:1df0b61d3b5a | 523 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 524 | case 0: |
| Michael J. Spencer |
2:1df0b61d3b5a | 525 | TIMx->MR0 = MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 526 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 527 | case 1: |
| Michael J. Spencer |
2:1df0b61d3b5a | 528 | TIMx->MR1 = MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 529 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 530 | case 2: |
| Michael J. Spencer |
2:1df0b61d3b5a | 531 | TIMx->MR2 = MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 532 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 533 | case 3: |
| Michael J. Spencer |
2:1df0b61d3b5a | 534 | TIMx->MR3 = MatchValue; |
| Michael J. Spencer |
2:1df0b61d3b5a | 535 | break; |
| Michael J. Spencer |
2:1df0b61d3b5a | 536 | default: |
| Michael J. Spencer |
2:1df0b61d3b5a | 537 | //Error Loop |
| Michael J. Spencer |
2:1df0b61d3b5a | 538 | while(1); |
| Michael J. Spencer |
2:1df0b61d3b5a | 539 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 540 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 541 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 542 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 543 | * @brief Configuration for Capture register |
| Michael J. Spencer |
2:1df0b61d3b5a | 544 | * @param[in] TIMx Pointer to timer device, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 545 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 546 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 547 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 548 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 549 | * - CaptureChannel: set the channel to capture data |
| Michael J. Spencer |
2:1df0b61d3b5a | 550 | * - RisingEdge : if SET, Capture at rising edge |
| Michael J. Spencer |
2:1df0b61d3b5a | 551 | * - FallingEdge : if SET, Capture at falling edge |
| Michael J. Spencer |
2:1df0b61d3b5a | 552 | * - IntOnCaption : if SET, Capture generate interrupt |
| Michael J. Spencer |
2:1df0b61d3b5a | 553 | * @param[in] TIM_CaptureConfigStruct Pointer to TIM_CAPTURECFG_Type |
| Michael J. Spencer |
2:1df0b61d3b5a | 554 | * @return None |
| Michael J. Spencer |
2:1df0b61d3b5a | 555 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 556 | void TIM_ConfigCapture(LPC_TIM_TypeDef *TIMx, TIM_CAPTURECFG_Type *TIM_CaptureConfigStruct) |
| Michael J. Spencer |
2:1df0b61d3b5a | 557 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 558 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 559 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 560 | TIMx->CCR &= ~TIM_CCR_CHANNEL_MASKBIT(TIM_CaptureConfigStruct->CaptureChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 561 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 562 | if (TIM_CaptureConfigStruct->RisingEdge) |
| Michael J. Spencer |
2:1df0b61d3b5a | 563 | TIMx->CCR |= TIM_CAP_RISING(TIM_CaptureConfigStruct->CaptureChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 564 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 565 | if (TIM_CaptureConfigStruct->FallingEdge) |
| Michael J. Spencer |
2:1df0b61d3b5a | 566 | TIMx->CCR |= TIM_CAP_FALLING(TIM_CaptureConfigStruct->CaptureChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 567 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 568 | if (TIM_CaptureConfigStruct->IntOnCaption) |
| Michael J. Spencer |
2:1df0b61d3b5a | 569 | TIMx->CCR |= TIM_INT_ON_CAP(TIM_CaptureConfigStruct->CaptureChannel); |
| Michael J. Spencer |
2:1df0b61d3b5a | 570 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 571 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 572 | /*********************************************************************//** |
| Michael J. Spencer |
2:1df0b61d3b5a | 573 | * @brief Read value of capture register in timer/counter device |
| Michael J. Spencer |
2:1df0b61d3b5a | 574 | * @param[in] TIMx Pointer to timer/counter device, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 575 | * - LPC_TIM0: TIMER0 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 576 | * - LPC_TIM1: TIMER1 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 577 | * - LPC_TIM2: TIMER2 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 578 | * - LPC_TIM3: TIMER3 peripheral |
| Michael J. Spencer |
2:1df0b61d3b5a | 579 | * @param[in] CaptureChannel: capture channel number, should be: |
| Michael J. Spencer |
2:1df0b61d3b5a | 580 | * - TIM_COUNTER_INCAP0: CAPn.0 input pin for TIMERn |
| Michael J. Spencer |
2:1df0b61d3b5a | 581 | * - TIM_COUNTER_INCAP1: CAPn.1 input pin for TIMERn |
| Michael J. Spencer |
2:1df0b61d3b5a | 582 | * @return Value of capture register |
| Michael J. Spencer |
2:1df0b61d3b5a | 583 | **********************************************************************/ |
| Michael J. Spencer |
2:1df0b61d3b5a | 584 | uint32_t TIM_GetCaptureValue(LPC_TIM_TypeDef *TIMx, TIM_COUNTER_INPUT_OPT CaptureChannel) |
| Michael J. Spencer |
2:1df0b61d3b5a | 585 | { |
| Michael J. Spencer |
2:1df0b61d3b5a | 586 | CHECK_PARAM(PARAM_TIMx(TIMx)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 587 | CHECK_PARAM(PARAM_TIM_COUNTER_INPUT_OPT(CaptureChannel)); |
| Michael J. Spencer |
2:1df0b61d3b5a | 588 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 589 | if(CaptureChannel==0) |
| Michael J. Spencer |
2:1df0b61d3b5a | 590 | return TIMx->CR0; |
| Michael J. Spencer |
2:1df0b61d3b5a | 591 | else |
| Michael J. Spencer |
2:1df0b61d3b5a | 592 | return TIMx->CR1; |
| Michael J. Spencer |
2:1df0b61d3b5a | 593 | } |
| Michael J. Spencer |
2:1df0b61d3b5a | 594 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 595 | /** |
| Michael J. Spencer |
2:1df0b61d3b5a | 596 | * @} |
| Michael J. Spencer |
2:1df0b61d3b5a | 597 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 598 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 599 | #endif /* _TIMER */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 600 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 601 | /** |
| Michael J. Spencer |
2:1df0b61d3b5a | 602 | * @} |
| Michael J. Spencer |
2:1df0b61d3b5a | 603 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 604 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 605 | /* --------------------------------- End Of File ------------------------------ */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 606 | #endif /* __LPC17XX__ */ |
