added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /* mbed Microcontroller Library
<> 144:ef7eb2e8f9f7 2 * Copyright (c) 2016 ARM Limited
<> 144:ef7eb2e8f9f7 3 *
<> 144:ef7eb2e8f9f7 4 * Licensed under the Apache License, Version 2.0 (the "License");
<> 144:ef7eb2e8f9f7 5 * you may not use this file except in compliance with the License.
<> 144:ef7eb2e8f9f7 6 * You may obtain a copy of the License at
<> 144:ef7eb2e8f9f7 7 *
<> 144:ef7eb2e8f9f7 8 * http://www.apache.org/licenses/LICENSE-2.0
<> 144:ef7eb2e8f9f7 9 *
<> 144:ef7eb2e8f9f7 10 * Unless required by applicable law or agreed to in writing, software
<> 144:ef7eb2e8f9f7 11 * distributed under the License is distributed on an "AS IS" BASIS,
<> 144:ef7eb2e8f9f7 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
<> 144:ef7eb2e8f9f7 13 * See the License for the specific language governing permissions and
<> 144:ef7eb2e8f9f7 14 * limitations under the License.
<> 144:ef7eb2e8f9f7 15 */
<> 144:ef7eb2e8f9f7 16 #include "cmsis.h"
<> 144:ef7eb2e8f9f7 17 #include "apb_dualtimer.h"
<> 144:ef7eb2e8f9f7 18
<> 144:ef7eb2e8f9f7 19 /* DualTimer Private Data */
<> 144:ef7eb2e8f9f7 20 typedef struct {
<> 144:ef7eb2e8f9f7 21 /* DualTimer 1 Definition */
<> 144:ef7eb2e8f9f7 22 CMSDK_DUALTIMER_SINGLE_TypeDef *dualtimer1;
<> 144:ef7eb2e8f9f7 23 /* DualTimer 2 Definition */
<> 144:ef7eb2e8f9f7 24 CMSDK_DUALTIMER_SINGLE_TypeDef *dualtimer2;
<> 144:ef7eb2e8f9f7 25 /* Dual Timer IRQn */
<> 144:ef7eb2e8f9f7 26 uint32_t dualtimerIRQn;
<> 144:ef7eb2e8f9f7 27 /* DualTimer 1 Reload Value */
<> 144:ef7eb2e8f9f7 28 uint32_t dualtimer1Reload;
<> 144:ef7eb2e8f9f7 29 /* DualTimer 2 Reload Value */
<> 144:ef7eb2e8f9f7 30 uint32_t dualtimer2Reload;
<> 144:ef7eb2e8f9f7 31 /* Timer state */
<> 144:ef7eb2e8f9f7 32 uint32_t state;
<> 144:ef7eb2e8f9f7 33 } apb_dualtimer_t;
<> 144:ef7eb2e8f9f7 34
<> 144:ef7eb2e8f9f7 35 /* Timer state definitions */
<> 144:ef7eb2e8f9f7 36 #define DUALTIMER_INITIALIZED (1)
<> 144:ef7eb2e8f9f7 37 #define DUALTIMER_ENABLED (1 << 1)
<> 144:ef7eb2e8f9f7 38
<> 144:ef7eb2e8f9f7 39 /*
<> 144:ef7eb2e8f9f7 40 * This Timer is written for MBED OS and keeps count
<> 144:ef7eb2e8f9f7 41 * of the ticks. All the elaboration logic is demanded
<> 144:ef7eb2e8f9f7 42 * to the upper layers.
<> 144:ef7eb2e8f9f7 43 */
<> 144:ef7eb2e8f9f7 44 #define DUALTIMER_MAX_VALUE 0xFFFFFFFF
<> 144:ef7eb2e8f9f7 45 #define DUALTIMER_TICKS_US (SystemCoreClock/1000000)
<> 144:ef7eb2e8f9f7 46
<> 144:ef7eb2e8f9f7 47 /* Dual Timers Array */
<> 144:ef7eb2e8f9f7 48 static apb_dualtimer_t DualTimers[NUM_DUALTIMERS];
<> 144:ef7eb2e8f9f7 49
<> 144:ef7eb2e8f9f7 50 /*
<> 144:ef7eb2e8f9f7 51 * DualTimer_Initialize(): Initializes a hardware timer
<> 144:ef7eb2e8f9f7 52 * timer: timer to be Initialized
<> 144:ef7eb2e8f9f7 53 * time_us: timer reload value in us - 0 to reload to timer max value
<> 144:ef7eb2e8f9f7 54 * time_us = ticks_value / TIMER_TICK_US
<> 144:ef7eb2e8f9f7 55 */
<> 144:ef7eb2e8f9f7 56 void DualTimer_Initialize(uint32_t timer, uint32_t time_us)
<> 144:ef7eb2e8f9f7 57 {
<> 144:ef7eb2e8f9f7 58 uint32_t reload = 0;
<> 144:ef7eb2e8f9f7 59
<> 144:ef7eb2e8f9f7 60 if (timer < NUM_DUALTIMERS)
<> 144:ef7eb2e8f9f7 61 {
<> 144:ef7eb2e8f9f7 62 if (time_us == 0)
<> 144:ef7eb2e8f9f7 63 reload = DUALTIMER_MAX_VALUE;
<> 144:ef7eb2e8f9f7 64 else
<> 144:ef7eb2e8f9f7 65 reload = (time_us) * DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 66
<> 144:ef7eb2e8f9f7 67 switch(timer) {
<> 144:ef7eb2e8f9f7 68 case 0: DualTimers[timer].dualtimer1 = CMSDK_DUALTIMER1;
<> 144:ef7eb2e8f9f7 69 DualTimers[timer].dualtimer2 = CMSDK_DUALTIMER2;
<> 144:ef7eb2e8f9f7 70 DualTimers[timer].dualtimerIRQn = DUALTIMER_IRQn;
<> 144:ef7eb2e8f9f7 71 DualTimers[timer].dualtimer1Reload = reload;
<> 144:ef7eb2e8f9f7 72 DualTimers[timer].dualtimer2Reload = reload;
<> 144:ef7eb2e8f9f7 73 DualTimers[timer].state = DUALTIMER_INITIALIZED;
<> 144:ef7eb2e8f9f7 74 default: break;
<> 144:ef7eb2e8f9f7 75 }
<> 144:ef7eb2e8f9f7 76 }
<> 144:ef7eb2e8f9f7 77 }
<> 144:ef7eb2e8f9f7 78
<> 144:ef7eb2e8f9f7 79 /*
<> 144:ef7eb2e8f9f7 80 * DualTimer_ReturnMode(): returns the correct mode for Dual Timer Control
<> 144:ef7eb2e8f9f7 81 * mode: mode set by user
<> 144:ef7eb2e8f9f7 82 * @return: mode for TimeControl register
<> 144:ef7eb2e8f9f7 83 */
<> 144:ef7eb2e8f9f7 84 uint32_t DualTimer_ReturnMode(timerenable_t mode)
<> 144:ef7eb2e8f9f7 85 {
<> 144:ef7eb2e8f9f7 86 uint32_t return_mode = 0;
<> 144:ef7eb2e8f9f7 87 /* Check Interrupt Enable */
<> 144:ef7eb2e8f9f7 88 if (((mode & DUALTIMER_INT) >> DUALTIMER_INT_MASK) == 1)
<> 144:ef7eb2e8f9f7 89 return_mode |= CMSDK_DUALTIMER_CTRL_INTEN_Msk;
<> 144:ef7eb2e8f9f7 90 /* Check 32 bit Counter */
<> 144:ef7eb2e8f9f7 91 if (((mode & DUALTIMER_COUNT_32) >> DUALTIMER_COUNT_32_MASK) == 1)
<> 144:ef7eb2e8f9f7 92 return_mode |= CMSDK_DUALTIMER_CTRL_SIZE_Msk;
<> 144:ef7eb2e8f9f7 93 /* Check Periodic Mode */
<> 144:ef7eb2e8f9f7 94 if (((mode & DUALTIMER_PERIODIC) >> DUALTIMER_PERIODIC_MASK) == 1)
<> 144:ef7eb2e8f9f7 95 return_mode |= CMSDK_DUALTIMER_CTRL_MODE_Msk;
<> 144:ef7eb2e8f9f7 96 /* Check OneShot Mode */
<> 144:ef7eb2e8f9f7 97 if (((mode & DUALTIMER_ONESHOT) >> DUALTIMER_ONESHOT_MASK) == 1)
<> 144:ef7eb2e8f9f7 98 return_mode |= CMSDK_DUALTIMER_CTRL_ONESHOOT_Msk;
<> 144:ef7eb2e8f9f7 99
<> 144:ef7eb2e8f9f7 100 return return_mode;
<> 144:ef7eb2e8f9f7 101 }
<> 144:ef7eb2e8f9f7 102
<> 144:ef7eb2e8f9f7 103 /*
<> 144:ef7eb2e8f9f7 104 * DualTimer_Enable(): Enables a hardware timer
<> 144:ef7eb2e8f9f7 105 * timer: timer to be enabled
<> 144:ef7eb2e8f9f7 106 * mode: enable mode
<> 144:ef7eb2e8f9f7 107 */
<> 144:ef7eb2e8f9f7 108 void DualTimer_Enable(uint32_t timer, timerenable_t mode)
<> 144:ef7eb2e8f9f7 109 {
<> 144:ef7eb2e8f9f7 110 uint32_t dualtimerControl = 0;
<> 144:ef7eb2e8f9f7 111 /* The timer has to be contained in a valid range */
<> 144:ef7eb2e8f9f7 112 if (timer < NUM_DUALTIMERS) {
<> 144:ef7eb2e8f9f7 113 /* Timer has to be already initialized */
<> 144:ef7eb2e8f9f7 114 if (DualTimers[timer].state == DUALTIMER_INITIALIZED) {
<> 144:ef7eb2e8f9f7 115 /* Disable Timer */
<> 144:ef7eb2e8f9f7 116 (DualTimers[timer].dualtimer1)->TimerControl = 0x0;
<> 144:ef7eb2e8f9f7 117 (DualTimers[timer].dualtimer2)->TimerControl = 0x0;
<> 144:ef7eb2e8f9f7 118 /* Reload Value */
<> 144:ef7eb2e8f9f7 119 (DualTimers[timer].dualtimer1)->TimerLoad =
<> 144:ef7eb2e8f9f7 120 DualTimers[timer].dualtimer1Reload;
<> 144:ef7eb2e8f9f7 121 (DualTimers[timer].dualtimer2)->TimerLoad =
<> 144:ef7eb2e8f9f7 122 DualTimers[timer].dualtimer2Reload;
<> 144:ef7eb2e8f9f7 123 /* Set up Dual Timer Control */
<> 144:ef7eb2e8f9f7 124 dualtimerControl = DualTimer_ReturnMode(mode);
<> 144:ef7eb2e8f9f7 125 (DualTimers[timer].dualtimer1)->TimerControl = dualtimerControl;
<> 144:ef7eb2e8f9f7 126 (DualTimers[timer].dualtimer2)->TimerControl = dualtimerControl;
<> 144:ef7eb2e8f9f7 127 /* Enable Counter */
<> 144:ef7eb2e8f9f7 128 (DualTimers[timer].dualtimer1)->TimerControl |=
<> 144:ef7eb2e8f9f7 129 CMSDK_DUALTIMER_CTRL_EN_Msk;
<> 144:ef7eb2e8f9f7 130 (DualTimers[timer].dualtimer2)->TimerControl |=
<> 144:ef7eb2e8f9f7 131 CMSDK_DUALTIMER_CTRL_EN_Msk;
<> 144:ef7eb2e8f9f7 132 /* Change timer state */
<> 144:ef7eb2e8f9f7 133 DualTimers[timer].state |= DUALTIMER_ENABLED;
<> 144:ef7eb2e8f9f7 134 }
<> 144:ef7eb2e8f9f7 135 }
<> 144:ef7eb2e8f9f7 136 }
<> 144:ef7eb2e8f9f7 137
<> 144:ef7eb2e8f9f7 138 /*
<> 144:ef7eb2e8f9f7 139 * DualTimer_Disable(): Disables a hardware timer
<> 144:ef7eb2e8f9f7 140 * timer: timer to be disabled
<> 144:ef7eb2e8f9f7 141 * dis_timer: 0 both - 1 dual timer 1 - 2 dual timer 2
<> 144:ef7eb2e8f9f7 142 */
<> 144:ef7eb2e8f9f7 143 void DualTimer_Disable(uint32_t timer, uint32_t dis_timer)
<> 144:ef7eb2e8f9f7 144 {
<> 144:ef7eb2e8f9f7 145 /* The timer has to be contained in a valid range */
<> 144:ef7eb2e8f9f7 146 if (timer < NUM_DUALTIMERS) {
<> 144:ef7eb2e8f9f7 147 /* Timer has to be already initialized and enabled */
<> 144:ef7eb2e8f9f7 148 if (DualTimers[timer].state == (DUALTIMER_INITIALIZED | DUALTIMER_ENABLED)) {
<> 144:ef7eb2e8f9f7 149 /* Disable Timer */
<> 144:ef7eb2e8f9f7 150 switch (dis_timer)
<> 144:ef7eb2e8f9f7 151 {
<> 144:ef7eb2e8f9f7 152 case 0: (DualTimers[timer].dualtimer1)->TimerControl = 0x0;
<> 144:ef7eb2e8f9f7 153 (DualTimers[timer].dualtimer2)->TimerControl = 0x0;
<> 144:ef7eb2e8f9f7 154 break;
<> 144:ef7eb2e8f9f7 155 case 1: (DualTimers[timer].dualtimer1)->TimerControl = 0x0;
<> 144:ef7eb2e8f9f7 156 break;
<> 144:ef7eb2e8f9f7 157 case 2: (DualTimers[timer].dualtimer2)->TimerControl = 0x0;
<> 144:ef7eb2e8f9f7 158 break;
<> 144:ef7eb2e8f9f7 159 default: break;
<> 144:ef7eb2e8f9f7 160 }
<> 144:ef7eb2e8f9f7 161 /* Change timer state */
<> 144:ef7eb2e8f9f7 162 DualTimers[timer].state = DUALTIMER_INITIALIZED;
<> 144:ef7eb2e8f9f7 163 }
<> 144:ef7eb2e8f9f7 164 }
<> 144:ef7eb2e8f9f7 165 }
<> 144:ef7eb2e8f9f7 166
<> 144:ef7eb2e8f9f7 167 /*
<> 144:ef7eb2e8f9f7 168 * DualTimer_isEnabled(): verifies if a timer is enabled
<> 144:ef7eb2e8f9f7 169 * timer: timer to be verified
<> 144:ef7eb2e8f9f7 170 * @return: 0 disabled - 1 enabled
<> 144:ef7eb2e8f9f7 171 */
<> 144:ef7eb2e8f9f7 172 uint32_t DualTimer_isEnabled(uint32_t timer)
<> 144:ef7eb2e8f9f7 173 {
<> 144:ef7eb2e8f9f7 174 /* The timer has to be contained in a valid range */
<> 144:ef7eb2e8f9f7 175 if (timer < NUM_DUALTIMERS) {
<> 144:ef7eb2e8f9f7 176 /* Timer has to be already initialized and enabled */
<> 144:ef7eb2e8f9f7 177 if (DualTimers[timer].state == (DUALTIMER_INITIALIZED | DUALTIMER_ENABLED))
<> 144:ef7eb2e8f9f7 178 return 1;
<> 144:ef7eb2e8f9f7 179 } else {
<> 144:ef7eb2e8f9f7 180 return 0;
<> 144:ef7eb2e8f9f7 181 }
<> 144:ef7eb2e8f9f7 182 return 0;
<> 144:ef7eb2e8f9f7 183 }
<> 144:ef7eb2e8f9f7 184
<> 144:ef7eb2e8f9f7 185 /*
<> 144:ef7eb2e8f9f7 186 * DualTimer_Read_1(): provides single timer 1 VALUE
<> 144:ef7eb2e8f9f7 187 * timer: timer to be read
<> 144:ef7eb2e8f9f7 188 * @return: timer VALUE
<> 144:ef7eb2e8f9f7 189 */
<> 144:ef7eb2e8f9f7 190 uint32_t DualTimer_Read_1(uint32_t timer)
<> 144:ef7eb2e8f9f7 191 {
<> 144:ef7eb2e8f9f7 192 uint32_t return_value = 0;
<> 144:ef7eb2e8f9f7 193 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 194 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 195 return_value = (DualTimers[timer].dualtimer1Reload
<> 144:ef7eb2e8f9f7 196 - (DualTimers[timer].dualtimer1)->TimerValue)
<> 144:ef7eb2e8f9f7 197 / DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 198 }
<> 144:ef7eb2e8f9f7 199
<> 144:ef7eb2e8f9f7 200 return return_value;
<> 144:ef7eb2e8f9f7 201 }
<> 144:ef7eb2e8f9f7 202
<> 144:ef7eb2e8f9f7 203 /*
<> 144:ef7eb2e8f9f7 204 * DualTimer_Read_2(): provides single timer 2 VALUE
<> 144:ef7eb2e8f9f7 205 * timer: timer to be read
<> 144:ef7eb2e8f9f7 206 * @return: timer VALUE
<> 144:ef7eb2e8f9f7 207 */
<> 144:ef7eb2e8f9f7 208 uint32_t DualTimer_Read_2(uint32_t timer)
<> 144:ef7eb2e8f9f7 209 {
<> 144:ef7eb2e8f9f7 210 uint32_t return_value = 0;
<> 144:ef7eb2e8f9f7 211 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 212 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 213 return_value = (DualTimers[timer].dualtimer2Reload
<> 144:ef7eb2e8f9f7 214 - (DualTimers[timer].dualtimer2)->TimerValue)
<> 144:ef7eb2e8f9f7 215 / DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 216 }
<> 144:ef7eb2e8f9f7 217
<> 144:ef7eb2e8f9f7 218 return return_value;
<> 144:ef7eb2e8f9f7 219 }
<> 144:ef7eb2e8f9f7 220
<> 144:ef7eb2e8f9f7 221 /*
<> 144:ef7eb2e8f9f7 222 * DualTimer_SetInterrupt_1(): sets timer 1 Interrupt
<> 144:ef7eb2e8f9f7 223 * timer: timer on which interrupt is set
<> 144:ef7eb2e8f9f7 224 * time_us: reloading value us
<> 144:ef7eb2e8f9f7 225 * mode: enable mode
<> 144:ef7eb2e8f9f7 226 */
<> 144:ef7eb2e8f9f7 227 void DualTimer_SetInterrupt_1(uint32_t timer, uint32_t time_us,
<> 144:ef7eb2e8f9f7 228 timerenable_t mode)
<> 144:ef7eb2e8f9f7 229 {
<> 144:ef7eb2e8f9f7 230 uint32_t dualtimerControl = 0;
<> 144:ef7eb2e8f9f7 231 uint32_t load_time_us = 0;
<> 144:ef7eb2e8f9f7 232 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 233 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 234 /* Disable Timer */
<> 144:ef7eb2e8f9f7 235 DualTimer_Disable(timer, SINGLETIMER1);
<> 144:ef7eb2e8f9f7 236 /* Set up Dual Timer Control */
<> 144:ef7eb2e8f9f7 237 dualtimerControl = DualTimer_ReturnMode(mode);
<> 144:ef7eb2e8f9f7 238 (DualTimers[timer].dualtimer1)->TimerControl =
<> 144:ef7eb2e8f9f7 239 CMSDK_DUALTIMER_CTRL_INTEN_Msk
<> 144:ef7eb2e8f9f7 240 | dualtimerControl;
<> 144:ef7eb2e8f9f7 241
<> 144:ef7eb2e8f9f7 242 /* Check time us condition */
<> 144:ef7eb2e8f9f7 243 if(time_us == DUALTIMER_DEFAULT_RELOAD)
<> 144:ef7eb2e8f9f7 244 load_time_us = DUALTIMER_MAX_VALUE;
<> 144:ef7eb2e8f9f7 245 else
<> 144:ef7eb2e8f9f7 246 load_time_us = time_us * DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 247
<> 144:ef7eb2e8f9f7 248 /* Reload Value */
<> 144:ef7eb2e8f9f7 249 DualTimers[timer].dualtimer1Reload = load_time_us;
<> 144:ef7eb2e8f9f7 250 (DualTimers[timer].dualtimer1)->TimerLoad =
<> 144:ef7eb2e8f9f7 251 DualTimers[timer].dualtimer1Reload;
<> 144:ef7eb2e8f9f7 252 /* Enable Counter */
<> 144:ef7eb2e8f9f7 253 (DualTimers[timer].dualtimer1)->TimerControl |=
<> 144:ef7eb2e8f9f7 254 CMSDK_DUALTIMER_CTRL_EN_Msk;
<> 144:ef7eb2e8f9f7 255 /* Change timer state */
<> 144:ef7eb2e8f9f7 256 DualTimers[timer].state |= DUALTIMER_ENABLED;
<> 144:ef7eb2e8f9f7 257 }
<> 144:ef7eb2e8f9f7 258 }
<> 144:ef7eb2e8f9f7 259
<> 144:ef7eb2e8f9f7 260 /*
<> 144:ef7eb2e8f9f7 261 * DualTimer_SetInterrupt_2(): sets timer 2 Interrupt
<> 144:ef7eb2e8f9f7 262 * timer: timer on which interrupt is set
<> 144:ef7eb2e8f9f7 263 * time_us: reloading value us
<> 144:ef7eb2e8f9f7 264 * mode: enable mode
<> 144:ef7eb2e8f9f7 265 */
<> 144:ef7eb2e8f9f7 266 void DualTimer_SetInterrupt_2(uint32_t timer, uint32_t time_us,
<> 144:ef7eb2e8f9f7 267 timerenable_t mode)
<> 144:ef7eb2e8f9f7 268 {
<> 144:ef7eb2e8f9f7 269 uint32_t dualtimerControl = 0;
<> 144:ef7eb2e8f9f7 270 uint32_t load_time_us = 0;
<> 144:ef7eb2e8f9f7 271 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 272 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 273 /* Disable Timer */
<> 144:ef7eb2e8f9f7 274 DualTimer_Disable(timer, SINGLETIMER2);
<> 144:ef7eb2e8f9f7 275 /* Set up Dual Timer Control */
<> 144:ef7eb2e8f9f7 276 dualtimerControl = DualTimer_ReturnMode(mode);
<> 144:ef7eb2e8f9f7 277 (DualTimers[timer].dualtimer2)->TimerControl =
<> 144:ef7eb2e8f9f7 278 CMSDK_DUALTIMER_CTRL_INTEN_Msk
<> 144:ef7eb2e8f9f7 279 | dualtimerControl;
<> 144:ef7eb2e8f9f7 280
<> 144:ef7eb2e8f9f7 281 /* Check time us condition */
<> 144:ef7eb2e8f9f7 282 if(time_us == DUALTIMER_DEFAULT_RELOAD)
<> 144:ef7eb2e8f9f7 283 load_time_us = DUALTIMER_MAX_VALUE;
<> 144:ef7eb2e8f9f7 284 else
<> 144:ef7eb2e8f9f7 285 load_time_us = time_us * DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 286
<> 144:ef7eb2e8f9f7 287 /* Reload Value */
<> 144:ef7eb2e8f9f7 288 DualTimers[timer].dualtimer2Reload = load_time_us;
<> 144:ef7eb2e8f9f7 289 (DualTimers[timer].dualtimer2)->TimerLoad =
<> 144:ef7eb2e8f9f7 290 DualTimers[timer].dualtimer2Reload;
<> 144:ef7eb2e8f9f7 291 /* Enable Counter */
<> 144:ef7eb2e8f9f7 292 (DualTimers[timer].dualtimer2)->TimerControl |=
<> 144:ef7eb2e8f9f7 293 CMSDK_DUALTIMER_CTRL_EN_Msk;
<> 144:ef7eb2e8f9f7 294 /* Change timer state */
<> 144:ef7eb2e8f9f7 295 DualTimers[timer].state |= DUALTIMER_ENABLED;
<> 144:ef7eb2e8f9f7 296 }
<> 144:ef7eb2e8f9f7 297 }
<> 144:ef7eb2e8f9f7 298
<> 144:ef7eb2e8f9f7 299 /*
<> 144:ef7eb2e8f9f7 300 * DualTimer_DisableInterrupt(): disables timer interrupt
<> 144:ef7eb2e8f9f7 301 * timer: timer on which interrupt is disabled
<> 144:ef7eb2e8f9f7 302 */
<> 144:ef7eb2e8f9f7 303 void DualTimer_DisableInterrupt(uint32_t timer)
<> 144:ef7eb2e8f9f7 304 {
<> 144:ef7eb2e8f9f7 305 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 306 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 307 /* Disable Interrupt */
<> 144:ef7eb2e8f9f7 308 (DualTimers[timer].dualtimer1)->TimerControl &=
<> 144:ef7eb2e8f9f7 309 CMSDK_DUALTIMER_CTRL_EN_Msk;
<> 144:ef7eb2e8f9f7 310 (DualTimers[timer].dualtimer2)->TimerControl &=
<> 144:ef7eb2e8f9f7 311 CMSDK_DUALTIMER_CTRL_EN_Msk;
<> 144:ef7eb2e8f9f7 312 }
<> 144:ef7eb2e8f9f7 313 }
<> 144:ef7eb2e8f9f7 314
<> 144:ef7eb2e8f9f7 315 /*
<> 144:ef7eb2e8f9f7 316 * DualTimer_ClearInterrupt(): clear timer interrupt
<> 144:ef7eb2e8f9f7 317 * timer: timer on which interrupt needs to be cleared
<> 144:ef7eb2e8f9f7 318 */
<> 144:ef7eb2e8f9f7 319 void DualTimer_ClearInterrupt(uint32_t timer)
<> 144:ef7eb2e8f9f7 320 {
<> 144:ef7eb2e8f9f7 321 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 322 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 323 /* Clear Interrupt */
<> 144:ef7eb2e8f9f7 324 (DualTimers[timer].dualtimer1)->TimerIntClr =
<> 144:ef7eb2e8f9f7 325 CMSDK_DUALTIMER_INTCLR_Msk;
<> 144:ef7eb2e8f9f7 326 (DualTimers[timer].dualtimer2)->TimerIntClr =
<> 144:ef7eb2e8f9f7 327 CMSDK_DUALTIMER_INTCLR_Msk;
<> 144:ef7eb2e8f9f7 328 }
<> 144:ef7eb2e8f9f7 329 }
<> 144:ef7eb2e8f9f7 330
<> 144:ef7eb2e8f9f7 331 /*
<> 144:ef7eb2e8f9f7 332 * DualTimer_GetIRQn(): returns IRQn of a DualTimer
<> 144:ef7eb2e8f9f7 333 * timer: timer on which IRQn is defined - 0 if it is not defined
<> 144:ef7eb2e8f9f7 334 */
<> 144:ef7eb2e8f9f7 335 uint32_t DualTimer_GetIRQn(uint32_t timer)
<> 144:ef7eb2e8f9f7 336 {
<> 144:ef7eb2e8f9f7 337 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 338 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 339 return DualTimers[timer].dualtimerIRQn;
<> 144:ef7eb2e8f9f7 340 }
<> 144:ef7eb2e8f9f7 341 return 0;
<> 144:ef7eb2e8f9f7 342 }
<> 144:ef7eb2e8f9f7 343
<> 144:ef7eb2e8f9f7 344 /*
<> 144:ef7eb2e8f9f7 345 * DualTimer_GetIRQInfo(): provides the single timer who caused
<> 144:ef7eb2e8f9f7 346 * the interrupt.
<> 144:ef7eb2e8f9f7 347 * dualtimer: dualtimer that triggered the IRQ
<> 144:ef7eb2e8f9f7 348 * @return: a single timer - 0 if it is not defined
<> 144:ef7eb2e8f9f7 349 */
<> 144:ef7eb2e8f9f7 350 uint32_t DualTimer_GetIRQInfo(uint32_t timer)
<> 144:ef7eb2e8f9f7 351 {
<> 144:ef7eb2e8f9f7 352 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 353 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 354 if((DualTimers[timer].dualtimer1)->TimerRIS)
<> 144:ef7eb2e8f9f7 355 return SINGLETIMER1;
<> 144:ef7eb2e8f9f7 356 else
<> 144:ef7eb2e8f9f7 357 return SINGLETIMER2;
<> 144:ef7eb2e8f9f7 358 }
<> 144:ef7eb2e8f9f7 359 return 0;
<> 144:ef7eb2e8f9f7 360 }
<> 144:ef7eb2e8f9f7 361
<> 144:ef7eb2e8f9f7 362 /*
<> 144:ef7eb2e8f9f7 363 * DualTimer_GetTicksUS(): returns the Ticks per us
<> 144:ef7eb2e8f9f7 364 * timer: timer associated with the Ticks per us
<> 144:ef7eb2e8f9f7 365 * @return: Ticks per us - 0 if the timer is disables
<> 144:ef7eb2e8f9f7 366 */
<> 144:ef7eb2e8f9f7 367 uint32_t DualTimer_GetTicksUS(uint32_t timer)
<> 144:ef7eb2e8f9f7 368 {
<> 144:ef7eb2e8f9f7 369 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 370 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 371 return DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 372 }
<> 144:ef7eb2e8f9f7 373 return 0;
<> 144:ef7eb2e8f9f7 374 }
<> 144:ef7eb2e8f9f7 375
<> 144:ef7eb2e8f9f7 376 /*
<> 144:ef7eb2e8f9f7 377 * DualTimer_GetReloadValue(): returns the load value of the selected
<> 144:ef7eb2e8f9f7 378 * singletimer.
<> 144:ef7eb2e8f9f7 379 * timer: timer associated with the Ticks per us
<> 144:ef7eb2e8f9f7 380 * singletimer: selected singletimer
<> 144:ef7eb2e8f9f7 381 * @return: reload value of the selected singletimer - 0 if timer is disabled
<> 144:ef7eb2e8f9f7 382 */
<> 144:ef7eb2e8f9f7 383 uint32_t DualTimer_GetReloadValue(uint32_t timer, uint32_t singletimer)
<> 144:ef7eb2e8f9f7 384 {
<> 144:ef7eb2e8f9f7 385 /* Verify if the Timer is enabled */
<> 144:ef7eb2e8f9f7 386 if (DualTimer_isEnabled(timer) == 1) {
<> 144:ef7eb2e8f9f7 387 if (singletimer == SINGLETIMER1)
<> 144:ef7eb2e8f9f7 388 return DualTimers[timer].dualtimer1Reload / DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 389 else
<> 144:ef7eb2e8f9f7 390 return DualTimers[timer].dualtimer2Reload / DUALTIMER_TICKS_US;
<> 144:ef7eb2e8f9f7 391 }
<> 144:ef7eb2e8f9f7 392 return 0;
<> 144:ef7eb2e8f9f7 393 }