my implementation of mbed-like classes using the LPC1768 register access.

Dependents:   registers-example RedWireBridge

This is just to satisfy my curiosity on how the mbed libraries work. I put it here just in case others are too. Every time I learn how another internal register works, I'll keep it here to save myself from future coding headaches.

working

  • DigitalIn
  • DigitalOut
  • wait()

mostly working

  • Serial
  • Timer
  • Ticker
  • Timeout

Serial doesn't have all the methods that mbed had, but it works for me. (only UART0, so only over USB to the pc for now) Timer has the same limitations of mbed for default resolution (30 min limit), and if you start at the end of resolution and stop after it rolls back to 0, it doesn't take that into account. But I added the option to change resolution, so I can have longer timers.

For Ticker, I used a 100 microsecond timer instead of a 1 microsecond Timer, so the smallest interval in between function calls is 100 microseconds. (10KHz) However, this means that the maximum interval in between function calls is 59 hours. (untested)

The Timeout class, simply uses a Ticker, but then marks it as nonactive after the first function call. Automatically calls the detach() function when attaching it again, so no don't need to worry about it.

Committer:
elevatorguy
Date:
Thu Jan 03 05:25:18 2013 +0000
Revision:
2:276fb0fe230c
Parent:
0:d2d9baa1a6d8
fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elevatorguy 0:d2d9baa1a6d8 1 #include "InOut.h"
elevatorguy 0:d2d9baa1a6d8 2
elevatorguy 0:d2d9baa1a6d8 3 InOut::operator bool() {
elevatorguy 0:d2d9baa1a6d8 4 return read();
elevatorguy 0:d2d9baa1a6d8 5 }
elevatorguy 0:d2d9baa1a6d8 6 InOut& InOut::operator=(bool value)
elevatorguy 0:d2d9baa1a6d8 7 {
elevatorguy 0:d2d9baa1a6d8 8 write(value);
elevatorguy 0:d2d9baa1a6d8 9 return *this;
elevatorguy 0:d2d9baa1a6d8 10 }
elevatorguy 0:d2d9baa1a6d8 11
elevatorguy 0:d2d9baa1a6d8 12 // for the chip pins that the mbed didn't use
elevatorguy 0:d2d9baa1a6d8 13 InOut::InOut(char p, char b, bool output)
elevatorguy 0:d2d9baa1a6d8 14 {
elevatorguy 0:d2d9baa1a6d8 15 port = p;
elevatorguy 0:d2d9baa1a6d8 16 bit = b;
elevatorguy 0:d2d9baa1a6d8 17 setDirection(output);
elevatorguy 0:d2d9baa1a6d8 18 }
elevatorguy 0:d2d9baa1a6d8 19
elevatorguy 0:d2d9baa1a6d8 20 // the constructor takes the mbed pin number and then sets
elevatorguy 0:d2d9baa1a6d8 21 // the port and bit variables
elevatorguy 0:d2d9baa1a6d8 22 InOut::InOut(char mbedpin, bool output)
elevatorguy 0:d2d9baa1a6d8 23 {
elevatorguy 0:d2d9baa1a6d8 24 port = 0;
elevatorguy 0:d2d9baa1a6d8 25 switch(mbedpin)
elevatorguy 0:d2d9baa1a6d8 26 {
elevatorguy 0:d2d9baa1a6d8 27 case LED1:
elevatorguy 0:d2d9baa1a6d8 28 port = 1;
elevatorguy 0:d2d9baa1a6d8 29 bit = 18;
elevatorguy 0:d2d9baa1a6d8 30 break;
elevatorguy 0:d2d9baa1a6d8 31 case LED2:
elevatorguy 0:d2d9baa1a6d8 32 port = 1;
elevatorguy 0:d2d9baa1a6d8 33 bit = 20;
elevatorguy 0:d2d9baa1a6d8 34 break;
elevatorguy 0:d2d9baa1a6d8 35 case LED3:
elevatorguy 0:d2d9baa1a6d8 36 port = 1;
elevatorguy 0:d2d9baa1a6d8 37 bit = 21;
elevatorguy 0:d2d9baa1a6d8 38 break;
elevatorguy 0:d2d9baa1a6d8 39 case LED4:
elevatorguy 0:d2d9baa1a6d8 40 port = 1;
elevatorguy 0:d2d9baa1a6d8 41 bit = 23;
elevatorguy 0:d2d9baa1a6d8 42 break;
elevatorguy 0:d2d9baa1a6d8 43 case 19:
elevatorguy 0:d2d9baa1a6d8 44 port = 1;
elevatorguy 0:d2d9baa1a6d8 45 bit = 30;
elevatorguy 0:d2d9baa1a6d8 46 break;
elevatorguy 0:d2d9baa1a6d8 47 case 20:
elevatorguy 0:d2d9baa1a6d8 48 port = 1;
elevatorguy 0:d2d9baa1a6d8 49 bit = 31;
elevatorguy 0:d2d9baa1a6d8 50 break;
elevatorguy 0:d2d9baa1a6d8 51 case 21:
elevatorguy 0:d2d9baa1a6d8 52 port = 2;
elevatorguy 0:d2d9baa1a6d8 53 bit = 5;
elevatorguy 0:d2d9baa1a6d8 54 break;
elevatorguy 0:d2d9baa1a6d8 55 case 22:
elevatorguy 0:d2d9baa1a6d8 56 port = 2;
elevatorguy 0:d2d9baa1a6d8 57 bit = 4;
elevatorguy 0:d2d9baa1a6d8 58 break;
elevatorguy 0:d2d9baa1a6d8 59 case 23:
elevatorguy 0:d2d9baa1a6d8 60 port = 2;
elevatorguy 0:d2d9baa1a6d8 61 bit = 3;
elevatorguy 0:d2d9baa1a6d8 62 break;
elevatorguy 0:d2d9baa1a6d8 63 case 24:
elevatorguy 0:d2d9baa1a6d8 64 port = 2;
elevatorguy 0:d2d9baa1a6d8 65 bit = 2;
elevatorguy 0:d2d9baa1a6d8 66 break;
elevatorguy 0:d2d9baa1a6d8 67 case 25:
elevatorguy 0:d2d9baa1a6d8 68 port = 2;
elevatorguy 0:d2d9baa1a6d8 69 bit = 1;
elevatorguy 0:d2d9baa1a6d8 70 break;
elevatorguy 0:d2d9baa1a6d8 71 case 26:
elevatorguy 0:d2d9baa1a6d8 72 port = 2;
elevatorguy 0:d2d9baa1a6d8 73 bit = 0;
elevatorguy 0:d2d9baa1a6d8 74 break;
elevatorguy 0:d2d9baa1a6d8 75 case 5:
elevatorguy 0:d2d9baa1a6d8 76 bit = 9;
elevatorguy 0:d2d9baa1a6d8 77 break;
elevatorguy 0:d2d9baa1a6d8 78 case 6:
elevatorguy 0:d2d9baa1a6d8 79 bit = 8;
elevatorguy 0:d2d9baa1a6d8 80 break;
elevatorguy 0:d2d9baa1a6d8 81 case 7:
elevatorguy 0:d2d9baa1a6d8 82 bit = 7;
elevatorguy 0:d2d9baa1a6d8 83 break;
elevatorguy 0:d2d9baa1a6d8 84 case 8:
elevatorguy 0:d2d9baa1a6d8 85 bit = 6;
elevatorguy 0:d2d9baa1a6d8 86 break;
elevatorguy 0:d2d9baa1a6d8 87 case 9:
elevatorguy 0:d2d9baa1a6d8 88 bit = 0;
elevatorguy 0:d2d9baa1a6d8 89 break;
elevatorguy 0:d2d9baa1a6d8 90 case 10:
elevatorguy 0:d2d9baa1a6d8 91 bit = 1;
elevatorguy 0:d2d9baa1a6d8 92 break;
elevatorguy 0:d2d9baa1a6d8 93 case 11:
elevatorguy 0:d2d9baa1a6d8 94 bit = 18;
elevatorguy 0:d2d9baa1a6d8 95 break;
elevatorguy 0:d2d9baa1a6d8 96 case 12:
elevatorguy 0:d2d9baa1a6d8 97 bit = 17;
elevatorguy 0:d2d9baa1a6d8 98 break;
elevatorguy 0:d2d9baa1a6d8 99 case 13:
elevatorguy 0:d2d9baa1a6d8 100 bit = 15;
elevatorguy 0:d2d9baa1a6d8 101 break;
elevatorguy 0:d2d9baa1a6d8 102 case 14:
elevatorguy 0:d2d9baa1a6d8 103 bit = 16;
elevatorguy 0:d2d9baa1a6d8 104 break;
elevatorguy 0:d2d9baa1a6d8 105 case 15:
elevatorguy 0:d2d9baa1a6d8 106 bit = 23;
elevatorguy 0:d2d9baa1a6d8 107 break;
elevatorguy 0:d2d9baa1a6d8 108 case 16:
elevatorguy 0:d2d9baa1a6d8 109 bit = 24;
elevatorguy 0:d2d9baa1a6d8 110 break;
elevatorguy 0:d2d9baa1a6d8 111 case 17:
elevatorguy 0:d2d9baa1a6d8 112 bit = 25;
elevatorguy 0:d2d9baa1a6d8 113 break;
elevatorguy 0:d2d9baa1a6d8 114 case 18:
elevatorguy 0:d2d9baa1a6d8 115 bit = 26;
elevatorguy 0:d2d9baa1a6d8 116 break;
elevatorguy 0:d2d9baa1a6d8 117 case 27:
elevatorguy 0:d2d9baa1a6d8 118 bit = 11;
elevatorguy 0:d2d9baa1a6d8 119 break;
elevatorguy 0:d2d9baa1a6d8 120 case 28:
elevatorguy 0:d2d9baa1a6d8 121 bit = 10;
elevatorguy 0:d2d9baa1a6d8 122 break;
elevatorguy 0:d2d9baa1a6d8 123 case 29:
elevatorguy 0:d2d9baa1a6d8 124 bit = 5;
elevatorguy 0:d2d9baa1a6d8 125 break;
elevatorguy 0:d2d9baa1a6d8 126 case 30:
elevatorguy 0:d2d9baa1a6d8 127 bit = 4;
elevatorguy 0:d2d9baa1a6d8 128 break;
elevatorguy 0:d2d9baa1a6d8 129 default :
elevatorguy 0:d2d9baa1a6d8 130 bit = NULL;
elevatorguy 0:d2d9baa1a6d8 131 //fprintf(stderr, "pin %d is not on Port 0 or a LED\r\n", mbedpin);
elevatorguy 0:d2d9baa1a6d8 132 break;
elevatorguy 0:d2d9baa1a6d8 133 }
elevatorguy 0:d2d9baa1a6d8 134 setDirection(output);
elevatorguy 0:d2d9baa1a6d8 135 }
elevatorguy 0:d2d9baa1a6d8 136
elevatorguy 0:d2d9baa1a6d8 137 void InOut::output()
elevatorguy 0:d2d9baa1a6d8 138 {
elevatorguy 0:d2d9baa1a6d8 139 setDirection(true);
elevatorguy 0:d2d9baa1a6d8 140 }
elevatorguy 0:d2d9baa1a6d8 141
elevatorguy 0:d2d9baa1a6d8 142 void InOut::input()
elevatorguy 0:d2d9baa1a6d8 143 {
elevatorguy 0:d2d9baa1a6d8 144 setDirection(false);
elevatorguy 0:d2d9baa1a6d8 145 }
elevatorguy 0:d2d9baa1a6d8 146
elevatorguy 0:d2d9baa1a6d8 147 void InOut::setDirection(bool output)
elevatorguy 0:d2d9baa1a6d8 148 {
elevatorguy 0:d2d9baa1a6d8 149 if(port==0)
elevatorguy 0:d2d9baa1a6d8 150 {
elevatorguy 0:d2d9baa1a6d8 151 if(output)
elevatorguy 0:d2d9baa1a6d8 152 {
elevatorguy 0:d2d9baa1a6d8 153 LPC_GPIO0->FIODIR |= (1 << bit); //sets pin to Output mode
elevatorguy 0:d2d9baa1a6d8 154 }
elevatorguy 0:d2d9baa1a6d8 155 else
elevatorguy 0:d2d9baa1a6d8 156 {
elevatorguy 0:d2d9baa1a6d8 157 LPC_GPIO0->FIODIR &= ~(1 << bit); //sets pin to Input mode
elevatorguy 0:d2d9baa1a6d8 158 }
elevatorguy 0:d2d9baa1a6d8 159 }
elevatorguy 0:d2d9baa1a6d8 160 else if(port==1)
elevatorguy 0:d2d9baa1a6d8 161 {
elevatorguy 0:d2d9baa1a6d8 162 if(output)
elevatorguy 0:d2d9baa1a6d8 163 {
elevatorguy 0:d2d9baa1a6d8 164 LPC_GPIO1->FIODIR |= (1 << bit); //sets pin to Output mode
elevatorguy 0:d2d9baa1a6d8 165 }
elevatorguy 0:d2d9baa1a6d8 166 else
elevatorguy 0:d2d9baa1a6d8 167 {
elevatorguy 0:d2d9baa1a6d8 168 LPC_GPIO1->FIODIR &= ~(1 << bit); //sets pin to Input mode
elevatorguy 0:d2d9baa1a6d8 169 }
elevatorguy 0:d2d9baa1a6d8 170 }
elevatorguy 0:d2d9baa1a6d8 171 else if(port==2)
elevatorguy 0:d2d9baa1a6d8 172 {
elevatorguy 0:d2d9baa1a6d8 173 if(output)
elevatorguy 0:d2d9baa1a6d8 174 {
elevatorguy 0:d2d9baa1a6d8 175 LPC_GPIO2->FIODIR |= (1 << bit); //sets pin to Output mode
elevatorguy 0:d2d9baa1a6d8 176 }
elevatorguy 0:d2d9baa1a6d8 177 else
elevatorguy 0:d2d9baa1a6d8 178 {
elevatorguy 0:d2d9baa1a6d8 179 LPC_GPIO2->FIODIR &= ~(1 << bit); //sets pin to Input mode
elevatorguy 0:d2d9baa1a6d8 180 }
elevatorguy 0:d2d9baa1a6d8 181 }
elevatorguy 0:d2d9baa1a6d8 182 }
elevatorguy 0:d2d9baa1a6d8 183
elevatorguy 0:d2d9baa1a6d8 184 void InOut::write(bool state)
elevatorguy 0:d2d9baa1a6d8 185 {
elevatorguy 0:d2d9baa1a6d8 186 if(port==0)
elevatorguy 0:d2d9baa1a6d8 187 {
elevatorguy 0:d2d9baa1a6d8 188 if(state)
elevatorguy 0:d2d9baa1a6d8 189 {
elevatorguy 0:d2d9baa1a6d8 190 LPC_GPIO0->FIOPIN |= (1 << bit); //sets pin HIGH
elevatorguy 0:d2d9baa1a6d8 191 }
elevatorguy 0:d2d9baa1a6d8 192 else
elevatorguy 0:d2d9baa1a6d8 193 {
elevatorguy 0:d2d9baa1a6d8 194 LPC_GPIO0->FIOPIN &= ~(1 << bit); //sets pin LOW
elevatorguy 0:d2d9baa1a6d8 195 }
elevatorguy 0:d2d9baa1a6d8 196 }
elevatorguy 0:d2d9baa1a6d8 197 else if(port==1)
elevatorguy 0:d2d9baa1a6d8 198 {
elevatorguy 0:d2d9baa1a6d8 199 if(state)
elevatorguy 0:d2d9baa1a6d8 200 {
elevatorguy 0:d2d9baa1a6d8 201 LPC_GPIO1->FIOPIN |= (1 << bit); //sets pin HIGH
elevatorguy 0:d2d9baa1a6d8 202 }
elevatorguy 0:d2d9baa1a6d8 203 else
elevatorguy 0:d2d9baa1a6d8 204 {
elevatorguy 0:d2d9baa1a6d8 205 LPC_GPIO1->FIOPIN &= ~(1 << bit); //sets pin LOW
elevatorguy 0:d2d9baa1a6d8 206 }
elevatorguy 0:d2d9baa1a6d8 207 }
elevatorguy 0:d2d9baa1a6d8 208 else if(port==2)
elevatorguy 0:d2d9baa1a6d8 209 {
elevatorguy 0:d2d9baa1a6d8 210 if(state)
elevatorguy 0:d2d9baa1a6d8 211 {
elevatorguy 0:d2d9baa1a6d8 212 LPC_GPIO2->FIOPIN |= (1 << bit); //sets pin HIGH
elevatorguy 0:d2d9baa1a6d8 213 }
elevatorguy 0:d2d9baa1a6d8 214 else
elevatorguy 0:d2d9baa1a6d8 215 {
elevatorguy 0:d2d9baa1a6d8 216 LPC_GPIO2->FIOPIN &= ~(1 << bit); //sets pin LOW
elevatorguy 0:d2d9baa1a6d8 217 }
elevatorguy 0:d2d9baa1a6d8 218 }
elevatorguy 0:d2d9baa1a6d8 219 }
elevatorguy 0:d2d9baa1a6d8 220
elevatorguy 0:d2d9baa1a6d8 221 bool InOut::read(void)
elevatorguy 0:d2d9baa1a6d8 222 {
elevatorguy 0:d2d9baa1a6d8 223 if(port==0)
elevatorguy 0:d2d9baa1a6d8 224 {
elevatorguy 0:d2d9baa1a6d8 225 return (LPC_GPIO0->FIOPIN >> bit) & 1; //returns the value of the pin (HIGH or LOW)
elevatorguy 0:d2d9baa1a6d8 226 }
elevatorguy 0:d2d9baa1a6d8 227 else if(port==1)
elevatorguy 0:d2d9baa1a6d8 228 {
elevatorguy 0:d2d9baa1a6d8 229 return (LPC_GPIO1->FIOPIN >> bit) & 1;
elevatorguy 0:d2d9baa1a6d8 230 }
elevatorguy 0:d2d9baa1a6d8 231 else if(port==2)
elevatorguy 0:d2d9baa1a6d8 232 {
elevatorguy 0:d2d9baa1a6d8 233 return (LPC_GPIO2->FIOPIN >> bit) & 1;
elevatorguy 0:d2d9baa1a6d8 234 }
elevatorguy 0:d2d9baa1a6d8 235 // else : SOL
elevatorguy 0:d2d9baa1a6d8 236
elevatorguy 0:d2d9baa1a6d8 237 return 0;
elevatorguy 0:d2d9baa1a6d8 238 }
elevatorguy 0:d2d9baa1a6d8 239
elevatorguy 0:d2d9baa1a6d8 240 void InOut::mode(char mode) // 0 for PullUp, 1 for PullDown and 2 for PullNone
elevatorguy 0:d2d9baa1a6d8 241 {
elevatorguy 0:d2d9baa1a6d8 242 if(port==0)
elevatorguy 0:d2d9baa1a6d8 243 {
elevatorguy 0:d2d9baa1a6d8 244 if(bit < 16)
elevatorguy 0:d2d9baa1a6d8 245 {
elevatorguy 0:d2d9baa1a6d8 246 switch (mode)
elevatorguy 0:d2d9baa1a6d8 247 {
elevatorguy 0:d2d9baa1a6d8 248 case PULLDOWN:
elevatorguy 0:d2d9baa1a6d8 249 LPC_PINCON->PINMODE0 |= (3 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 250 break;
elevatorguy 0:d2d9baa1a6d8 251 case PULLUP:
elevatorguy 0:d2d9baa1a6d8 252 LPC_PINCON->PINMODE0 &= ~(3 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 253 break;
elevatorguy 0:d2d9baa1a6d8 254 case PULLNONE:
elevatorguy 0:d2d9baa1a6d8 255 LPC_PINCON->PINMODE0 |= (1 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 256 LPC_PINCON->PINMODE0 &= ~(1 << ((bit*2)+1));
elevatorguy 0:d2d9baa1a6d8 257 break;
elevatorguy 0:d2d9baa1a6d8 258 case KEEPER:
elevatorguy 0:d2d9baa1a6d8 259 LPC_PINCON->PINMODE0 &= ~(1 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 260 LPC_PINCON->PINMODE0 |= (1 << ((bit*2)+1));
elevatorguy 0:d2d9baa1a6d8 261 break;
elevatorguy 0:d2d9baa1a6d8 262 }
elevatorguy 0:d2d9baa1a6d8 263 }
elevatorguy 0:d2d9baa1a6d8 264 else
elevatorguy 0:d2d9baa1a6d8 265 {
elevatorguy 0:d2d9baa1a6d8 266 switch (mode)
elevatorguy 0:d2d9baa1a6d8 267 {
elevatorguy 0:d2d9baa1a6d8 268 case PULLDOWN:
elevatorguy 0:d2d9baa1a6d8 269 LPC_PINCON->PINMODE1 |= (3 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 270 break;
elevatorguy 0:d2d9baa1a6d8 271 case PULLUP:
elevatorguy 0:d2d9baa1a6d8 272 LPC_PINCON->PINMODE1 &= ~(3 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 273 break;
elevatorguy 0:d2d9baa1a6d8 274 case PULLNONE:
elevatorguy 0:d2d9baa1a6d8 275 LPC_PINCON->PINMODE1 |= (1 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 276 LPC_PINCON->PINMODE1 &= ~(1 << ((2*(bit-16))+1));
elevatorguy 0:d2d9baa1a6d8 277 break;
elevatorguy 0:d2d9baa1a6d8 278 case KEEPER:
elevatorguy 0:d2d9baa1a6d8 279 LPC_PINCON->PINMODE1 &= ~(1 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 280 LPC_PINCON->PINMODE1 |= (1 << ((2*(bit-16))+1));
elevatorguy 0:d2d9baa1a6d8 281 break;
elevatorguy 0:d2d9baa1a6d8 282 }
elevatorguy 0:d2d9baa1a6d8 283 }
elevatorguy 0:d2d9baa1a6d8 284 }
elevatorguy 0:d2d9baa1a6d8 285 else if (port==1)
elevatorguy 0:d2d9baa1a6d8 286 {
elevatorguy 0:d2d9baa1a6d8 287 if(bit < 16)
elevatorguy 0:d2d9baa1a6d8 288 {
elevatorguy 0:d2d9baa1a6d8 289 switch (mode)
elevatorguy 0:d2d9baa1a6d8 290 {
elevatorguy 0:d2d9baa1a6d8 291 case PULLDOWN:
elevatorguy 0:d2d9baa1a6d8 292 LPC_PINCON->PINMODE2 |= (3 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 293 break;
elevatorguy 0:d2d9baa1a6d8 294 case PULLUP:
elevatorguy 0:d2d9baa1a6d8 295 LPC_PINCON->PINMODE2 &= ~(3 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 296 break;
elevatorguy 0:d2d9baa1a6d8 297 case PULLNONE:
elevatorguy 0:d2d9baa1a6d8 298 LPC_PINCON->PINMODE2 |= (1 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 299 LPC_PINCON->PINMODE2 &= ~(1 << ((bit*2)+1));
elevatorguy 0:d2d9baa1a6d8 300 break;
elevatorguy 0:d2d9baa1a6d8 301 case KEEPER:
elevatorguy 0:d2d9baa1a6d8 302 LPC_PINCON->PINMODE2 &= ~(1 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 303 LPC_PINCON->PINMODE2 |= (1 << ((bit*2)+1));
elevatorguy 0:d2d9baa1a6d8 304 break;
elevatorguy 0:d2d9baa1a6d8 305 }
elevatorguy 0:d2d9baa1a6d8 306 }
elevatorguy 0:d2d9baa1a6d8 307 else
elevatorguy 0:d2d9baa1a6d8 308 {
elevatorguy 0:d2d9baa1a6d8 309 switch (mode)
elevatorguy 0:d2d9baa1a6d8 310 {
elevatorguy 0:d2d9baa1a6d8 311 case PULLDOWN:
elevatorguy 0:d2d9baa1a6d8 312 LPC_PINCON->PINMODE3 |= (3 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 313 break;
elevatorguy 0:d2d9baa1a6d8 314 case PULLUP:
elevatorguy 0:d2d9baa1a6d8 315 LPC_PINCON->PINMODE3 &= ~(3 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 316 break;
elevatorguy 0:d2d9baa1a6d8 317 case PULLNONE:
elevatorguy 0:d2d9baa1a6d8 318 LPC_PINCON->PINMODE3 |= (1 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 319 LPC_PINCON->PINMODE3 &= ~(1 << ((2*(bit-16))+1));
elevatorguy 0:d2d9baa1a6d8 320 break;
elevatorguy 0:d2d9baa1a6d8 321 case KEEPER:
elevatorguy 0:d2d9baa1a6d8 322 LPC_PINCON->PINMODE3 &= ~(1 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 323 LPC_PINCON->PINMODE3 |= (1 << ((2*(bit-16))+1));
elevatorguy 0:d2d9baa1a6d8 324 break;
elevatorguy 0:d2d9baa1a6d8 325 }
elevatorguy 0:d2d9baa1a6d8 326 }
elevatorguy 0:d2d9baa1a6d8 327 }
elevatorguy 0:d2d9baa1a6d8 328 else if (port==2)
elevatorguy 0:d2d9baa1a6d8 329 {
elevatorguy 0:d2d9baa1a6d8 330 if(bit < 16)
elevatorguy 0:d2d9baa1a6d8 331 {
elevatorguy 0:d2d9baa1a6d8 332 switch (mode)
elevatorguy 0:d2d9baa1a6d8 333 {
elevatorguy 0:d2d9baa1a6d8 334 case PULLDOWN:
elevatorguy 0:d2d9baa1a6d8 335 LPC_PINCON->PINMODE4 |= (3 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 336 break;
elevatorguy 0:d2d9baa1a6d8 337 case PULLUP:
elevatorguy 0:d2d9baa1a6d8 338 LPC_PINCON->PINMODE4 &= ~(3 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 339 break;
elevatorguy 0:d2d9baa1a6d8 340 case PULLNONE:
elevatorguy 0:d2d9baa1a6d8 341 LPC_PINCON->PINMODE4 |= (1 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 342 LPC_PINCON->PINMODE4 &= ~(1 << ((bit*2)+1));
elevatorguy 0:d2d9baa1a6d8 343 break;
elevatorguy 0:d2d9baa1a6d8 344 case KEEPER:
elevatorguy 0:d2d9baa1a6d8 345 LPC_PINCON->PINMODE4 &= ~(1 << (bit*2));
elevatorguy 0:d2d9baa1a6d8 346 LPC_PINCON->PINMODE4 |= (1 << ((bit*2)+1));
elevatorguy 0:d2d9baa1a6d8 347 break;
elevatorguy 0:d2d9baa1a6d8 348 }
elevatorguy 0:d2d9baa1a6d8 349 }
elevatorguy 0:d2d9baa1a6d8 350 else
elevatorguy 0:d2d9baa1a6d8 351 {
elevatorguy 0:d2d9baa1a6d8 352 switch (mode)
elevatorguy 0:d2d9baa1a6d8 353 {
elevatorguy 0:d2d9baa1a6d8 354 case PULLDOWN:
elevatorguy 0:d2d9baa1a6d8 355 LPC_PINCON->PINMODE5 |= (3 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 356 break;
elevatorguy 0:d2d9baa1a6d8 357 case PULLUP:
elevatorguy 0:d2d9baa1a6d8 358 LPC_PINCON->PINMODE5 &= ~(3 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 359 break;
elevatorguy 0:d2d9baa1a6d8 360 case PULLNONE:
elevatorguy 0:d2d9baa1a6d8 361 LPC_PINCON->PINMODE5 |= (1 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 362 LPC_PINCON->PINMODE5 &= ~(1 << ((2*(bit-16))+1));
elevatorguy 0:d2d9baa1a6d8 363 break;
elevatorguy 0:d2d9baa1a6d8 364 case KEEPER:
elevatorguy 0:d2d9baa1a6d8 365 LPC_PINCON->PINMODE5 &= ~(1 << (2*(bit-16)));
elevatorguy 0:d2d9baa1a6d8 366 LPC_PINCON->PINMODE5 |= (1 << ((2*(bit-16))+1));
elevatorguy 0:d2d9baa1a6d8 367 break;
elevatorguy 0:d2d9baa1a6d8 368 }
elevatorguy 0:d2d9baa1a6d8 369 }
elevatorguy 0:d2d9baa1a6d8 370 }
elevatorguy 0:d2d9baa1a6d8 371 //TODO: check PULLNONE and KEEPER,... it is possible they are backwards
elevatorguy 0:d2d9baa1a6d8 372 }