The common folder libraries from keil LPC11Uxx code bundle
timer32.c@0:05d110ee258e, 2012-05-27 (annotated)
- Committer:
- alexan_e
- Date:
- Sun May 27 23:59:30 2012 +0000
- Revision:
- 0:05d110ee258e
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alexan_e | 0:05d110ee258e | 1 | /**************************************************************************** |
alexan_e | 0:05d110ee258e | 2 | * $Id:: timer32.c 9190 2012-02-16 20:59:45Z nxp41306 $ |
alexan_e | 0:05d110ee258e | 3 | * Project: NXP LPC11Uxx 32-bit timer example |
alexan_e | 0:05d110ee258e | 4 | * |
alexan_e | 0:05d110ee258e | 5 | * Description: |
alexan_e | 0:05d110ee258e | 6 | * This file contains 32-bit timer code example which include timer |
alexan_e | 0:05d110ee258e | 7 | * initialization, timer interrupt handler, and related APIs for |
alexan_e | 0:05d110ee258e | 8 | * timer setup. |
alexan_e | 0:05d110ee258e | 9 | * |
alexan_e | 0:05d110ee258e | 10 | **************************************************************************** |
alexan_e | 0:05d110ee258e | 11 | * Software that is described herein is for illustrative purposes only |
alexan_e | 0:05d110ee258e | 12 | * which provides customers with programming information regarding the |
alexan_e | 0:05d110ee258e | 13 | * products. This software is supplied "AS IS" without any warranties. |
alexan_e | 0:05d110ee258e | 14 | * NXP Semiconductors assumes no responsibility or liability for the |
alexan_e | 0:05d110ee258e | 15 | * use of the software, conveys no license or title under any patent, |
alexan_e | 0:05d110ee258e | 16 | * copyright, or mask work right to the product. NXP Semiconductors |
alexan_e | 0:05d110ee258e | 17 | * reserves the right to make changes in the software without |
alexan_e | 0:05d110ee258e | 18 | * notification. NXP Semiconductors also make no representation or |
alexan_e | 0:05d110ee258e | 19 | * warranty that such application will be suitable for the specified |
alexan_e | 0:05d110ee258e | 20 | * use without further testing or modification. |
alexan_e | 0:05d110ee258e | 21 | |
alexan_e | 0:05d110ee258e | 22 | * Permission to use, copy, modify, and distribute this software and its |
alexan_e | 0:05d110ee258e | 23 | * documentation is hereby granted, under NXP Semiconductors' |
alexan_e | 0:05d110ee258e | 24 | * relevant copyright in the software, without fee, provided that it |
alexan_e | 0:05d110ee258e | 25 | * is used in conjunction with NXP Semiconductors microcontrollers. This |
alexan_e | 0:05d110ee258e | 26 | * copyright, permission, and disclaimer notice must appear in all copies of |
alexan_e | 0:05d110ee258e | 27 | * this code. |
alexan_e | 0:05d110ee258e | 28 | |
alexan_e | 0:05d110ee258e | 29 | ****************************************************************************/ |
alexan_e | 0:05d110ee258e | 30 | |
alexan_e | 0:05d110ee258e | 31 | #include "LPC11Uxx.h" |
alexan_e | 0:05d110ee258e | 32 | #include "timer32.h" |
alexan_e | 0:05d110ee258e | 33 | #include "nmi.h" |
alexan_e | 0:05d110ee258e | 34 | |
alexan_e | 0:05d110ee258e | 35 | volatile uint32_t timer32_0_counter[4] = {0,0,0,0}; |
alexan_e | 0:05d110ee258e | 36 | volatile uint32_t timer32_1_counter[4] = {0,0,0,0}; |
alexan_e | 0:05d110ee258e | 37 | volatile uint32_t timer32_0_capture[4] = {0,0,0,0}; |
alexan_e | 0:05d110ee258e | 38 | volatile uint32_t timer32_1_capture[4] = {0,0,0,0}; |
alexan_e | 0:05d110ee258e | 39 | volatile uint32_t timer32_0_period = 0; |
alexan_e | 0:05d110ee258e | 40 | volatile uint32_t timer32_1_period = 0; |
alexan_e | 0:05d110ee258e | 41 | |
alexan_e | 0:05d110ee258e | 42 | /***************************************************************************** |
alexan_e | 0:05d110ee258e | 43 | ** Function name: delay32Ms |
alexan_e | 0:05d110ee258e | 44 | ** |
alexan_e | 0:05d110ee258e | 45 | ** Descriptions: Start the timer delay in milo seconds |
alexan_e | 0:05d110ee258e | 46 | ** until elapsed |
alexan_e | 0:05d110ee258e | 47 | ** |
alexan_e | 0:05d110ee258e | 48 | ** parameters: timer number, Delay value in milo second |
alexan_e | 0:05d110ee258e | 49 | ** |
alexan_e | 0:05d110ee258e | 50 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 51 | ** |
alexan_e | 0:05d110ee258e | 52 | *****************************************************************************/ |
alexan_e | 0:05d110ee258e | 53 | void delay32Ms(uint8_t timer_num, uint32_t delayInMs) |
alexan_e | 0:05d110ee258e | 54 | { |
alexan_e | 0:05d110ee258e | 55 | if (timer_num == 0) |
alexan_e | 0:05d110ee258e | 56 | { |
alexan_e | 0:05d110ee258e | 57 | /* setup timer #0 for delay */ |
alexan_e | 0:05d110ee258e | 58 | LPC_CT32B0->TCR = 0x02; /* reset timer */ |
alexan_e | 0:05d110ee258e | 59 | LPC_CT32B0->PR = 0x00; /* set prescaler to zero */ |
alexan_e | 0:05d110ee258e | 60 | LPC_CT32B0->MR0 = delayInMs * (SystemCoreClock / 1000); |
alexan_e | 0:05d110ee258e | 61 | LPC_CT32B0->IR = 0xff; /* reset all interrrupts */ |
alexan_e | 0:05d110ee258e | 62 | LPC_CT32B0->MCR = 0x04; /* stop timer on match */ |
alexan_e | 0:05d110ee258e | 63 | LPC_CT32B0->TCR = 0x01; /* start timer */ |
alexan_e | 0:05d110ee258e | 64 | |
alexan_e | 0:05d110ee258e | 65 | /* wait until delay time has elapsed */ |
alexan_e | 0:05d110ee258e | 66 | while (LPC_CT32B0->TCR & 0x01); |
alexan_e | 0:05d110ee258e | 67 | } |
alexan_e | 0:05d110ee258e | 68 | else if (timer_num == 1) |
alexan_e | 0:05d110ee258e | 69 | { |
alexan_e | 0:05d110ee258e | 70 | /* setup timer #1 for delay */ |
alexan_e | 0:05d110ee258e | 71 | LPC_CT32B1->TCR = 0x02; /* reset timer */ |
alexan_e | 0:05d110ee258e | 72 | LPC_CT32B1->PR = 0x00; /* set prescaler to zero */ |
alexan_e | 0:05d110ee258e | 73 | LPC_CT32B1->MR0 = delayInMs * (SystemCoreClock / 1000); |
alexan_e | 0:05d110ee258e | 74 | LPC_CT32B1->IR = 0xff; /* reset all interrrupts */ |
alexan_e | 0:05d110ee258e | 75 | LPC_CT32B1->MCR = 0x04; /* stop timer on match */ |
alexan_e | 0:05d110ee258e | 76 | LPC_CT32B1->TCR = 0x01; /* start timer */ |
alexan_e | 0:05d110ee258e | 77 | |
alexan_e | 0:05d110ee258e | 78 | /* wait until delay time has elapsed */ |
alexan_e | 0:05d110ee258e | 79 | while (LPC_CT32B1->TCR & 0x01); |
alexan_e | 0:05d110ee258e | 80 | } |
alexan_e | 0:05d110ee258e | 81 | return; |
alexan_e | 0:05d110ee258e | 82 | } |
alexan_e | 0:05d110ee258e | 83 | |
alexan_e | 0:05d110ee258e | 84 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 85 | ** Function name: TIMER32_0_IRQHandler |
alexan_e | 0:05d110ee258e | 86 | ** |
alexan_e | 0:05d110ee258e | 87 | ** Descriptions: Timer/CounterX and captureX interrupt handler |
alexan_e | 0:05d110ee258e | 88 | ** |
alexan_e | 0:05d110ee258e | 89 | ** parameters: None |
alexan_e | 0:05d110ee258e | 90 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 91 | ** |
alexan_e | 0:05d110ee258e | 92 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 93 | void TIMER32_0_IRQHandler(void) |
alexan_e | 0:05d110ee258e | 94 | { |
alexan_e | 0:05d110ee258e | 95 | if ( LPC_CT32B0->IR & (0x01<<0) ) |
alexan_e | 0:05d110ee258e | 96 | { |
alexan_e | 0:05d110ee258e | 97 | LPC_CT32B0->IR = 0x1<<0; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 98 | timer32_0_counter[0]++; |
alexan_e | 0:05d110ee258e | 99 | } |
alexan_e | 0:05d110ee258e | 100 | if ( LPC_CT32B0->IR & (0x01<<1) ) |
alexan_e | 0:05d110ee258e | 101 | { |
alexan_e | 0:05d110ee258e | 102 | LPC_CT32B0->IR = 0x1<<1; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 103 | timer32_0_counter[1]++; |
alexan_e | 0:05d110ee258e | 104 | } |
alexan_e | 0:05d110ee258e | 105 | if ( LPC_CT32B0->IR & (0x01<<2) ) |
alexan_e | 0:05d110ee258e | 106 | { |
alexan_e | 0:05d110ee258e | 107 | LPC_CT32B0->IR = 0x1<<2; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 108 | timer32_0_counter[2]++; |
alexan_e | 0:05d110ee258e | 109 | } |
alexan_e | 0:05d110ee258e | 110 | if ( LPC_CT32B0->IR & (0x01<<3) ) |
alexan_e | 0:05d110ee258e | 111 | { |
alexan_e | 0:05d110ee258e | 112 | LPC_CT32B0->IR = 0x1<<3; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 113 | timer32_0_counter[3]++; |
alexan_e | 0:05d110ee258e | 114 | } |
alexan_e | 0:05d110ee258e | 115 | if ( LPC_CT32B0->IR & (0x1<<4) ) |
alexan_e | 0:05d110ee258e | 116 | { |
alexan_e | 0:05d110ee258e | 117 | LPC_CT32B0->IR = 0x1<<4; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 118 | timer32_0_capture[0]++; |
alexan_e | 0:05d110ee258e | 119 | } |
alexan_e | 0:05d110ee258e | 120 | if ( LPC_CT32B0->IR & (0x1<<5) ) |
alexan_e | 0:05d110ee258e | 121 | { |
alexan_e | 0:05d110ee258e | 122 | LPC_CT32B0->IR = 0x1<<5; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 123 | timer32_0_capture[1]++; |
alexan_e | 0:05d110ee258e | 124 | } |
alexan_e | 0:05d110ee258e | 125 | if ( LPC_CT32B0->IR & (0x1<<6) ) |
alexan_e | 0:05d110ee258e | 126 | { |
alexan_e | 0:05d110ee258e | 127 | LPC_CT32B0->IR = 0x1<<6; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 128 | timer32_0_capture[2]++; |
alexan_e | 0:05d110ee258e | 129 | } |
alexan_e | 0:05d110ee258e | 130 | if ( LPC_CT32B0->IR & (0x1<<7) ) |
alexan_e | 0:05d110ee258e | 131 | { |
alexan_e | 0:05d110ee258e | 132 | LPC_CT32B0->IR = 0x1<<7; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 133 | timer32_0_capture[3]++; |
alexan_e | 0:05d110ee258e | 134 | } |
alexan_e | 0:05d110ee258e | 135 | return; |
alexan_e | 0:05d110ee258e | 136 | } |
alexan_e | 0:05d110ee258e | 137 | |
alexan_e | 0:05d110ee258e | 138 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 139 | ** Function name: TIMER32_1_IRQHandler |
alexan_e | 0:05d110ee258e | 140 | ** |
alexan_e | 0:05d110ee258e | 141 | ** Descriptions: Timer/CounterX and captureX interrupt handler |
alexan_e | 0:05d110ee258e | 142 | ** |
alexan_e | 0:05d110ee258e | 143 | ** parameters: None |
alexan_e | 0:05d110ee258e | 144 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 145 | ** |
alexan_e | 0:05d110ee258e | 146 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 147 | void TIMER32_1_IRQHandler(void) |
alexan_e | 0:05d110ee258e | 148 | { |
alexan_e | 0:05d110ee258e | 149 | if ( LPC_CT32B1->IR & (0x01<<0) ) |
alexan_e | 0:05d110ee258e | 150 | { |
alexan_e | 0:05d110ee258e | 151 | LPC_CT32B1->IR = 0x1<<0; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 152 | timer32_1_counter[0]++; |
alexan_e | 0:05d110ee258e | 153 | } |
alexan_e | 0:05d110ee258e | 154 | if ( LPC_CT32B1->IR & (0x01<<1) ) |
alexan_e | 0:05d110ee258e | 155 | { |
alexan_e | 0:05d110ee258e | 156 | LPC_CT32B1->IR = 0x1<<1; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 157 | timer32_1_counter[1]++; |
alexan_e | 0:05d110ee258e | 158 | } |
alexan_e | 0:05d110ee258e | 159 | if ( LPC_CT32B1->IR & (0x01<<2) ) |
alexan_e | 0:05d110ee258e | 160 | { |
alexan_e | 0:05d110ee258e | 161 | LPC_CT32B1->IR = 0x1<<2; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 162 | timer32_1_counter[2]++; |
alexan_e | 0:05d110ee258e | 163 | } |
alexan_e | 0:05d110ee258e | 164 | if ( LPC_CT32B1->IR & (0x01<<3) ) |
alexan_e | 0:05d110ee258e | 165 | { |
alexan_e | 0:05d110ee258e | 166 | LPC_CT32B1->IR = 0x1<<3; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 167 | timer32_1_counter[3]++; |
alexan_e | 0:05d110ee258e | 168 | } |
alexan_e | 0:05d110ee258e | 169 | if ( LPC_CT32B1->IR & (0x1<<4) ) |
alexan_e | 0:05d110ee258e | 170 | { |
alexan_e | 0:05d110ee258e | 171 | LPC_CT32B1->IR = 0x1<<4; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 172 | timer32_1_capture[0]++; |
alexan_e | 0:05d110ee258e | 173 | } |
alexan_e | 0:05d110ee258e | 174 | if ( LPC_CT32B1->IR & (0x1<<5) ) |
alexan_e | 0:05d110ee258e | 175 | { |
alexan_e | 0:05d110ee258e | 176 | LPC_CT32B1->IR = 0x1<<5; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 177 | timer32_1_capture[1]++; |
alexan_e | 0:05d110ee258e | 178 | } |
alexan_e | 0:05d110ee258e | 179 | if ( LPC_CT32B1->IR & (0x1<<6) ) |
alexan_e | 0:05d110ee258e | 180 | { |
alexan_e | 0:05d110ee258e | 181 | LPC_CT32B1->IR = 0x1<<6; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 182 | timer32_1_capture[2]++; |
alexan_e | 0:05d110ee258e | 183 | } |
alexan_e | 0:05d110ee258e | 184 | if ( LPC_CT32B1->IR & (0x1<<7) ) |
alexan_e | 0:05d110ee258e | 185 | { |
alexan_e | 0:05d110ee258e | 186 | LPC_CT32B1->IR = 0x1<<7; /* clear interrupt flag */ |
alexan_e | 0:05d110ee258e | 187 | timer32_1_capture[3]++; |
alexan_e | 0:05d110ee258e | 188 | } |
alexan_e | 0:05d110ee258e | 189 | return; |
alexan_e | 0:05d110ee258e | 190 | } |
alexan_e | 0:05d110ee258e | 191 | |
alexan_e | 0:05d110ee258e | 192 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 193 | ** Function name: enable_timer |
alexan_e | 0:05d110ee258e | 194 | ** |
alexan_e | 0:05d110ee258e | 195 | ** Descriptions: Enable timer |
alexan_e | 0:05d110ee258e | 196 | ** |
alexan_e | 0:05d110ee258e | 197 | ** parameters: timer number: 0 or 1 |
alexan_e | 0:05d110ee258e | 198 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 199 | ** |
alexan_e | 0:05d110ee258e | 200 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 201 | void enable_timer32(uint8_t timer_num) |
alexan_e | 0:05d110ee258e | 202 | { |
alexan_e | 0:05d110ee258e | 203 | if ( timer_num == 0 ) |
alexan_e | 0:05d110ee258e | 204 | { |
alexan_e | 0:05d110ee258e | 205 | LPC_CT32B0->TCR = 1; |
alexan_e | 0:05d110ee258e | 206 | } |
alexan_e | 0:05d110ee258e | 207 | else |
alexan_e | 0:05d110ee258e | 208 | { |
alexan_e | 0:05d110ee258e | 209 | LPC_CT32B1->TCR = 1; |
alexan_e | 0:05d110ee258e | 210 | } |
alexan_e | 0:05d110ee258e | 211 | return; |
alexan_e | 0:05d110ee258e | 212 | } |
alexan_e | 0:05d110ee258e | 213 | |
alexan_e | 0:05d110ee258e | 214 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 215 | ** Function name: disable_timer |
alexan_e | 0:05d110ee258e | 216 | ** |
alexan_e | 0:05d110ee258e | 217 | ** Descriptions: Disable timer |
alexan_e | 0:05d110ee258e | 218 | ** |
alexan_e | 0:05d110ee258e | 219 | ** parameters: timer number: 0 or 1 |
alexan_e | 0:05d110ee258e | 220 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 221 | ** |
alexan_e | 0:05d110ee258e | 222 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 223 | void disable_timer32(uint8_t timer_num) |
alexan_e | 0:05d110ee258e | 224 | { |
alexan_e | 0:05d110ee258e | 225 | if ( timer_num == 0 ) |
alexan_e | 0:05d110ee258e | 226 | { |
alexan_e | 0:05d110ee258e | 227 | LPC_CT32B0->TCR = 0; |
alexan_e | 0:05d110ee258e | 228 | } |
alexan_e | 0:05d110ee258e | 229 | else |
alexan_e | 0:05d110ee258e | 230 | { |
alexan_e | 0:05d110ee258e | 231 | LPC_CT32B1->TCR = 0; |
alexan_e | 0:05d110ee258e | 232 | } |
alexan_e | 0:05d110ee258e | 233 | return; |
alexan_e | 0:05d110ee258e | 234 | } |
alexan_e | 0:05d110ee258e | 235 | |
alexan_e | 0:05d110ee258e | 236 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 237 | ** Function name: reset_timer |
alexan_e | 0:05d110ee258e | 238 | ** |
alexan_e | 0:05d110ee258e | 239 | ** Descriptions: Reset timer |
alexan_e | 0:05d110ee258e | 240 | ** |
alexan_e | 0:05d110ee258e | 241 | ** parameters: timer number: 0 or 1 |
alexan_e | 0:05d110ee258e | 242 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 243 | ** |
alexan_e | 0:05d110ee258e | 244 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 245 | void reset_timer32(uint8_t timer_num) |
alexan_e | 0:05d110ee258e | 246 | { |
alexan_e | 0:05d110ee258e | 247 | uint32_t regVal; |
alexan_e | 0:05d110ee258e | 248 | |
alexan_e | 0:05d110ee258e | 249 | if ( timer_num == 0 ) |
alexan_e | 0:05d110ee258e | 250 | { |
alexan_e | 0:05d110ee258e | 251 | regVal = LPC_CT32B0->TCR; |
alexan_e | 0:05d110ee258e | 252 | regVal |= 0x02; |
alexan_e | 0:05d110ee258e | 253 | LPC_CT32B0->TCR = regVal; |
alexan_e | 0:05d110ee258e | 254 | } |
alexan_e | 0:05d110ee258e | 255 | else |
alexan_e | 0:05d110ee258e | 256 | { |
alexan_e | 0:05d110ee258e | 257 | regVal = LPC_CT32B1->TCR; |
alexan_e | 0:05d110ee258e | 258 | regVal |= 0x02; |
alexan_e | 0:05d110ee258e | 259 | LPC_CT32B1->TCR = regVal; |
alexan_e | 0:05d110ee258e | 260 | } |
alexan_e | 0:05d110ee258e | 261 | return; |
alexan_e | 0:05d110ee258e | 262 | } |
alexan_e | 0:05d110ee258e | 263 | |
alexan_e | 0:05d110ee258e | 264 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 265 | ** Function name: set_timer_capture |
alexan_e | 0:05d110ee258e | 266 | ** |
alexan_e | 0:05d110ee258e | 267 | ** Descriptions: Set timer capture based on location |
alexan_e | 0:05d110ee258e | 268 | ** |
alexan_e | 0:05d110ee258e | 269 | ** parameters: timer number: 0~1, location 0~2 |
alexan_e | 0:05d110ee258e | 270 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 271 | ** |
alexan_e | 0:05d110ee258e | 272 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 273 | void set_timer32_capture(uint8_t timer_num, uint8_t location ) |
alexan_e | 0:05d110ee258e | 274 | { |
alexan_e | 0:05d110ee258e | 275 | if ( timer_num == 0 ) |
alexan_e | 0:05d110ee258e | 276 | { |
alexan_e | 0:05d110ee258e | 277 | /* Timer0_32 I/O config */ |
alexan_e | 0:05d110ee258e | 278 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 279 | { |
alexan_e | 0:05d110ee258e | 280 | LPC_IOCON->PIO1_28 &= ~0x07; |
alexan_e | 0:05d110ee258e | 281 | LPC_IOCON->PIO1_28 |= 0x01; /* Timer0_32 CAP0 */ |
alexan_e | 0:05d110ee258e | 282 | LPC_IOCON->PIO1_29 &= ~0x07; |
alexan_e | 0:05d110ee258e | 283 | LPC_IOCON->PIO1_29 |= 0x02; /* Timer0_32 CAP1 */ |
alexan_e | 0:05d110ee258e | 284 | } |
alexan_e | 0:05d110ee258e | 285 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 286 | { |
alexan_e | 0:05d110ee258e | 287 | LPC_IOCON->PIO0_17 &= ~0x07; |
alexan_e | 0:05d110ee258e | 288 | LPC_IOCON->PIO0_17 |= 0x02; /* Timer0_32 CAP0 */ |
alexan_e | 0:05d110ee258e | 289 | } |
alexan_e | 0:05d110ee258e | 290 | else |
alexan_e | 0:05d110ee258e | 291 | { |
alexan_e | 0:05d110ee258e | 292 | while ( 1 ); /* Fatal location number error */ |
alexan_e | 0:05d110ee258e | 293 | } |
alexan_e | 0:05d110ee258e | 294 | } |
alexan_e | 0:05d110ee258e | 295 | else |
alexan_e | 0:05d110ee258e | 296 | { |
alexan_e | 0:05d110ee258e | 297 | /* Timer1_32 I/O config */ |
alexan_e | 0:05d110ee258e | 298 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 299 | { |
alexan_e | 0:05d110ee258e | 300 | // LPC_IOCON->PIO1_4 &= ~0x07; /* Timer1_32 I/O config */ |
alexan_e | 0:05d110ee258e | 301 | // LPC_IOCON->PIO1_4 |= 0x01; /* Timer1_32 CAP0 */ |
alexan_e | 0:05d110ee258e | 302 | // LPC_IOCON->PIO1_5 &= ~0x07; |
alexan_e | 0:05d110ee258e | 303 | // LPC_IOCON->PIO1_5 |= 0x01; /* Timer1_32 CAP1 */ |
alexan_e | 0:05d110ee258e | 304 | } |
alexan_e | 0:05d110ee258e | 305 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 306 | { |
alexan_e | 0:05d110ee258e | 307 | LPC_IOCON->TMS_PIO0_12 &= ~0x07; |
alexan_e | 0:05d110ee258e | 308 | LPC_IOCON->TMS_PIO0_12 |= 0x03; /* Timer1_32 CAP0 */ |
alexan_e | 0:05d110ee258e | 309 | } |
alexan_e | 0:05d110ee258e | 310 | else |
alexan_e | 0:05d110ee258e | 311 | { |
alexan_e | 0:05d110ee258e | 312 | while ( 1 ); /* Fatal location number error */ |
alexan_e | 0:05d110ee258e | 313 | } |
alexan_e | 0:05d110ee258e | 314 | } |
alexan_e | 0:05d110ee258e | 315 | return; |
alexan_e | 0:05d110ee258e | 316 | } |
alexan_e | 0:05d110ee258e | 317 | |
alexan_e | 0:05d110ee258e | 318 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 319 | ** Function name: set_timer_match |
alexan_e | 0:05d110ee258e | 320 | ** |
alexan_e | 0:05d110ee258e | 321 | ** Descriptions: Set timer match based on location |
alexan_e | 0:05d110ee258e | 322 | ** |
alexan_e | 0:05d110ee258e | 323 | ** parameters: timer number: 0~1, location 0~2 |
alexan_e | 0:05d110ee258e | 324 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 325 | ** |
alexan_e | 0:05d110ee258e | 326 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 327 | void set_timer32_match(uint8_t timer_num, uint8_t match_enable, uint8_t location) |
alexan_e | 0:05d110ee258e | 328 | { |
alexan_e | 0:05d110ee258e | 329 | if ( timer_num == 0 ) |
alexan_e | 0:05d110ee258e | 330 | { |
alexan_e | 0:05d110ee258e | 331 | if ( match_enable & 0x01 ) |
alexan_e | 0:05d110ee258e | 332 | { |
alexan_e | 0:05d110ee258e | 333 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 334 | { |
alexan_e | 0:05d110ee258e | 335 | LPC_IOCON->PIO0_18 &= ~0x07; |
alexan_e | 0:05d110ee258e | 336 | LPC_IOCON->PIO0_18 |= 0x02; /* Timer0_32 MAT0 */ |
alexan_e | 0:05d110ee258e | 337 | } |
alexan_e | 0:05d110ee258e | 338 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 339 | { |
alexan_e | 0:05d110ee258e | 340 | LPC_IOCON->PIO1_24 &= ~0x07; |
alexan_e | 0:05d110ee258e | 341 | LPC_IOCON->PIO1_24 |= 0x01; /* Timer0_32 MAT0 */ |
alexan_e | 0:05d110ee258e | 342 | } |
alexan_e | 0:05d110ee258e | 343 | } |
alexan_e | 0:05d110ee258e | 344 | if ( match_enable & 0x02 ) |
alexan_e | 0:05d110ee258e | 345 | { |
alexan_e | 0:05d110ee258e | 346 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 347 | { |
alexan_e | 0:05d110ee258e | 348 | LPC_IOCON->PIO0_19 &= ~0x07; |
alexan_e | 0:05d110ee258e | 349 | LPC_IOCON->PIO0_19 |= 0x02; /* Timer0_32 MAT1 */ |
alexan_e | 0:05d110ee258e | 350 | } |
alexan_e | 0:05d110ee258e | 351 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 352 | { |
alexan_e | 0:05d110ee258e | 353 | LPC_IOCON->PIO1_25 &= ~0x07; |
alexan_e | 0:05d110ee258e | 354 | LPC_IOCON->PIO1_25 |= 0x01; /* Timer0_32 MAT1 */ |
alexan_e | 0:05d110ee258e | 355 | } |
alexan_e | 0:05d110ee258e | 356 | } |
alexan_e | 0:05d110ee258e | 357 | if ( match_enable & 0x04 ) |
alexan_e | 0:05d110ee258e | 358 | { |
alexan_e | 0:05d110ee258e | 359 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 360 | { |
alexan_e | 0:05d110ee258e | 361 | LPC_IOCON->PIO0_1 &= ~0x07; |
alexan_e | 0:05d110ee258e | 362 | LPC_IOCON->PIO0_1 |= 0x02; /* Timer0_32 MAT2 */ |
alexan_e | 0:05d110ee258e | 363 | } |
alexan_e | 0:05d110ee258e | 364 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 365 | { |
alexan_e | 0:05d110ee258e | 366 | LPC_IOCON->PIO1_26 &= ~0x07; |
alexan_e | 0:05d110ee258e | 367 | LPC_IOCON->PIO1_26 |= 0x01; /* Timer0_32 MAT2 */ |
alexan_e | 0:05d110ee258e | 368 | } |
alexan_e | 0:05d110ee258e | 369 | } |
alexan_e | 0:05d110ee258e | 370 | if ( match_enable & 0x08 ) |
alexan_e | 0:05d110ee258e | 371 | { |
alexan_e | 0:05d110ee258e | 372 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 373 | { |
alexan_e | 0:05d110ee258e | 374 | LPC_IOCON->TDI_PIO0_11 &= ~0x07; |
alexan_e | 0:05d110ee258e | 375 | LPC_IOCON->TDI_PIO0_11 |= 0x03; /* Timer0_32 MAT3 */ |
alexan_e | 0:05d110ee258e | 376 | } |
alexan_e | 0:05d110ee258e | 377 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 378 | { |
alexan_e | 0:05d110ee258e | 379 | LPC_IOCON->PIO1_27 &= ~0x07; |
alexan_e | 0:05d110ee258e | 380 | LPC_IOCON->PIO1_27 |= 0x01; /* Timer0_32 MAT3 */ |
alexan_e | 0:05d110ee258e | 381 | } |
alexan_e | 0:05d110ee258e | 382 | } |
alexan_e | 0:05d110ee258e | 383 | } |
alexan_e | 0:05d110ee258e | 384 | else if ( timer_num == 1 ) |
alexan_e | 0:05d110ee258e | 385 | { |
alexan_e | 0:05d110ee258e | 386 | if ( match_enable & 0x01 ) |
alexan_e | 0:05d110ee258e | 387 | { |
alexan_e | 0:05d110ee258e | 388 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 389 | { |
alexan_e | 0:05d110ee258e | 390 | // LPC_IOCON->PIO1_0 &= ~0x07; |
alexan_e | 0:05d110ee258e | 391 | // LPC_IOCON->PIO1_0 |= 0x01; /* Timer1_32 MAT0 */ |
alexan_e | 0:05d110ee258e | 392 | } |
alexan_e | 0:05d110ee258e | 393 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 394 | { |
alexan_e | 0:05d110ee258e | 395 | LPC_IOCON->TDO_PIO0_13 &= ~0x07; |
alexan_e | 0:05d110ee258e | 396 | LPC_IOCON->TDO_PIO0_13 |= 0x03; /* Timer1_32 MAT0 */ |
alexan_e | 0:05d110ee258e | 397 | } |
alexan_e | 0:05d110ee258e | 398 | } |
alexan_e | 0:05d110ee258e | 399 | if ( match_enable & 0x02 ) |
alexan_e | 0:05d110ee258e | 400 | { |
alexan_e | 0:05d110ee258e | 401 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 402 | { |
alexan_e | 0:05d110ee258e | 403 | // LPC_IOCON->PIO1_1 &= ~0x07; |
alexan_e | 0:05d110ee258e | 404 | // LPC_IOCON->PIO1_1 |= 0x01; /* Timer1_32 MAT1 */ |
alexan_e | 0:05d110ee258e | 405 | } |
alexan_e | 0:05d110ee258e | 406 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 407 | { |
alexan_e | 0:05d110ee258e | 408 | LPC_IOCON->TRST_PIO0_14 &= ~0x07; |
alexan_e | 0:05d110ee258e | 409 | LPC_IOCON->TRST_PIO0_14 |= 0x03; /* Timer1_32 MAT1 */ |
alexan_e | 0:05d110ee258e | 410 | } |
alexan_e | 0:05d110ee258e | 411 | } |
alexan_e | 0:05d110ee258e | 412 | if ( match_enable & 0x04 ) |
alexan_e | 0:05d110ee258e | 413 | { |
alexan_e | 0:05d110ee258e | 414 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 415 | { |
alexan_e | 0:05d110ee258e | 416 | // LPC_IOCON->PIO1_2 &= ~0x07; |
alexan_e | 0:05d110ee258e | 417 | // LPC_IOCON->PIO1_2 |= 0x01; /* Timer1_32 MAT2 */ |
alexan_e | 0:05d110ee258e | 418 | } |
alexan_e | 0:05d110ee258e | 419 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 420 | { |
alexan_e | 0:05d110ee258e | 421 | #if __SWD_DISABLED |
alexan_e | 0:05d110ee258e | 422 | LPC_IOCON->SWDIO_PIO0_15 &= ~0x07; |
alexan_e | 0:05d110ee258e | 423 | LPC_IOCON->SWDIO_PIO0_15 |= 0x03; /* Timer1_32 MAT2 */ |
alexan_e | 0:05d110ee258e | 424 | #endif |
alexan_e | 0:05d110ee258e | 425 | } |
alexan_e | 0:05d110ee258e | 426 | } |
alexan_e | 0:05d110ee258e | 427 | if ( match_enable & 0x08 ) |
alexan_e | 0:05d110ee258e | 428 | { |
alexan_e | 0:05d110ee258e | 429 | if ( location == 0 ) |
alexan_e | 0:05d110ee258e | 430 | { |
alexan_e | 0:05d110ee258e | 431 | // LPC_IOCON->PIO1_3 &= ~0x07; |
alexan_e | 0:05d110ee258e | 432 | // LPC_IOCON->PIO1_3 |= 0x01; /* Timer1_32 MAT3 */ |
alexan_e | 0:05d110ee258e | 433 | } |
alexan_e | 0:05d110ee258e | 434 | else if ( location == 1 ) |
alexan_e | 0:05d110ee258e | 435 | { |
alexan_e | 0:05d110ee258e | 436 | LPC_IOCON->PIO0_16 &= ~0x07; |
alexan_e | 0:05d110ee258e | 437 | LPC_IOCON->PIO0_16 |= 0x02; /* Timer1_32 MAT3 */ |
alexan_e | 0:05d110ee258e | 438 | } |
alexan_e | 0:05d110ee258e | 439 | } |
alexan_e | 0:05d110ee258e | 440 | } |
alexan_e | 0:05d110ee258e | 441 | return; |
alexan_e | 0:05d110ee258e | 442 | } |
alexan_e | 0:05d110ee258e | 443 | |
alexan_e | 0:05d110ee258e | 444 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 445 | ** Function name: init_timer |
alexan_e | 0:05d110ee258e | 446 | ** |
alexan_e | 0:05d110ee258e | 447 | ** Descriptions: Initialize timer, set timer interval, reset timer, |
alexan_e | 0:05d110ee258e | 448 | ** install timer interrupt handler |
alexan_e | 0:05d110ee258e | 449 | ** |
alexan_e | 0:05d110ee258e | 450 | ** parameters: timer number and timer interval |
alexan_e | 0:05d110ee258e | 451 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 452 | ** |
alexan_e | 0:05d110ee258e | 453 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 454 | void init_timer32(uint8_t timer_num, uint32_t TimerInterval) |
alexan_e | 0:05d110ee258e | 455 | { |
alexan_e | 0:05d110ee258e | 456 | uint32_t i; |
alexan_e | 0:05d110ee258e | 457 | |
alexan_e | 0:05d110ee258e | 458 | if ( timer_num == 0 ) |
alexan_e | 0:05d110ee258e | 459 | { |
alexan_e | 0:05d110ee258e | 460 | /* Some of the I/O pins need to be clearfully planned if |
alexan_e | 0:05d110ee258e | 461 | you use below module because JTAG and TIMER CAP/MAT pins are muxed. */ |
alexan_e | 0:05d110ee258e | 462 | LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9); |
alexan_e | 0:05d110ee258e | 463 | |
alexan_e | 0:05d110ee258e | 464 | LPC_CT32B0->MR0 = TimerInterval; |
alexan_e | 0:05d110ee258e | 465 | #if TIMER_MATCH |
alexan_e | 0:05d110ee258e | 466 | for ( i = 0; i < 4; i++ ) |
alexan_e | 0:05d110ee258e | 467 | { |
alexan_e | 0:05d110ee258e | 468 | timer32_0_counter[i] = 0; |
alexan_e | 0:05d110ee258e | 469 | } |
alexan_e | 0:05d110ee258e | 470 | set_timer32_match(timer_num, 0x0F, 0); |
alexan_e | 0:05d110ee258e | 471 | LPC_CT32B0->EMR &= ~(0xFF<<4); |
alexan_e | 0:05d110ee258e | 472 | LPC_CT32B0->EMR |= ((0x3<<4)|(0x3<<6)|(0x3<<8)|(0x3<<10)); /* MR0/1/2/3 Toggle */ |
alexan_e | 0:05d110ee258e | 473 | #else |
alexan_e | 0:05d110ee258e | 474 | for ( i = 0; i < 4; i++ ) |
alexan_e | 0:05d110ee258e | 475 | { |
alexan_e | 0:05d110ee258e | 476 | timer32_0_capture[i] = 0; |
alexan_e | 0:05d110ee258e | 477 | } |
alexan_e | 0:05d110ee258e | 478 | set_timer32_capture(timer_num, 0 ); |
alexan_e | 0:05d110ee258e | 479 | /* Capture 0 on rising edge, interrupt enable. */ |
alexan_e | 0:05d110ee258e | 480 | LPC_CT32B0->CCR = (0x5<<0)|(0x5<<3); |
alexan_e | 0:05d110ee258e | 481 | #endif |
alexan_e | 0:05d110ee258e | 482 | LPC_CT32B0->MCR = 3; /* Interrupt and Reset on MR0 */ |
alexan_e | 0:05d110ee258e | 483 | |
alexan_e | 0:05d110ee258e | 484 | /* Enable the TIMER0 Interrupt */ |
alexan_e | 0:05d110ee258e | 485 | #if NMI_ENABLED |
alexan_e | 0:05d110ee258e | 486 | NVIC_DisableIRQ( TIMER_32_0_IRQn ); |
alexan_e | 0:05d110ee258e | 487 | NMI_Init( TIMER_32_0_IRQn ); |
alexan_e | 0:05d110ee258e | 488 | #else |
alexan_e | 0:05d110ee258e | 489 | NVIC_EnableIRQ(TIMER_32_0_IRQn); |
alexan_e | 0:05d110ee258e | 490 | #endif |
alexan_e | 0:05d110ee258e | 491 | } |
alexan_e | 0:05d110ee258e | 492 | else if ( timer_num == 1 ) |
alexan_e | 0:05d110ee258e | 493 | { |
alexan_e | 0:05d110ee258e | 494 | /* Some of the I/O pins need to be clearfully planned if |
alexan_e | 0:05d110ee258e | 495 | you use below module because JTAG and TIMER CAP/MAT pins are muxed. */ |
alexan_e | 0:05d110ee258e | 496 | LPC_SYSCON->SYSAHBCLKCTRL |= (1<<10); |
alexan_e | 0:05d110ee258e | 497 | |
alexan_e | 0:05d110ee258e | 498 | LPC_CT32B1->MR0 = TimerInterval; |
alexan_e | 0:05d110ee258e | 499 | #if TIMER_MATCH |
alexan_e | 0:05d110ee258e | 500 | for ( i = 0; i < 4; i++ ) |
alexan_e | 0:05d110ee258e | 501 | { |
alexan_e | 0:05d110ee258e | 502 | timer32_1_counter[i] = 0; |
alexan_e | 0:05d110ee258e | 503 | } |
alexan_e | 0:05d110ee258e | 504 | set_timer32_match(timer_num, 0x0F, 0); |
alexan_e | 0:05d110ee258e | 505 | LPC_CT32B1->EMR &= ~(0xFF<<4); |
alexan_e | 0:05d110ee258e | 506 | LPC_CT32B1->EMR |= ((0x3<<4)|(0x3<<6)|(0x3<<8)|(0x3<<10)); /* MR0/1/2 Toggle */ |
alexan_e | 0:05d110ee258e | 507 | #else |
alexan_e | 0:05d110ee258e | 508 | for ( i = 0; i < 4; i++ ) |
alexan_e | 0:05d110ee258e | 509 | { |
alexan_e | 0:05d110ee258e | 510 | timer32_1_capture[i] = 0; |
alexan_e | 0:05d110ee258e | 511 | } |
alexan_e | 0:05d110ee258e | 512 | set_timer32_capture(timer_num, 0 ); |
alexan_e | 0:05d110ee258e | 513 | /* Capture 0 on rising edge, interrupt enable. */ |
alexan_e | 0:05d110ee258e | 514 | LPC_CT32B1->CCR = (0x5<<0)|(0x5<<3); |
alexan_e | 0:05d110ee258e | 515 | #endif |
alexan_e | 0:05d110ee258e | 516 | LPC_CT32B1->MCR = 3; /* Interrupt and Reset on MR0 */ |
alexan_e | 0:05d110ee258e | 517 | |
alexan_e | 0:05d110ee258e | 518 | /* Enable the TIMER1 Interrupt */ |
alexan_e | 0:05d110ee258e | 519 | #if NMI_ENABLED |
alexan_e | 0:05d110ee258e | 520 | NVIC_DisableIRQ( TIMER_32_1_IRQn ); |
alexan_e | 0:05d110ee258e | 521 | NMI_Init( TIMER_32_1_IRQn ); |
alexan_e | 0:05d110ee258e | 522 | #else |
alexan_e | 0:05d110ee258e | 523 | NVIC_EnableIRQ(TIMER_32_1_IRQn); |
alexan_e | 0:05d110ee258e | 524 | #endif |
alexan_e | 0:05d110ee258e | 525 | } |
alexan_e | 0:05d110ee258e | 526 | return; |
alexan_e | 0:05d110ee258e | 527 | } |
alexan_e | 0:05d110ee258e | 528 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 529 | ** Function name: init_timer32PWM |
alexan_e | 0:05d110ee258e | 530 | ** |
alexan_e | 0:05d110ee258e | 531 | ** Descriptions: Initialize timer as PWM |
alexan_e | 0:05d110ee258e | 532 | ** |
alexan_e | 0:05d110ee258e | 533 | ** parameters: timer number, period and match enable: |
alexan_e | 0:05d110ee258e | 534 | ** match_enable[0] = PWM for MAT0 |
alexan_e | 0:05d110ee258e | 535 | ** match_enable[1] = PWM for MAT1 |
alexan_e | 0:05d110ee258e | 536 | ** match_enable[2] = PWM for MAT2 |
alexan_e | 0:05d110ee258e | 537 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 538 | ** |
alexan_e | 0:05d110ee258e | 539 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 540 | void init_timer32PWM(uint8_t timer_num, uint32_t period, uint8_t match_enable) |
alexan_e | 0:05d110ee258e | 541 | { |
alexan_e | 0:05d110ee258e | 542 | disable_timer32(timer_num); |
alexan_e | 0:05d110ee258e | 543 | if (timer_num == 1) |
alexan_e | 0:05d110ee258e | 544 | { |
alexan_e | 0:05d110ee258e | 545 | LPC_SYSCON->SYSAHBCLKCTRL |= (1<<10); |
alexan_e | 0:05d110ee258e | 546 | |
alexan_e | 0:05d110ee258e | 547 | /* Setup the external match register */ |
alexan_e | 0:05d110ee258e | 548 | LPC_CT32B1->EMR = (1<<EMC3)|(1<<EMC2)|(2<<EMC1)|(1<<EMC0)|MATCH3|(match_enable); |
alexan_e | 0:05d110ee258e | 549 | |
alexan_e | 0:05d110ee258e | 550 | /* Setup the outputs */ |
alexan_e | 0:05d110ee258e | 551 | /* If match0 is enabled, set the output, use location 0 for test. */ |
alexan_e | 0:05d110ee258e | 552 | set_timer32_match( timer_num, match_enable, 0 ); |
alexan_e | 0:05d110ee258e | 553 | |
alexan_e | 0:05d110ee258e | 554 | /* Enable the selected PWMs and enable Match3 */ |
alexan_e | 0:05d110ee258e | 555 | LPC_CT32B1->PWMC = MATCH3|(match_enable); |
alexan_e | 0:05d110ee258e | 556 | |
alexan_e | 0:05d110ee258e | 557 | /* Setup the match registers */ |
alexan_e | 0:05d110ee258e | 558 | /* set the period value to a global variable */ |
alexan_e | 0:05d110ee258e | 559 | timer32_1_period = period; |
alexan_e | 0:05d110ee258e | 560 | LPC_CT32B1->MR3 = timer32_1_period; |
alexan_e | 0:05d110ee258e | 561 | LPC_CT32B1->MR0 = timer32_1_period/2; |
alexan_e | 0:05d110ee258e | 562 | LPC_CT32B1->MR1 = timer32_1_period/2; |
alexan_e | 0:05d110ee258e | 563 | LPC_CT32B1->MR2 = timer32_1_period/2; |
alexan_e | 0:05d110ee258e | 564 | LPC_CT32B1->MCR = 1<<10; /* Reset on MR3 */ |
alexan_e | 0:05d110ee258e | 565 | } |
alexan_e | 0:05d110ee258e | 566 | else |
alexan_e | 0:05d110ee258e | 567 | { |
alexan_e | 0:05d110ee258e | 568 | /* Some of the I/O pins need to be clearfully planned if |
alexan_e | 0:05d110ee258e | 569 | you use below module because JTAG and TIMER CAP/MAT pins are muxed. */ |
alexan_e | 0:05d110ee258e | 570 | LPC_SYSCON->SYSAHBCLKCTRL |= (1<<9); |
alexan_e | 0:05d110ee258e | 571 | |
alexan_e | 0:05d110ee258e | 572 | /* Setup the external match register */ |
alexan_e | 0:05d110ee258e | 573 | LPC_CT32B0->EMR = (1<<EMC3)|(2<<EMC2)|(1<<EMC1)|(1<<EMC0)|MATCH3|(match_enable); |
alexan_e | 0:05d110ee258e | 574 | |
alexan_e | 0:05d110ee258e | 575 | /* Setup the outputs */ |
alexan_e | 0:05d110ee258e | 576 | /* If match0 is enabled, set the output, use location 0 for test. */ |
alexan_e | 0:05d110ee258e | 577 | set_timer32_match( timer_num, match_enable, 0 ); |
alexan_e | 0:05d110ee258e | 578 | |
alexan_e | 0:05d110ee258e | 579 | /* Enable the selected PWMs and enable Match3 */ |
alexan_e | 0:05d110ee258e | 580 | LPC_CT32B0->PWMC = MATCH3|(match_enable); |
alexan_e | 0:05d110ee258e | 581 | |
alexan_e | 0:05d110ee258e | 582 | /* Setup the match registers */ |
alexan_e | 0:05d110ee258e | 583 | /* set the period value to a global variable */ |
alexan_e | 0:05d110ee258e | 584 | timer32_0_period = period; |
alexan_e | 0:05d110ee258e | 585 | LPC_CT32B0->MR3 = timer32_0_period; |
alexan_e | 0:05d110ee258e | 586 | LPC_CT32B0->MR0 = timer32_0_period/2; |
alexan_e | 0:05d110ee258e | 587 | LPC_CT32B0->MR1 = timer32_0_period/2; |
alexan_e | 0:05d110ee258e | 588 | LPC_CT32B0->MR2 = timer32_0_period/2; |
alexan_e | 0:05d110ee258e | 589 | LPC_CT32B0->MCR = 1<<10; /* Reset on MR3 */ |
alexan_e | 0:05d110ee258e | 590 | } |
alexan_e | 0:05d110ee258e | 591 | } |
alexan_e | 0:05d110ee258e | 592 | |
alexan_e | 0:05d110ee258e | 593 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 594 | ** Function name: pwm32_setMatch |
alexan_e | 0:05d110ee258e | 595 | ** |
alexan_e | 0:05d110ee258e | 596 | ** Descriptions: Set the pwm32 match values |
alexan_e | 0:05d110ee258e | 597 | ** |
alexan_e | 0:05d110ee258e | 598 | ** parameters: timer number, match numner and the value |
alexan_e | 0:05d110ee258e | 599 | ** |
alexan_e | 0:05d110ee258e | 600 | ** Returned value: None |
alexan_e | 0:05d110ee258e | 601 | ** |
alexan_e | 0:05d110ee258e | 602 | ******************************************************************************/ |
alexan_e | 0:05d110ee258e | 603 | void setMatch_timer32PWM (uint8_t timer_num, uint8_t match_nr, uint32_t value) |
alexan_e | 0:05d110ee258e | 604 | { |
alexan_e | 0:05d110ee258e | 605 | if (timer_num) |
alexan_e | 0:05d110ee258e | 606 | { |
alexan_e | 0:05d110ee258e | 607 | switch (match_nr) |
alexan_e | 0:05d110ee258e | 608 | { |
alexan_e | 0:05d110ee258e | 609 | case 0: |
alexan_e | 0:05d110ee258e | 610 | LPC_CT32B1->MR0 = value; |
alexan_e | 0:05d110ee258e | 611 | break; |
alexan_e | 0:05d110ee258e | 612 | case 1: |
alexan_e | 0:05d110ee258e | 613 | LPC_CT32B1->MR1 = value; |
alexan_e | 0:05d110ee258e | 614 | break; |
alexan_e | 0:05d110ee258e | 615 | case 2: |
alexan_e | 0:05d110ee258e | 616 | LPC_CT32B1->MR2 = value; |
alexan_e | 0:05d110ee258e | 617 | break; |
alexan_e | 0:05d110ee258e | 618 | case 3: |
alexan_e | 0:05d110ee258e | 619 | LPC_CT32B1->MR3 = value; |
alexan_e | 0:05d110ee258e | 620 | break; |
alexan_e | 0:05d110ee258e | 621 | default: |
alexan_e | 0:05d110ee258e | 622 | break; |
alexan_e | 0:05d110ee258e | 623 | } |
alexan_e | 0:05d110ee258e | 624 | } |
alexan_e | 0:05d110ee258e | 625 | else |
alexan_e | 0:05d110ee258e | 626 | { |
alexan_e | 0:05d110ee258e | 627 | switch (match_nr) |
alexan_e | 0:05d110ee258e | 628 | { |
alexan_e | 0:05d110ee258e | 629 | case 0: |
alexan_e | 0:05d110ee258e | 630 | LPC_CT32B0->MR0 = value; |
alexan_e | 0:05d110ee258e | 631 | break; |
alexan_e | 0:05d110ee258e | 632 | case 1: |
alexan_e | 0:05d110ee258e | 633 | LPC_CT32B0->MR1 = value; |
alexan_e | 0:05d110ee258e | 634 | break; |
alexan_e | 0:05d110ee258e | 635 | case 2: |
alexan_e | 0:05d110ee258e | 636 | LPC_CT32B0->MR2 = value; |
alexan_e | 0:05d110ee258e | 637 | break; |
alexan_e | 0:05d110ee258e | 638 | case 3: |
alexan_e | 0:05d110ee258e | 639 | LPC_CT32B0->MR3 = value; |
alexan_e | 0:05d110ee258e | 640 | break; |
alexan_e | 0:05d110ee258e | 641 | default: |
alexan_e | 0:05d110ee258e | 642 | break; |
alexan_e | 0:05d110ee258e | 643 | } |
alexan_e | 0:05d110ee258e | 644 | } |
alexan_e | 0:05d110ee258e | 645 | } |
alexan_e | 0:05d110ee258e | 646 | |
alexan_e | 0:05d110ee258e | 647 | /****************************************************************************** |
alexan_e | 0:05d110ee258e | 648 | ** End Of File |
alexan_e | 0:05d110ee258e | 649 | ******************************************************************************/ |