ADF4360 - See http://mbed.org/forum/helloworld/topic/1430

Committer:
AjK
Date:
Mon Nov 22 13:31:31 2010 +0000
Revision:
2:e4d7ec6aeceb
Parent:
1:4037b46f2040
1.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:528dac948be7 1 /*
AjK 0:528dac948be7 2 Copyright (c) 2010 Andy Kirkham
AjK 0:528dac948be7 3
AjK 0:528dac948be7 4 Permission is hereby granted, free of charge, to any person obtaining a copy
AjK 0:528dac948be7 5 of this software and associated documentation files (the "Software"), to deal
AjK 0:528dac948be7 6 in the Software without restriction, including without limitation the rights
AjK 0:528dac948be7 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
AjK 0:528dac948be7 8 copies of the Software, and to permit persons to whom the Software is
AjK 0:528dac948be7 9 furnished to do so, subject to the following conditions:
AjK 0:528dac948be7 10
AjK 0:528dac948be7 11 The above copyright notice and this permission notice shall be included in
AjK 0:528dac948be7 12 all copies or substantial portions of the Software.
AjK 0:528dac948be7 13
AjK 0:528dac948be7 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
AjK 0:528dac948be7 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
AjK 0:528dac948be7 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AjK 0:528dac948be7 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
AjK 0:528dac948be7 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
AjK 0:528dac948be7 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
AjK 0:528dac948be7 20 THE SOFTWARE.
AjK 0:528dac948be7 21 */
AjK 0:528dac948be7 22
AjK 0:528dac948be7 23 #ifndef MODADF4360_H
AjK 0:528dac948be7 24 #define MODADF4360_H
AjK 0:528dac948be7 25
AjK 0:528dac948be7 26 #include "mbed.h"
AjK 0:528dac948be7 27
AjK 0:528dac948be7 28 #define GET_CNTL_LATCH(pos,mask) return(control_latch>>pos)&mask
AjK 0:528dac948be7 29 #define SET_CNTL_LATCH(pos,mask,n) control_latch&=~(mask<<pos);control_latch|=((n&mask)<<pos)
AjK 0:528dac948be7 30 #define GET_N_LATCH(pos,mask) return(counterNlatch>>pos)&mask
AjK 0:528dac948be7 31 #define SET_N_LATCH(pos,mask,n) counterNlatch&=~(mask<<pos);counterNlatch|=((n&mask)<<pos)
AjK 0:528dac948be7 32 #define GET_R_LATCH(pos,mask) return(counterRlatch>>pos)&mask
AjK 0:528dac948be7 33 #define SET_R_LATCH(pos,mask,n) counterRlatch&=~(mask<<pos);counterRlatch|=((n&mask)<<pos)
AjK 0:528dac948be7 34
AjK 0:528dac948be7 35 /** @defgroup Control_Latch The Control Latch */
AjK 0:528dac948be7 36 /** @defgroup Counter_N_Latch The Counter N Latch */
AjK 0:528dac948be7 37 /** @defgroup Counter_R_Latch The Counter R Latch */
AjK 0:528dac948be7 38
AjK 1:4037b46f2040 39 /**
AjK 1:4037b46f2040 40 * @author Andy Kirkham
AjK 1:4037b46f2040 41 * @see Control_Latch
AjK 1:4037b46f2040 42 * @see Counter_N_Latch
AjK 1:4037b46f2040 43 * @see Counter_R_Latch
AjK 1:4037b46f2040 44 *
AjK 1:4037b46f2040 45 * <b>MODADF4360</b> Test library
AjK 1:4037b46f2040 46 *
AjK 1:4037b46f2040 47 * Standard example:
AjK 1:4037b46f2040 48 * @code
AjK 1:4037b46f2040 49 * #include "mbed.h"
AjK 1:4037b46f2040 50 * #include "MODADF4360.h"
AjK 1:4037b46f2040 51 *
AjK 1:4037b46f2040 52 * DigitalOut led1(LED1);
AjK 1:4037b46f2040 53 * ADF4360 adf(p5, p6, p7, p8);
AjK 1:4037b46f2040 54 *
AjK 1:4037b46f2040 55 * int main() {
AjK 1:4037b46f2040 56 *
AjK 1:4037b46f2040 57 * // Setup all the parts of the Control Latch
AjK 1:4037b46f2040 58 * adf.prescalerValue(1);
AjK 1:4037b46f2040 59 * adf.cpGain(1);
AjK 1:4037b46f2040 60 * //... set all the parts you need, then...
AjK 1:4037b46f2040 61 *
AjK 1:4037b46f2040 62 * // Once all the parts ate set, write them to the device.
AjK 1:4037b46f2040 63 * adf.controlLatchWrite();
AjK 1:4037b46f2040 64 *
AjK 1:4037b46f2040 65 * // repeat for N and R latches.
AjK 1:4037b46f2040 66 *
AjK 1:4037b46f2040 67 * while(1) {
AjK 1:4037b46f2040 68 * led1 = !led1;
AjK 1:4037b46f2040 69 * wait(1);
AjK 1:4037b46f2040 70 * }
AjK 1:4037b46f2040 71 * }
AjK 1:4037b46f2040 72 * @endcode
AjK 1:4037b46f2040 73 */
AjK 0:528dac948be7 74 class ADF4360 {
AjK 0:528dac948be7 75 public:
AjK 0:528dac948be7 76
AjK 0:528dac948be7 77 ADF4360(PinName mosi, PinName miso, PinName sclk, PinName le) {
AjK 0:528dac948be7 78 _le = new DigitalOut(le);
AjK 0:528dac948be7 79 _le->write(1);
AjK 0:528dac948be7 80 _ssp = new SPI(mosi, miso, sclk);
AjK 0:528dac948be7 81 _ssp->format(8,0);
AjK 0:528dac948be7 82 _ssp->frequency(1000000);
AjK 0:528dac948be7 83 };
AjK 0:528dac948be7 84
AjK 0:528dac948be7 85 ~ADF4360() { delete(_le); delete(_ssp); };
AjK 0:528dac948be7 86
AjK 2:e4d7ec6aeceb 87 /**
AjK 2:e4d7ec6aeceb 88 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 89 */
AjK 0:528dac948be7 90 int prescalerValue(void) { GET_CNTL_LATCH(22,3); }
AjK 2:e4d7ec6aeceb 91
AjK 2:e4d7ec6aeceb 92 /**
AjK 2:e4d7ec6aeceb 93 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 94 */
AjK 0:528dac948be7 95 void prescalerValue(int i) { SET_CNTL_LATCH(22,3UL,i); }
AjK 0:528dac948be7 96
AjK 2:e4d7ec6aeceb 97 /**
AjK 2:e4d7ec6aeceb 98 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 99 */
AjK 0:528dac948be7 100 int powerDown2(void) { GET_CNTL_LATCH(21,1); }
AjK 2:e4d7ec6aeceb 101
AjK 2:e4d7ec6aeceb 102 /**
AjK 2:e4d7ec6aeceb 103 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 104 */
AjK 0:528dac948be7 105 void powerDown2(int i) { SET_CNTL_LATCH(21,1UL,i); }
AjK 0:528dac948be7 106
AjK 2:e4d7ec6aeceb 107 /**
AjK 2:e4d7ec6aeceb 108 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 109 */
AjK 0:528dac948be7 110 int powerDown1(void) { GET_CNTL_LATCH(20,1); }
AjK 2:e4d7ec6aeceb 111
AjK 2:e4d7ec6aeceb 112 /**
AjK 2:e4d7ec6aeceb 113 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 114 */
AjK 0:528dac948be7 115 void powerDown1(int i) { SET_CNTL_LATCH(20,1UL,i); }
AjK 0:528dac948be7 116
AjK 2:e4d7ec6aeceb 117 /**
AjK 2:e4d7ec6aeceb 118 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 119 */
AjK 0:528dac948be7 120 int currentSetting2(void) { GET_CNTL_LATCH(17,7); }
AjK 2:e4d7ec6aeceb 121
AjK 2:e4d7ec6aeceb 122 /**
AjK 2:e4d7ec6aeceb 123 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 124 */
AjK 0:528dac948be7 125 void currentSetting2(int i) { SET_CNTL_LATCH(17,7UL,i); }
AjK 0:528dac948be7 126
AjK 2:e4d7ec6aeceb 127 /**
AjK 2:e4d7ec6aeceb 128 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 129 */
AjK 0:528dac948be7 130 int currentSetting1(void) { GET_CNTL_LATCH(14,7); }
AjK 2:e4d7ec6aeceb 131
AjK 2:e4d7ec6aeceb 132 /**
AjK 2:e4d7ec6aeceb 133 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 134 */
AjK 0:528dac948be7 135 void currentSetting1(int i) { SET_CNTL_LATCH(14,7UL,i); }
AjK 0:528dac948be7 136
AjK 2:e4d7ec6aeceb 137 /**
AjK 2:e4d7ec6aeceb 138 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 139 */
AjK 0:528dac948be7 140 int outputPowerLevel(void) { GET_CNTL_LATCH(12,3); }
AjK 2:e4d7ec6aeceb 141
AjK 2:e4d7ec6aeceb 142 /**
AjK 2:e4d7ec6aeceb 143 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 144 */
AjK 0:528dac948be7 145 void outputPowerLevel(int i) { SET_CNTL_LATCH(12,3UL,i); }
AjK 0:528dac948be7 146
AjK 2:e4d7ec6aeceb 147 /**
AjK 2:e4d7ec6aeceb 148 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 149 */
AjK 0:528dac948be7 150 int muteTillLockDetect(void) { GET_CNTL_LATCH(11,1); }
AjK 2:e4d7ec6aeceb 151
AjK 2:e4d7ec6aeceb 152 /**
AjK 2:e4d7ec6aeceb 153 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 154 */
AjK 0:528dac948be7 155 void muteTillLockDetect(int i) { SET_CNTL_LATCH(11,1UL,i); }
AjK 0:528dac948be7 156
AjK 2:e4d7ec6aeceb 157 /**
AjK 2:e4d7ec6aeceb 158 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 159 */
AjK 0:528dac948be7 160 int cpGain(void) { GET_CNTL_LATCH(10,1); }
AjK 2:e4d7ec6aeceb 161
AjK 2:e4d7ec6aeceb 162 /**
AjK 2:e4d7ec6aeceb 163 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 164 */
AjK 0:528dac948be7 165 void cpGain(int i) { SET_CNTL_LATCH(10,1UL,i); }
AjK 0:528dac948be7 166
AjK 2:e4d7ec6aeceb 167 /**
AjK 2:e4d7ec6aeceb 168 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 169 */
AjK 0:528dac948be7 170 int cpOutput(void) { GET_CNTL_LATCH(9,1); }
AjK 2:e4d7ec6aeceb 171
AjK 2:e4d7ec6aeceb 172 /**
AjK 2:e4d7ec6aeceb 173 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 174 */
AjK 0:528dac948be7 175 void cpOutput(int i) { SET_CNTL_LATCH(9,1UL,i); }
AjK 0:528dac948be7 176
AjK 2:e4d7ec6aeceb 177 /**
AjK 2:e4d7ec6aeceb 178 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 179 */
AjK 0:528dac948be7 180 int phaseDetectPol(void) { GET_CNTL_LATCH(8,1); }
AjK 2:e4d7ec6aeceb 181
AjK 2:e4d7ec6aeceb 182 /**
AjK 2:e4d7ec6aeceb 183 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 184 */
AjK 0:528dac948be7 185 void phaseDetectPol(int i) { SET_CNTL_LATCH(8,1UL,i); }
AjK 0:528dac948be7 186
AjK 2:e4d7ec6aeceb 187 /**
AjK 2:e4d7ec6aeceb 188 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 189 */
AjK 0:528dac948be7 190 int muxControl(void) { GET_CNTL_LATCH(5,7); }
AjK 2:e4d7ec6aeceb 191
AjK 2:e4d7ec6aeceb 192 /**
AjK 2:e4d7ec6aeceb 193 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 194 */
AjK 0:528dac948be7 195 void muxControl(int i) { SET_CNTL_LATCH(5,7UL,i); }
AjK 0:528dac948be7 196
AjK 2:e4d7ec6aeceb 197 /**
AjK 2:e4d7ec6aeceb 198 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 199 */
AjK 0:528dac948be7 200 int counterReset(void) { GET_CNTL_LATCH(4,1); }
AjK 2:e4d7ec6aeceb 201
AjK 2:e4d7ec6aeceb 202 /**
AjK 2:e4d7ec6aeceb 203 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 204 */
AjK 0:528dac948be7 205 void counterReset(int i) { SET_CNTL_LATCH(4,1UL,i); }
AjK 0:528dac948be7 206
AjK 2:e4d7ec6aeceb 207 /**
AjK 2:e4d7ec6aeceb 208 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 209 */
AjK 0:528dac948be7 210 int corePowerLevel(void) { GET_CNTL_LATCH(2,3); }
AjK 2:e4d7ec6aeceb 211
AjK 2:e4d7ec6aeceb 212 /**
AjK 2:e4d7ec6aeceb 213 * @ingroup Control_Latch
AjK 2:e4d7ec6aeceb 214 */
AjK 0:528dac948be7 215 void corePowerLevel(int i) { SET_CNTL_LATCH(2,3UL,i); }
AjK 0:528dac948be7 216
AjK 0:528dac948be7 217 void controlLatchWrite(void) {
AjK 0:528dac948be7 218 _le->write(0);
AjK 0:528dac948be7 219 _ssp->write((control_latch >> 16) & 0xFF);
AjK 0:528dac948be7 220 _ssp->write((control_latch >> 8) & 0xFF);
AjK 0:528dac948be7 221 _ssp->write((control_latch & 0xFF) & ~(3UL << 0));
AjK 0:528dac948be7 222 _le->write(1);
AjK 0:528dac948be7 223 }
AjK 0:528dac948be7 224
AjK 2:e4d7ec6aeceb 225 /**
AjK 2:e4d7ec6aeceb 226 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 227 */
AjK 0:528dac948be7 228 int divideBy2Select(void) { GET_N_LATCH(23,1); }
AjK 2:e4d7ec6aeceb 229
AjK 2:e4d7ec6aeceb 230 /**
AjK 2:e4d7ec6aeceb 231 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 232 */
AjK 0:528dac948be7 233 void divideBy2Select(int i) { SET_N_LATCH(23,1UL,i); }
AjK 0:528dac948be7 234
AjK 2:e4d7ec6aeceb 235 /**
AjK 2:e4d7ec6aeceb 236 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 237 */
AjK 0:528dac948be7 238 int divideBy2(void) { GET_N_LATCH(22,1); }
AjK 2:e4d7ec6aeceb 239
AjK 2:e4d7ec6aeceb 240 /**
AjK 2:e4d7ec6aeceb 241 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 242 */
AjK 0:528dac948be7 243 void divideBy2(int i) { SET_N_LATCH(22,1UL,i); }
AjK 0:528dac948be7 244
AjK 2:e4d7ec6aeceb 245 /**
AjK 2:e4d7ec6aeceb 246 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 247 */
AjK 0:528dac948be7 248 int nCPGain(void) { GET_N_LATCH(21,1); }
AjK 2:e4d7ec6aeceb 249
AjK 2:e4d7ec6aeceb 250 /**
AjK 2:e4d7ec6aeceb 251 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 252 */
AjK 0:528dac948be7 253 void nCPGain(int i) { SET_N_LATCH(21,1UL,i); }
AjK 0:528dac948be7 254
AjK 2:e4d7ec6aeceb 255 /**
AjK 2:e4d7ec6aeceb 256 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 257 */
AjK 0:528dac948be7 258 int counterB(void) { GET_N_LATCH(8,0x1FFF); }
AjK 2:e4d7ec6aeceb 259
AjK 2:e4d7ec6aeceb 260 /**
AjK 2:e4d7ec6aeceb 261 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 262 */
AjK 0:528dac948be7 263 void counterB(int i) { SET_N_LATCH(8,0x1FFFUL,i); }
AjK 0:528dac948be7 264
AjK 2:e4d7ec6aeceb 265 /**
AjK 2:e4d7ec6aeceb 266 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 267 */
AjK 0:528dac948be7 268 int counterA(void) { GET_N_LATCH(2,0x1F); }
AjK 2:e4d7ec6aeceb 269
AjK 2:e4d7ec6aeceb 270 /**
AjK 2:e4d7ec6aeceb 271 * @ingroup Counter_N_Latch
AjK 2:e4d7ec6aeceb 272 */
AjK 0:528dac948be7 273 void counterA(int i) { SET_N_LATCH(2,0x1FUL,i); }
AjK 0:528dac948be7 274
AjK 0:528dac948be7 275 void counterNWrite(void) {
AjK 0:528dac948be7 276 _le->write(0);
AjK 0:528dac948be7 277 _ssp->write((counterNlatch >> 16) & 0xFF);
AjK 0:528dac948be7 278 _ssp->write((counterNlatch >> 8) & 0xFF);
AjK 0:528dac948be7 279 _ssp->write(((counterNlatch & 0xFF) & ~(0x3CUL << 0)) | (2UL << 0));
AjK 0:528dac948be7 280 _le->write(1);
AjK 0:528dac948be7 281 }
AjK 0:528dac948be7 282
AjK 2:e4d7ec6aeceb 283 /**
AjK 2:e4d7ec6aeceb 284 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 285 */
AjK 0:528dac948be7 286 int bandSelectClock(void) { GET_R_LATCH(20,3); }
AjK 2:e4d7ec6aeceb 287 /**
AjK 2:e4d7ec6aeceb 288 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 289 */
AjK 0:528dac948be7 290 void bandSelectClock(int i) { SET_R_LATCH(20,3UL,i); }
AjK 0:528dac948be7 291
AjK 2:e4d7ec6aeceb 292 /**
AjK 2:e4d7ec6aeceb 293 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 294 */
AjK 0:528dac948be7 295 int testModeBit(void) { GET_R_LATCH(19,1); }
AjK 2:e4d7ec6aeceb 296
AjK 2:e4d7ec6aeceb 297 /**
AjK 2:e4d7ec6aeceb 298 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 299 */
AjK 0:528dac948be7 300 void testModeBit(int i) { SET_R_LATCH(19,1UL,i); }
AjK 0:528dac948be7 301
AjK 2:e4d7ec6aeceb 302 /**
AjK 2:e4d7ec6aeceb 303 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 304 */
AjK 0:528dac948be7 305 int lockDetect(void) { GET_R_LATCH(18,1); }
AjK 2:e4d7ec6aeceb 306
AjK 2:e4d7ec6aeceb 307 /**
AjK 2:e4d7ec6aeceb 308 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 309 */
AjK 0:528dac948be7 310 void lockDetect(int i) { SET_R_LATCH(18,1UL,i); }
AjK 0:528dac948be7 311
AjK 2:e4d7ec6aeceb 312 /**
AjK 2:e4d7ec6aeceb 313 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 314 */
AjK 0:528dac948be7 315 int antiBacklash(void) { GET_R_LATCH(16,3); }
AjK 2:e4d7ec6aeceb 316
AjK 2:e4d7ec6aeceb 317 /**
AjK 2:e4d7ec6aeceb 318 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 319 */
AjK 0:528dac948be7 320 void antiBacklash(int i) { SET_R_LATCH(16,3UL,i); }
AjK 0:528dac948be7 321
AjK 2:e4d7ec6aeceb 322 /**
AjK 2:e4d7ec6aeceb 323 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 324 */
AjK 0:528dac948be7 325 int counterRef(void) { GET_R_LATCH(2,0x3FFF); }
AjK 2:e4d7ec6aeceb 326
AjK 2:e4d7ec6aeceb 327 /**
AjK 2:e4d7ec6aeceb 328 * @ingroup Counter_R_Latch
AjK 2:e4d7ec6aeceb 329 */
AjK 0:528dac948be7 330 void counterRef(int i) { SET_R_LATCH(2,0x3FFFUL,i); }
AjK 0:528dac948be7 331
AjK 0:528dac948be7 332 void counterRWrite(void) {
AjK 0:528dac948be7 333 _le->write(0);
AjK 0:528dac948be7 334 _ssp->write((counterRlatch >> 16) & 0xFF);
AjK 0:528dac948be7 335 _ssp->write((counterRlatch >> 8) & 0xFF);
AjK 0:528dac948be7 336 _ssp->write(((counterRlatch & 0xFF) & ~(0x3CUL << 0)) | (1UL << 0));
AjK 0:528dac948be7 337 _le->write(1);
AjK 0:528dac948be7 338 }
AjK 0:528dac948be7 339
AjK 0:528dac948be7 340 protected:
AjK 0:528dac948be7 341
AjK 0:528dac948be7 342 uint32_t control_latch;
AjK 0:528dac948be7 343 uint32_t counterNlatch;
AjK 0:528dac948be7 344 uint32_t counterRlatch;
AjK 0:528dac948be7 345
AjK 0:528dac948be7 346 SPI *_ssp;
AjK 0:528dac948be7 347 DigitalOut *_le;
AjK 0:528dac948be7 348 };
AjK 0:528dac948be7 349
AjK 0:528dac948be7 350
AjK 0:528dac948be7 351 #endif