added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
144:ef7eb2e8f9f7
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

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 }