Andy K / Lib17_Core
Committer:
AjK
Date:
Tue Apr 12 08:47:15 2011 +0000
Revision:
6:40a18fb62f1f
Parent:
5:a3b5b8fc77e3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:127224866798 1 /****************************************************************************
AjK 0:127224866798 2 * Product: LIB17 Open Source Library
AjK 0:127224866798 3 *
AjK 0:127224866798 4 * Steller Technologies Limited
AjK 0:127224866798 5 * ----------------------------
AjK 0:127224866798 6 *
AjK 0:127224866798 7 * Copyright (C) 2002-2011 Steller Technologies Limited. All rights reserved.
AjK 0:127224866798 8 *
AjK 0:127224866798 9 * This software may be distributed and modified under the terms of the GNU
AjK 0:127224866798 10 * General Public License version 2 (GPL) as published by the Free Software
AjK 0:127224866798 11 * Foundation and appearing in the file GPL.TXT included in the packaging of
AjK 0:127224866798 12 * this file. Please note that GPL Section 2[b] requires that all works based
AjK 0:127224866798 13 * on this software must also be made publicly available under the terms of
AjK 0:127224866798 14 * the GPL ("Copyleft").
AjK 0:127224866798 15 *
AjK 0:127224866798 16 * Alternatively, this software may be distributed and modified under the
AjK 0:127224866798 17 * terms of Steller Technologies Limited commercial licenses, which expressly
AjK 0:127224866798 18 * supersede the GPL and are specifically designed for licensees interested in
AjK 0:127224866798 19 * retaining the proprietary status of their code.
AjK 0:127224866798 20 *
AjK 1:2f99edb5545c 21 * $Id:$
AjK 1:2f99edb5545c 22 *
AjK 0:127224866798 23 ***************************************************************************/
AjK 0:127224866798 24
AjK 1:2f99edb5545c 25 /**
AjK 6:40a18fb62f1f 26 * @defgroup API The Lib17 Core API
AjK 1:2f99edb5545c 27 * @defgroup Lib17_DIO Lib17_DIO functions
AjK 1:2f99edb5545c 28 */
AjK 6:40a18fb62f1f 29
AjK 0:127224866798 30 #ifndef AJK_Lib17_DIO_H
AjK 0:127224866798 31 #define AJK_Lib17_DIO_H
AjK 0:127224866798 32
AjK 0:127224866798 33 #include "Lib17_Mbed.h"
AjK 0:127224866798 34 #include "Lib17_IOmacros.h"
AjK 0:127224866798 35
AjK 0:127224866798 36 namespace AjK {
AjK 0:127224866798 37
AjK 1:2f99edb5545c 38 /** Lib17_DIO - Adds pin input/output objects.
AjK 1:2f99edb5545c 39 *
AjK 1:2f99edb5545c 40 * The Mbed library supplies the DigitalIn and DigitalOut objects to allow you
AjK 1:2f99edb5545c 41 * to specify ins and outs.
AjK 1:2f99edb5545c 42 *
AjK 1:2f99edb5545c 43 * Lib17_DIO allows library objects to implement pins without the requirement
AjK 1:2f99edb5545c 44 * to link against the Mbed library. This increase portability when using
AjK 1:2f99edb5545c 45 * alternate compilers (such as the Code Red GCC C++ compiler for LPCXpresso).
AjK 3:0e24c9d4ff2c 46 *
AjK 6:40a18fb62f1f 47 * Example code:-
AjK 6:40a18fb62f1f 48 * @code
AjK 6:40a18fb62f1f 49 * #include "Lib17_Core.h"
AjK 6:40a18fb62f1f 50 *
AjK 6:40a18fb62f1f 51 * Lib17_DIO myin(p5, Lib17_DIO::In);
AjK 6:40a18fb62f1f 52 * Lib17_DIO myled(LED1);
AjK 6:40a18fb62f1f 53 *
AjK 6:40a18fb62f1f 54 * int main() {
AjK 6:40a18fb62f1f 55 * while(1) {
AjK 6:40a18fb62f1f 56 * myled = myin;
AjK 6:40a18fb62f1f 57 * }
AjK 6:40a18fb62f1f 58 * }
AjK 6:40a18fb62f1f 59 * @endcode
AjK 6:40a18fb62f1f 60 *
AjK 5:a3b5b8fc77e3 61 * @see http://cornflakes.wikidot.com/lib17:core
AjK 3:0e24c9d4ff2c 62 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 63 */
AjK 0:127224866798 64 class Lib17_DIO {
AjK 0:127224866798 65 public:
AjK 0:127224866798 66 enum Direction {
AjK 0:127224866798 67 Out = 0
AjK 0:127224866798 68 , In
AjK 0:127224866798 69 };
AjK 0:127224866798 70
AjK 0:127224866798 71 protected:
AjK 0:127224866798 72 PinName pin;
AjK 0:127224866798 73 uint32_t mask;
AjK 0:127224866798 74 uint32_t fiodir;
AjK 0:127224866798 75 uint32_t fiomask;
AjK 0:127224866798 76 uint32_t fiopin;
AjK 0:127224866798 77 uint32_t fioset;
AjK 0:127224866798 78 uint32_t fioclr;
AjK 0:127224866798 79
AjK 0:127224866798 80 inline void setpin(PinName p) { pin = p; }
AjK 0:127224866798 81 inline void setmask(PinName p) { mask = (uint32_t)(1UL << ((uint32_t)p & 0x1F)); }
AjK 0:127224866798 82 inline void setDir(PinName p) { fiodir = (uint32_t)(p & ~0x1F) + 0x00; }
AjK 0:127224866798 83 inline void setMask(PinName p) { fiomask = (uint32_t)(p & ~0x1F) + 0x10; }
AjK 0:127224866798 84 inline void setPin(PinName p) { fiopin = (uint32_t)(p & ~0x1F) + 0x14; }
AjK 0:127224866798 85 inline void setSet(PinName p) { fioset = (uint32_t)(p & ~0x1F) + 0x18; }
AjK 0:127224866798 86 inline void setClr(PinName p) { fioclr = (uint32_t)(p & ~0x1F) + 0x1C; }
AjK 0:127224866798 87
AjK 0:127224866798 88 inline void pinUp() { *((volatile uint32_t *)fioset) = mask; }
AjK 0:127224866798 89 inline void pinDn() { *((volatile uint32_t *)fioclr) = mask; }
AjK 0:127224866798 90 inline uint32_t pinIs() { return *((volatile uint32_t *)(fiopin)) & mask; }
AjK 0:127224866798 91
AjK 0:127224866798 92 public:
AjK 0:127224866798 93
AjK 2:b77d327026af 94 /** Constructor
AjK 4:3418d67a1969 95 * @ingroup Lib17_DIO
AjK 2:b77d327026af 96 */
AjK 0:127224866798 97 Lib17_DIO(PinName p, Direction d = Out, PinMode m = PullDown) { init(p, d, m); };
AjK 0:127224866798 98
AjK 2:b77d327026af 99 /** write
AjK 1:2f99edb5545c 100 *
AjK 6:40a18fb62f1f 101 * Writes a value to the pin.
AjK 1:2f99edb5545c 102 *
AjK 1:2f99edb5545c 103 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 104 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 105 * @param i Zero makes the pin 0v, non-zero makes the pin 1.
AjK 1:2f99edb5545c 106 */
AjK 0:127224866798 107 void write(int i) { if (i!=0) { pinUp(); } else { pinDn(); } }
AjK 6:40a18fb62f1f 108
AjK 2:b77d327026af 109 /** read
AjK 1:2f99edb5545c 110 *
AjK 6:40a18fb62f1f 111 * Reads the value on the pin.
AjK 1:2f99edb5545c 112 *
AjK 1:2f99edb5545c 113 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 114 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 115 * @return int 0v returns zero, otherwise returns 1.
AjK 1:2f99edb5545c 116 */
AjK 0:127224866798 117 int read(void) { return pinIs() ? 1 : 0; };
AjK 6:40a18fb62f1f 118
AjK 2:b77d327026af 119 /** output
AjK 1:2f99edb5545c 120 *
AjK 1:2f99edb5545c 121 * Setup the pin to be an output.
AjK 1:2f99edb5545c 122 *
AjK 1:2f99edb5545c 123 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 124 * @ingroup Lib17_DIO
AjK 6:40a18fb62f1f 125 * @ingroup API
AjK 1:2f99edb5545c 126 * @return int 0v returns zero, otherwise returns 1.
AjK 1:2f99edb5545c 127 */
AjK 0:127224866798 128 void output(void) { *((volatile uint32_t *)fiodir) |= mask; }
AjK 6:40a18fb62f1f 129
AjK 2:b77d327026af 130 /** input
AjK 1:2f99edb5545c 131 *
AjK 1:2f99edb5545c 132 * Setup the pin to be an input.
AjK 1:2f99edb5545c 133 *
AjK 1:2f99edb5545c 134 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 135 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 136 * @return int 0v returns zero, otherwise returns 1.
AjK 1:2f99edb5545c 137 */
AjK 0:127224866798 138 void input(void) { *((volatile uint32_t *)fiodir) &= ~mask; }
AjK 0:127224866798 139
AjK 2:b77d327026af 140 /** getPin
AjK 1:2f99edb5545c 141 *
AjK 1:2f99edb5545c 142 * Get the PinName this object is operating on.
AjK 1:2f99edb5545c 143 *
AjK 1:2f99edb5545c 144 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 145 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 146 * @return int 0v returns zero, otherwise returns 1.
AjK 1:2f99edb5545c 147 */
AjK 0:127224866798 148 PinName getPin(void) { return pin; }
AjK 6:40a18fb62f1f 149
AjK 2:b77d327026af 150 /** getDirection
AjK 1:2f99edb5545c 151 *
AjK 1:2f99edb5545c 152 * Get the operational direction this pin is setup for.
AjK 1:2f99edb5545c 153 *
AjK 1:2f99edb5545c 154 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 155 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 156 * @return int 0v returns zero, otherwise returns 1.
AjK 1:2f99edb5545c 157 */
AjK 0:127224866798 158 int getDirection(void) { return *((volatile uint32_t *)fiomask) & mask ? 1 : 0; }
AjK 0:127224866798 159
AjK 2:b77d327026af 160 /** operator int()
AjK 1:2f99edb5545c 161 *
AjK 6:40a18fb62f1f 162 * Reads the value on the pin.
AjK 1:2f99edb5545c 163 *
AjK 1:2f99edb5545c 164 * @see read
AjK 1:2f99edb5545c 165 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 166 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 167 * @return int 0v returns zero, otherwise returns 1.
AjK 1:2f99edb5545c 168 */
AjK 0:127224866798 169 operator int() { return read(); }
AjK 6:40a18fb62f1f 170
AjK 6:40a18fb62f1f 171 /** operator=
AjK 1:2f99edb5545c 172 *
AjK 6:40a18fb62f1f 173 * Writes a value to the pin.
AjK 1:2f99edb5545c 174 *
AjK 1:2f99edb5545c 175 * @see write
AjK 1:2f99edb5545c 176 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 177 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 178 */
AjK 0:127224866798 179 Lib17_DIO& operator= (int value) { write(value); return *this; }
AjK 6:40a18fb62f1f 180
AjK 6:40a18fb62f1f 181 /** operator=
AjK 1:2f99edb5545c 182 *
AjK 6:40a18fb62f1f 183 * Writes a value to the pin.
AjK 1:2f99edb5545c 184 *
AjK 1:2f99edb5545c 185 * @see write
AjK 1:2f99edb5545c 186 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 187 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 188 */
AjK 0:127224866798 189 Lib17_DIO& operator= (Lib17_DIO& rhs) { write(rhs.read()); return *this; }
AjK 0:127224866798 190
AjK 2:b77d327026af 191 /** getMask
AjK 1:2f99edb5545c 192 *
AjK 1:2f99edb5545c 193 * Get the mask value for this pin.
AjK 1:2f99edb5545c 194 *
AjK 1:2f99edb5545c 195 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 196 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 197 * @return uint32_t The mask value used by this pin.
AjK 6:40a18fb62f1f 198 */
AjK 0:127224866798 199 uint32_t getMask(void) { return mask; }
AjK 6:40a18fb62f1f 200
AjK 2:b77d327026af 201 /** getFiodir
AjK 1:2f99edb5545c 202 *
AjK 1:2f99edb5545c 203 * Get the FIODIR register for the port the pin is on.
AjK 1:2f99edb5545c 204 *
AjK 1:2f99edb5545c 205 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 206 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 207 * @return uint32_t The register value.
AjK 6:40a18fb62f1f 208 */
AjK 0:127224866798 209 uint32_t getFiodir(void) { return fiodir; }
AjK 6:40a18fb62f1f 210
AjK 2:b77d327026af 211 /** getFiomask
AjK 1:2f99edb5545c 212 *
AjK 1:2f99edb5545c 213 * Get the FIOMASK register for the port the pin is on.
AjK 1:2f99edb5545c 214 *
AjK 1:2f99edb5545c 215 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 216 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 217 * @return uint32_t The register value.
AjK 6:40a18fb62f1f 218 */
AjK 0:127224866798 219 uint32_t getFiomask(void) { return fiomask; }
AjK 6:40a18fb62f1f 220
AjK 2:b77d327026af 221 /** getFiopin
AjK 1:2f99edb5545c 222 *
AjK 1:2f99edb5545c 223 * Get the FIOPIN register for the port the pin is on.
AjK 1:2f99edb5545c 224 *
AjK 1:2f99edb5545c 225 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 226 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 227 * @return uint32_t The register value.
AjK 6:40a18fb62f1f 228 */
AjK 0:127224866798 229 uint32_t getFiopin(void) { return fiopin; }
AjK 6:40a18fb62f1f 230
AjK 2:b77d327026af 231 /** getFioset
AjK 1:2f99edb5545c 232 *
AjK 1:2f99edb5545c 233 * Get the FIOSET register for the port the pin is on.
AjK 1:2f99edb5545c 234 *
AjK 1:2f99edb5545c 235 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 236 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 237 * @return uint32_t The register value.
AjK 6:40a18fb62f1f 238 */
AjK 0:127224866798 239 uint32_t getFioset(void) { return fioset; }
AjK 6:40a18fb62f1f 240
AjK 2:b77d327026af 241 /** getFioclr
AjK 1:2f99edb5545c 242 *
AjK 1:2f99edb5545c 243 * Get the FIOCLR register for the port the pin is on.
AjK 1:2f99edb5545c 244 *
AjK 1:2f99edb5545c 245 * @see http://cornflakes.wikidot.com/lib17:core:lib17-dio
AjK 1:2f99edb5545c 246 * @ingroup Lib17_DIO
AjK 1:2f99edb5545c 247 * @return uint32_t The register value.
AjK 6:40a18fb62f1f 248 */
AjK 0:127224866798 249 uint32_t getFioclr(void) { return fioclr; }
AjK 0:127224866798 250
AjK 0:127224866798 251
AjK 0:127224866798 252 protected:
AjK 0:127224866798 253 void init(PinName p, Direction d, PinMode m)
AjK 0:127224866798 254 {
AjK 0:127224866798 255 // We rely on the fact that by default the LPC1768
AjK 0:127224866798 256 // sets all pins to be GPIO. The user will change
AjK 0:127224866798 257 // that if they need to. So we don't bother trying
AjK 0:127224866798 258 // to setup PINSELx
AjK 6:40a18fb62f1f 259
AjK 0:127224866798 260 // psel(); // Not used, see above.
AjK 6:40a18fb62f1f 261
AjK 0:127224866798 262 setpin(p);
AjK 0:127224866798 263 setmask(p);
AjK 0:127224866798 264 setDir(p);
AjK 0:127224866798 265 setMask(p);
AjK 0:127224866798 266 setPin(p);
AjK 0:127224866798 267 setSet(p);
AjK 0:127224866798 268 setClr(p);
AjK 6:40a18fb62f1f 269
AjK 0:127224866798 270 if (d == Out) output();
AjK 0:127224866798 271 else mode( m );
AjK 0:127224866798 272 }
AjK 0:127224866798 273
AjK 0:127224866798 274 protected:
AjK 0:127224866798 275 void psel(void)
AjK 0:127224866798 276 {
AjK 0:127224866798 277 uint32_t ppsel, pumask;
AjK 6:40a18fb62f1f 278
AjK 0:127224866798 279 if (pin >= P0_0 && pin <= P0_15) ppsel = (uint32_t)(&LPC_PINCON->PINSEL0);
AjK 0:127224866798 280 else if (pin >= P0_16 && pin <= P0_31) ppsel = (uint32_t)(&LPC_PINCON->PINSEL1);
AjK 0:127224866798 281 else if (pin >= P1_0 && pin <= P1_15) ppsel = (uint32_t)(&LPC_PINCON->PINSEL2);
AjK 0:127224866798 282 else if (pin >= P1_16 && pin <= P1_31) ppsel = (uint32_t)(&LPC_PINCON->PINSEL3);
AjK 0:127224866798 283 else if (pin >= P2_0 && pin <= P2_15) ppsel = (uint32_t)(&LPC_PINCON->PINSEL4);
AjK 0:127224866798 284 else if (pin >= P3_16 && pin <= P3_31) ppsel = (uint32_t)(&LPC_PINCON->PINSEL7);
AjK 0:127224866798 285 else if (pin >= P4_16 && pin <= P4_31) ppsel = (uint32_t)(&LPC_PINCON->PINSEL9);
AjK 0:127224866798 286 else return;
AjK 6:40a18fb62f1f 287
AjK 0:127224866798 288 pumask = ~(3UL << ((pin & 0x1F)>>1));
AjK 0:127224866798 289 *((volatile uint32_t *)ppsel) &= pumask;
AjK 0:127224866798 290 }
AjK 0:127224866798 291
AjK 0:127224866798 292 public:
AjK 6:40a18fb62f1f 293 void mode(PinMode m)
AjK 0:127224866798 294 {
AjK 0:127224866798 295 uint32_t ppmod, pumask;
AjK 6:40a18fb62f1f 296
AjK 0:127224866798 297 if (m == OpenDrain) {
AjK 0:127224866798 298 openDrain(1);
AjK 0:127224866798 299 }
AjK 0:127224866798 300 else {
AjK 0:127224866798 301 if (pin >= P0_0 && pin <= P0_15) {
AjK 0:127224866798 302 ppmod = (uint32_t)(&LPC_PINCON->PINMODE0);
AjK 0:127224866798 303 pumask = ((m & 0x3) << ( ((pin & 0x1F)-0)*2) );
AjK 0:127224866798 304 }
AjK 0:127224866798 305 else if (pin >= P0_16 && pin <= P0_31) {
AjK 0:127224866798 306 ppmod = (uint32_t)(&LPC_PINCON->PINMODE1);
AjK 0:127224866798 307 pumask = ((m & 0x3) << ( ((pin & 0x1F)-16)*2) );
AjK 0:127224866798 308 }
AjK 0:127224866798 309 else if (pin >= P1_0 && pin <= P1_15) {
AjK 0:127224866798 310 ppmod = (uint32_t)(&LPC_PINCON->PINMODE2);
AjK 0:127224866798 311 pumask = ((m & 0x3) << ( ((pin & 0x1F)-0)*2) );
AjK 0:127224866798 312 }
AjK 0:127224866798 313 else if (pin >= P1_16 && pin <= P1_31) {
AjK 0:127224866798 314 ppmod = (uint32_t)(&LPC_PINCON->PINMODE3);
AjK 0:127224866798 315 pumask = ((m & 0x3) << ( ((pin & 0x1F)-16)*2) );
AjK 0:127224866798 316 }
AjK 0:127224866798 317 else if (pin >= P2_0 && pin <= P2_15) {
AjK 0:127224866798 318 ppmod = (uint32_t)(&LPC_PINCON->PINMODE4);
AjK 0:127224866798 319 pumask = ((m & 0x3) << ( ((pin & 0x1F)-0)*2) );
AjK 0:127224866798 320 }
AjK 0:127224866798 321 else if (pin >= P3_16 && pin <= P3_31) {
AjK 0:127224866798 322 ppmod = (uint32_t)(&LPC_PINCON->PINMODE7);
AjK 0:127224866798 323 pumask = ((m & 0x3) << ( ((pin & 0x1F)-16)*2) );
AjK 0:127224866798 324 }
AjK 0:127224866798 325 else if (pin >= P4_16 && pin <= P4_31) {
AjK 0:127224866798 326 ppmod = (uint32_t)(&LPC_PINCON->PINMODE9);
AjK 0:127224866798 327 pumask = ((m & 0x3) << ( ((pin & 0x1F)-16)*2) );
AjK 0:127224866798 328 }
AjK 0:127224866798 329 else return;
AjK 6:40a18fb62f1f 330
AjK 0:127224866798 331 *((volatile uint32_t *)ppmod) |= pumask;
AjK 0:127224866798 332 }
AjK 0:127224866798 333 }
AjK 0:127224866798 334
AjK 0:127224866798 335 public:
AjK 6:40a18fb62f1f 336 void openDrain(int i = 1)
AjK 0:127224866798 337 {
AjK 0:127224866798 338 if (pin >= P0_0 && pin <= P0_31) { if (i) LPC_PINCON->PINMODE_OD0 |= mask; else LPC_PINCON->PINMODE_OD0 &= ~mask; }
AjK 0:127224866798 339 else if (pin >= P1_0 && pin <= P1_31) { if (i) LPC_PINCON->PINMODE_OD1 |= mask; else LPC_PINCON->PINMODE_OD1 &= ~mask; }
AjK 0:127224866798 340 else if (pin >= P2_0 && pin <= P2_31) { if (i) LPC_PINCON->PINMODE_OD2 |= mask; else LPC_PINCON->PINMODE_OD2 &= ~mask; }
AjK 0:127224866798 341 else if (pin >= P3_16 && pin <= P3_31) { if (i) LPC_PINCON->PINMODE_OD3 |= mask; else LPC_PINCON->PINMODE_OD3 &= ~mask; }
AjK 0:127224866798 342 else if (pin >= P4_16 && pin <= P4_31) { if (i) LPC_PINCON->PINMODE_OD4 |= mask; else LPC_PINCON->PINMODE_OD4 &= ~mask; }
AjK 0:127224866798 343 }
AjK 0:127224866798 344
AjK 0:127224866798 345 };
AjK 0:127224866798 346
AjK 0:127224866798 347 }; /* namespace AjK ends. */
AjK 0:127224866798 348
AjK 0:127224866798 349 using namespace AjK;
AjK 0:127224866798 350
AjK 0:127224866798 351 #endif /* AJK_Lib17_DIO_H */