Library designed as an interface to the mbed Pin Connect Block

Committer:
Blaze513
Date:
Tue Nov 29 05:59:24 2011 +0000
Revision:
2:ab6e423ac150
Parent:
0:1b1cf3daf204
initial release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Blaze513 0:1b1cf3daf204 1 #include "PinConnectBlock.h"
Blaze513 0:1b1cf3daf204 2
Blaze513 0:1b1cf3daf204 3 unsigned char PinConnectBlock::ValidateInput(
Blaze513 0:1b1cf3daf204 4 unsigned char Port, unsigned char Pin, unsigned char Mode)
Blaze513 0:1b1cf3daf204 5 {
Blaze513 0:1b1cf3daf204 6 switch (Port)
Blaze513 0:1b1cf3daf204 7 {
Blaze513 0:1b1cf3daf204 8 case 0:
Blaze513 0:1b1cf3daf204 9 if (Pin < 2)
Blaze513 0:1b1cf3daf204 10 {
Blaze513 0:1b1cf3daf204 11 return 0x00;
Blaze513 0:1b1cf3daf204 12 }
Blaze513 0:1b1cf3daf204 13 if ((Pin > 3) && (Pin < 12))
Blaze513 0:1b1cf3daf204 14 {
Blaze513 0:1b1cf3daf204 15 return 0x00;
Blaze513 0:1b1cf3daf204 16 }
Blaze513 0:1b1cf3daf204 17 if ((Pin > 14) && (Pin < 19))
Blaze513 0:1b1cf3daf204 18 {
Blaze513 0:1b1cf3daf204 19 return 0x00;
Blaze513 0:1b1cf3daf204 20 }
Blaze513 0:1b1cf3daf204 21 if ((Pin > 22) && (Pin < 27))
Blaze513 0:1b1cf3daf204 22 {
Blaze513 0:1b1cf3daf204 23 return 0x00;
Blaze513 0:1b1cf3daf204 24 }
Blaze513 0:1b1cf3daf204 25 if ((Mode & 0x03) != 0x03)
Blaze513 0:1b1cf3daf204 26 {
Blaze513 0:1b1cf3daf204 27 if (Pin < 4)
Blaze513 0:1b1cf3daf204 28 {
Blaze513 0:1b1cf3daf204 29 return 0x00;
Blaze513 0:1b1cf3daf204 30 }
Blaze513 0:1b1cf3daf204 31 if ((Pin > 26) && (Pin < 29) && !(Mode & 0x1C))
Blaze513 0:1b1cf3daf204 32 {
Blaze513 0:1b1cf3daf204 33 return 0x00;
Blaze513 0:1b1cf3daf204 34 }
Blaze513 0:1b1cf3daf204 35 }
Blaze513 0:1b1cf3daf204 36 if ((Pin > 18) && (Pin < 23) && ((Mode & 0x03) != 0x02))
Blaze513 0:1b1cf3daf204 37 {
Blaze513 0:1b1cf3daf204 38 return 0x00;
Blaze513 0:1b1cf3daf204 39 }
Blaze513 0:1b1cf3daf204 40 if ((Pin > 28) && (Pin < 31) && !(Mode & 0x0E))
Blaze513 0:1b1cf3daf204 41 {
Blaze513 0:1b1cf3daf204 42 return 0x00;
Blaze513 0:1b1cf3daf204 43 }
Blaze513 0:1b1cf3daf204 44 if (Pin < 4)
Blaze513 0:1b1cf3daf204 45 {
Blaze513 0:1b1cf3daf204 46 return 0x0C;
Blaze513 0:1b1cf3daf204 47 }
Blaze513 0:1b1cf3daf204 48 if (Pin < 15)
Blaze513 0:1b1cf3daf204 49 {
Blaze513 0:1b1cf3daf204 50 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 51 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 52 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 53 }
Blaze513 0:1b1cf3daf204 54 if (Pin < 23)
Blaze513 0:1b1cf3daf204 55 {
Blaze513 0:1b1cf3daf204 56 return 0x0C;
Blaze513 0:1b1cf3daf204 57 }
Blaze513 0:1b1cf3daf204 58 if (Pin < 29)
Blaze513 0:1b1cf3daf204 59 {
Blaze513 0:1b1cf3daf204 60 return (((Mode & 0x03) == 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 61 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 62 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 63 }
Blaze513 0:1b1cf3daf204 64 if (Pin < 31)
Blaze513 0:1b1cf3daf204 65 {
Blaze513 0:1b1cf3daf204 66 return ((Mode & 0x02) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 67 | ((Mode & 0x0C) ? 0x14 : 0x00);
Blaze513 0:1b1cf3daf204 68 }
Blaze513 0:1b1cf3daf204 69 if (Pin > 30)
Blaze513 0:1b1cf3daf204 70 {
Blaze513 0:1b1cf3daf204 71 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 72 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 73 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 74 }
Blaze513 0:1b1cf3daf204 75 break;
Blaze513 0:1b1cf3daf204 76 case 1:
Blaze513 0:1b1cf3daf204 77 if ((Pin > 17) && (Pin < 25))
Blaze513 0:1b1cf3daf204 78 {
Blaze513 0:1b1cf3daf204 79 return 0x00;
Blaze513 0:1b1cf3daf204 80 }
Blaze513 0:1b1cf3daf204 81 if ((Pin > 25) && (Pin < 30))
Blaze513 0:1b1cf3daf204 82 {
Blaze513 0:1b1cf3daf204 83 return 0x00;
Blaze513 0:1b1cf3daf204 84 }
Blaze513 0:1b1cf3daf204 85 if (!(Mode & 0x02))
Blaze513 0:1b1cf3daf204 86 {
Blaze513 0:1b1cf3daf204 87 if (Pin < 2)
Blaze513 0:1b1cf3daf204 88 {
Blaze513 0:1b1cf3daf204 89 return 0x00;
Blaze513 0:1b1cf3daf204 90 }
Blaze513 0:1b1cf3daf204 91 if (Pin == 4)
Blaze513 0:1b1cf3daf204 92 {
Blaze513 0:1b1cf3daf204 93 return 0x00;
Blaze513 0:1b1cf3daf204 94 }
Blaze513 0:1b1cf3daf204 95 if ((Pin > 7) && (Pin < 11))
Blaze513 0:1b1cf3daf204 96 {
Blaze513 0:1b1cf3daf204 97 return 0x00;
Blaze513 0:1b1cf3daf204 98 }
Blaze513 0:1b1cf3daf204 99 if ((Pin > 13) && (Pin < 18))
Blaze513 0:1b1cf3daf204 100 {
Blaze513 0:1b1cf3daf204 101 return 0x00;
Blaze513 0:1b1cf3daf204 102 }
Blaze513 0:1b1cf3daf204 103 }
Blaze513 0:1b1cf3daf204 104 if ((Pin == 25) && ((Mode & 0x03) != 0x02))
Blaze513 0:1b1cf3daf204 105 {
Blaze513 0:1b1cf3daf204 106 return 0x00;
Blaze513 0:1b1cf3daf204 107 }
Blaze513 0:1b1cf3daf204 108 if ((Pin > 29) && (Pin < 32) && ((Mode & 0x03) != 0x01))
Blaze513 0:1b1cf3daf204 109 {
Blaze513 0:1b1cf3daf204 110 return 0x00;
Blaze513 0:1b1cf3daf204 111 }
Blaze513 0:1b1cf3daf204 112 if (Pin < 2)
Blaze513 0:1b1cf3daf204 113 {
Blaze513 0:1b1cf3daf204 114 return 0x0C;
Blaze513 0:1b1cf3daf204 115 }
Blaze513 0:1b1cf3daf204 116 if (Pin < 4)
Blaze513 0:1b1cf3daf204 117 {
Blaze513 0:1b1cf3daf204 118 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 119 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 120 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 121 }
Blaze513 0:1b1cf3daf204 122 if (Pin == 4)
Blaze513 0:1b1cf3daf204 123 {
Blaze513 0:1b1cf3daf204 124 return 0x0C;
Blaze513 0:1b1cf3daf204 125 }
Blaze513 0:1b1cf3daf204 126 if (Pin < 8)
Blaze513 0:1b1cf3daf204 127 {
Blaze513 0:1b1cf3daf204 128 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 129 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 130 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 131 }
Blaze513 0:1b1cf3daf204 132 if (Pin < 11)
Blaze513 0:1b1cf3daf204 133 {
Blaze513 0:1b1cf3daf204 134 return 0x0C;
Blaze513 0:1b1cf3daf204 135 }
Blaze513 0:1b1cf3daf204 136 if (Pin < 14)
Blaze513 0:1b1cf3daf204 137 {
Blaze513 0:1b1cf3daf204 138 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 139 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 140 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 141 }
Blaze513 0:1b1cf3daf204 142 if (Pin < 18)
Blaze513 0:1b1cf3daf204 143 {
Blaze513 0:1b1cf3daf204 144 return 0x0C;
Blaze513 0:1b1cf3daf204 145 }
Blaze513 0:1b1cf3daf204 146 if ((Pin == 25) && ((Mode & 0x03) == 0x02))
Blaze513 0:1b1cf3daf204 147 {
Blaze513 0:1b1cf3daf204 148 return 0x0C;
Blaze513 0:1b1cf3daf204 149 }
Blaze513 0:1b1cf3daf204 150 if ((Pin > 29) && (Pin < 32) && ((Mode & 0x03) == 0x01))
Blaze513 0:1b1cf3daf204 151 {
Blaze513 0:1b1cf3daf204 152 return 0x0C;
Blaze513 0:1b1cf3daf204 153 }
Blaze513 0:1b1cf3daf204 154 if (Pin > 31)
Blaze513 0:1b1cf3daf204 155 {
Blaze513 0:1b1cf3daf204 156 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 157 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 158 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 159 }
Blaze513 0:1b1cf3daf204 160 break;
Blaze513 0:1b1cf3daf204 161 case 2:
Blaze513 0:1b1cf3daf204 162 if ((Pin > 7) && (Pin < 10))
Blaze513 0:1b1cf3daf204 163 {
Blaze513 0:1b1cf3daf204 164 return 0x00;
Blaze513 0:1b1cf3daf204 165 }
Blaze513 0:1b1cf3daf204 166 if ((Pin < 11) && ((Mode & 0x03) != 0x03))
Blaze513 0:1b1cf3daf204 167 {
Blaze513 0:1b1cf3daf204 168 return 0x00;
Blaze513 0:1b1cf3daf204 169 }
Blaze513 0:1b1cf3daf204 170 if ((Pin > 10) && (Pin < 14) && ((Mode & 0x03) != 0x02))
Blaze513 0:1b1cf3daf204 171 {
Blaze513 0:1b1cf3daf204 172 return 0x00;
Blaze513 0:1b1cf3daf204 173 }
Blaze513 0:1b1cf3daf204 174 if (Pin < 14)
Blaze513 0:1b1cf3daf204 175 {
Blaze513 0:1b1cf3daf204 176 return 0x0C;
Blaze513 0:1b1cf3daf204 177 }
Blaze513 0:1b1cf3daf204 178 if (Pin > 13)
Blaze513 0:1b1cf3daf204 179 {
Blaze513 0:1b1cf3daf204 180 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 181 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 182 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 183 }
Blaze513 0:1b1cf3daf204 184 break;
Blaze513 0:1b1cf3daf204 185 case 3:
Blaze513 0:1b1cf3daf204 186 if (Pin == 26)
Blaze513 0:1b1cf3daf204 187 {
Blaze513 0:1b1cf3daf204 188 return 0x00;
Blaze513 0:1b1cf3daf204 189 }
Blaze513 0:1b1cf3daf204 190 if ((Pin == 25) && ((Mode & 0x03) != 0x01))
Blaze513 0:1b1cf3daf204 191 {
Blaze513 0:1b1cf3daf204 192 return 0x00;
Blaze513 0:1b1cf3daf204 193 }
Blaze513 0:1b1cf3daf204 194 if (Pin < 25)
Blaze513 0:1b1cf3daf204 195 {
Blaze513 0:1b1cf3daf204 196 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 197 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 198 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 199 }
Blaze513 0:1b1cf3daf204 200 if (Pin == 25)
Blaze513 0:1b1cf3daf204 201 {
Blaze513 0:1b1cf3daf204 202 return 0x0C;
Blaze513 0:1b1cf3daf204 203 }
Blaze513 0:1b1cf3daf204 204 if (Pin > 26)
Blaze513 0:1b1cf3daf204 205 {
Blaze513 0:1b1cf3daf204 206 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 207 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 208 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 209 }
Blaze513 0:1b1cf3daf204 210 break;
Blaze513 0:1b1cf3daf204 211 case 4:
Blaze513 0:1b1cf3daf204 212 if ((Pin > 27) && (Pin < 30))
Blaze513 0:1b1cf3daf204 213 {
Blaze513 0:1b1cf3daf204 214 return 0x00;
Blaze513 0:1b1cf3daf204 215 }
Blaze513 0:1b1cf3daf204 216 if (Pin < 28)
Blaze513 0:1b1cf3daf204 217 {
Blaze513 0:1b1cf3daf204 218 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 219 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 220 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 221 }
Blaze513 0:1b1cf3daf204 222 if (Pin > 29)
Blaze513 0:1b1cf3daf204 223 {
Blaze513 0:1b1cf3daf204 224 return 0x02 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 225 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 226 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 227 }
Blaze513 0:1b1cf3daf204 228 break;
Blaze513 0:1b1cf3daf204 229 default:
Blaze513 0:1b1cf3daf204 230 return 0x01 | ((Pin > 31) ? 0x02 : 0x00)
Blaze513 0:1b1cf3daf204 231 | ((Mode & 0x03) ? 0x0C : 0x00)
Blaze513 0:1b1cf3daf204 232 | ((Mode & 0x0C) ? 0x14 : 0x00)
Blaze513 0:1b1cf3daf204 233 | ((Mode & 0x10) ? 0x24 : 0x00);
Blaze513 0:1b1cf3daf204 234 }
Blaze513 0:1b1cf3daf204 235 return 0xFF;
Blaze513 0:1b1cf3daf204 236 }
Blaze513 0:1b1cf3daf204 237
Blaze513 0:1b1cf3daf204 238 void PinConnectBlock::SetPinConnection(
Blaze513 0:1b1cf3daf204 239 unsigned char Port, unsigned char Pin, unsigned char Mode)
Blaze513 0:1b1cf3daf204 240 {
Blaze513 0:1b1cf3daf204 241 if (!((Port == 1) && (Pin < 18) && (Mode & 0x02)))
Blaze513 0:1b1cf3daf204 242 {
Blaze513 0:1b1cf3daf204 243 SetFunctionMode(Port, Pin, Mode & 0x03);
Blaze513 0:1b1cf3daf204 244 }
Blaze513 0:1b1cf3daf204 245 if (!((Port == 0) && (Pin > 26)))
Blaze513 0:1b1cf3daf204 246 {
Blaze513 0:1b1cf3daf204 247 SetResistorMode(Port, Pin, (Mode & 0x0C) >> 2);
Blaze513 0:1b1cf3daf204 248 }
Blaze513 0:1b1cf3daf204 249 if (!((Port == 0) && (Pin > 26) && (Pin < 29)))
Blaze513 0:1b1cf3daf204 250 {
Blaze513 0:1b1cf3daf204 251 SetOpenDrainMode(Port, Pin, Mode & 0x10);
Blaze513 0:1b1cf3daf204 252 }
Blaze513 0:1b1cf3daf204 253 return;
Blaze513 0:1b1cf3daf204 254 }
Blaze513 0:1b1cf3daf204 255
Blaze513 0:1b1cf3daf204 256 unsigned char PinConnectBlock::GetPinConnection(
Blaze513 0:1b1cf3daf204 257 unsigned char Port, unsigned char Pin)
Blaze513 0:1b1cf3daf204 258 {
Blaze513 0:1b1cf3daf204 259 return GetFunctionMode(Port, Pin)
Blaze513 0:1b1cf3daf204 260 | (GetResistorMode(Port, Pin) << 2)
Blaze513 0:1b1cf3daf204 261 | (GetOpenDrainMode(Port, Pin) ? 0x10 : 0x00);
Blaze513 0:1b1cf3daf204 262 }
Blaze513 0:1b1cf3daf204 263
Blaze513 0:1b1cf3daf204 264 void PinConnectBlock::SetFunctionMode(
Blaze513 0:1b1cf3daf204 265 unsigned char Port, unsigned char Pin, unsigned char Mode)
Blaze513 0:1b1cf3daf204 266 {
Blaze513 0:1b1cf3daf204 267 Port *= 2;
Blaze513 0:1b1cf3daf204 268 if (Pin >= 16)
Blaze513 0:1b1cf3daf204 269 {
Blaze513 0:1b1cf3daf204 270 Port++;
Blaze513 0:1b1cf3daf204 271 Pin -= 16;
Blaze513 0:1b1cf3daf204 272 }
Blaze513 0:1b1cf3daf204 273 Pin *= 2;
Blaze513 0:1b1cf3daf204 274 *((unsigned long*)&LPC_PINCON->PINSEL0 + Port)
Blaze513 0:1b1cf3daf204 275 &= ~(0x00000003 << Pin);
Blaze513 0:1b1cf3daf204 276 *((unsigned long*)&LPC_PINCON->PINSEL0 + Port)
Blaze513 0:1b1cf3daf204 277 |= (unsigned long)Mode << Pin;
Blaze513 0:1b1cf3daf204 278 }
Blaze513 0:1b1cf3daf204 279
Blaze513 0:1b1cf3daf204 280 unsigned char PinConnectBlock::GetFunctionMode(
Blaze513 0:1b1cf3daf204 281 unsigned char Port, unsigned char Pin)
Blaze513 0:1b1cf3daf204 282 {
Blaze513 0:1b1cf3daf204 283 Port *= 2;
Blaze513 0:1b1cf3daf204 284 if (Pin >= 16)
Blaze513 0:1b1cf3daf204 285 {
Blaze513 0:1b1cf3daf204 286 Port++;
Blaze513 0:1b1cf3daf204 287 Pin -= 16;
Blaze513 0:1b1cf3daf204 288 }
Blaze513 0:1b1cf3daf204 289 Pin *= 2;
Blaze513 0:1b1cf3daf204 290 return (*((unsigned long*)&LPC_PINCON->PINSEL0 + Port)
Blaze513 0:1b1cf3daf204 291 & (0x00000003 << Pin)) >> Pin;
Blaze513 0:1b1cf3daf204 292 }
Blaze513 0:1b1cf3daf204 293
Blaze513 0:1b1cf3daf204 294 void PinConnectBlock::SetResistorMode(
Blaze513 0:1b1cf3daf204 295 unsigned char Port, unsigned char Pin, unsigned char Mode)
Blaze513 0:1b1cf3daf204 296 {
Blaze513 0:1b1cf3daf204 297 Port *= 2;
Blaze513 0:1b1cf3daf204 298 if (Pin >= 16)
Blaze513 0:1b1cf3daf204 299 {
Blaze513 0:1b1cf3daf204 300 Port++;
Blaze513 0:1b1cf3daf204 301 Pin -= 16;
Blaze513 0:1b1cf3daf204 302 }
Blaze513 0:1b1cf3daf204 303 Pin *= 2;
Blaze513 0:1b1cf3daf204 304 *((unsigned long*)&LPC_PINCON->PINMODE0 + Port)
Blaze513 0:1b1cf3daf204 305 &= ~(0x00000003 << Pin);
Blaze513 0:1b1cf3daf204 306 *((unsigned long*)&LPC_PINCON->PINMODE0 + Port)
Blaze513 0:1b1cf3daf204 307 |= (unsigned long)Mode << Pin;
Blaze513 0:1b1cf3daf204 308 return;
Blaze513 0:1b1cf3daf204 309 }
Blaze513 0:1b1cf3daf204 310
Blaze513 0:1b1cf3daf204 311 unsigned char PinConnectBlock::GetResistorMode(
Blaze513 0:1b1cf3daf204 312 unsigned char Port, unsigned char Pin)
Blaze513 0:1b1cf3daf204 313 {
Blaze513 0:1b1cf3daf204 314 Port *= 2;
Blaze513 0:1b1cf3daf204 315 if (Pin >= 16)
Blaze513 0:1b1cf3daf204 316 {
Blaze513 0:1b1cf3daf204 317 Port++;
Blaze513 0:1b1cf3daf204 318 Pin -= 16;
Blaze513 0:1b1cf3daf204 319 }
Blaze513 0:1b1cf3daf204 320 Pin *= 2;
Blaze513 0:1b1cf3daf204 321 return (*((unsigned long*)&LPC_PINCON->PINMODE0 + Port)
Blaze513 0:1b1cf3daf204 322 & (0x00000003 << Pin)) >> Pin;
Blaze513 0:1b1cf3daf204 323 }
Blaze513 0:1b1cf3daf204 324
Blaze513 0:1b1cf3daf204 325 void PinConnectBlock::SetOpenDrainMode(
Blaze513 0:1b1cf3daf204 326 unsigned char Port, unsigned char Pin, bool Mode)
Blaze513 0:1b1cf3daf204 327 {
Blaze513 0:1b1cf3daf204 328 if (Mode)
Blaze513 0:1b1cf3daf204 329 {
Blaze513 0:1b1cf3daf204 330 *((unsigned long*)&LPC_PINCON->PINMODE_OD0 + Port)
Blaze513 0:1b1cf3daf204 331 |= 0x00000001 << Pin;
Blaze513 0:1b1cf3daf204 332 }
Blaze513 0:1b1cf3daf204 333 else
Blaze513 0:1b1cf3daf204 334 {
Blaze513 0:1b1cf3daf204 335 *((unsigned long*)&LPC_PINCON->PINMODE_OD0 + Port)
Blaze513 0:1b1cf3daf204 336 &= ~(0x00000001 << Pin);
Blaze513 0:1b1cf3daf204 337 }
Blaze513 0:1b1cf3daf204 338 return;
Blaze513 0:1b1cf3daf204 339 }
Blaze513 0:1b1cf3daf204 340
Blaze513 0:1b1cf3daf204 341 bool PinConnectBlock::GetOpenDrainMode(unsigned char Port, unsigned char Pin)
Blaze513 0:1b1cf3daf204 342 {
Blaze513 0:1b1cf3daf204 343 return (*((unsigned long*)&LPC_PINCON->PINMODE_OD0 + Port)
Blaze513 0:1b1cf3daf204 344 & (0x00000001 << Pin)) >> Pin;
Blaze513 0:1b1cf3daf204 345 }
Blaze513 0:1b1cf3daf204 346
Blaze513 0:1b1cf3daf204 347 void PinConnectBlock::SetTraceMode(bool Mode)
Blaze513 0:1b1cf3daf204 348 {
Blaze513 0:1b1cf3daf204 349 if (Mode)
Blaze513 0:1b1cf3daf204 350 {
Blaze513 0:1b1cf3daf204 351 LPC_PINCON->PINSEL10 |= 0x00000008;
Blaze513 0:1b1cf3daf204 352 }
Blaze513 0:1b1cf3daf204 353 else
Blaze513 0:1b1cf3daf204 354 {
Blaze513 0:1b1cf3daf204 355 LPC_PINCON->PINSEL10 &= ~0x00000008;
Blaze513 0:1b1cf3daf204 356 }
Blaze513 0:1b1cf3daf204 357 return;
Blaze513 0:1b1cf3daf204 358 }
Blaze513 0:1b1cf3daf204 359
Blaze513 0:1b1cf3daf204 360 bool PinConnectBlock::GetTraceMode()
Blaze513 0:1b1cf3daf204 361 {
Blaze513 0:1b1cf3daf204 362 return (LPC_PINCON->PINSEL10 & 0x00000008) != 0x00000000;
Blaze513 0:1b1cf3daf204 363 }
Blaze513 0:1b1cf3daf204 364
Blaze513 0:1b1cf3daf204 365 void PinConnectBlock::SetI2C0Mode(unsigned char Mode)
Blaze513 0:1b1cf3daf204 366 {
Blaze513 0:1b1cf3daf204 367
Blaze513 0:1b1cf3daf204 368 if (!(Mode & 0x01))
Blaze513 0:1b1cf3daf204 369 {
Blaze513 0:1b1cf3daf204 370 LPC_PINCON->I2CPADCFG |= 0x0000000A;
Blaze513 0:1b1cf3daf204 371 }
Blaze513 0:1b1cf3daf204 372 else
Blaze513 0:1b1cf3daf204 373 {
Blaze513 0:1b1cf3daf204 374 LPC_PINCON->I2CPADCFG &= ~0x0000000A;
Blaze513 0:1b1cf3daf204 375 }
Blaze513 0:1b1cf3daf204 376 if (Mode & 0x02)
Blaze513 0:1b1cf3daf204 377 {
Blaze513 0:1b1cf3daf204 378 LPC_PINCON->I2CPADCFG |= 0x00000005;
Blaze513 0:1b1cf3daf204 379 }
Blaze513 0:1b1cf3daf204 380 else
Blaze513 0:1b1cf3daf204 381 {
Blaze513 0:1b1cf3daf204 382 LPC_PINCON->I2CPADCFG &= ~0x00000005;
Blaze513 0:1b1cf3daf204 383 }
Blaze513 0:1b1cf3daf204 384 return;
Blaze513 0:1b1cf3daf204 385 }
Blaze513 0:1b1cf3daf204 386
Blaze513 0:1b1cf3daf204 387 unsigned char PinConnectBlock::GetI2C0Mode()
Blaze513 0:1b1cf3daf204 388 {
Blaze513 0:1b1cf3daf204 389 unsigned char Result = 0x00;
Blaze513 0:1b1cf3daf204 390
Blaze513 0:1b1cf3daf204 391 if (!(LPC_PINCON->I2CPADCFG & 0x0000000A))
Blaze513 0:1b1cf3daf204 392 {
Blaze513 0:1b1cf3daf204 393 Result |= 0x01;
Blaze513 0:1b1cf3daf204 394 }
Blaze513 0:1b1cf3daf204 395 else if (!(LPC_PINCON->I2CPADCFG & 0x00000002))
Blaze513 0:1b1cf3daf204 396 {
Blaze513 0:1b1cf3daf204 397 Result |= 0x04;
Blaze513 0:1b1cf3daf204 398 }
Blaze513 0:1b1cf3daf204 399 else if (!(LPC_PINCON->I2CPADCFG & 0x00000008))
Blaze513 0:1b1cf3daf204 400 {
Blaze513 0:1b1cf3daf204 401 Result |= 0x08;
Blaze513 0:1b1cf3daf204 402 }
Blaze513 0:1b1cf3daf204 403 if ((LPC_PINCON->I2CPADCFG & 0x00000005) == 0x00000005)
Blaze513 0:1b1cf3daf204 404 {
Blaze513 0:1b1cf3daf204 405 Result |= 0x02;
Blaze513 0:1b1cf3daf204 406 }
Blaze513 0:1b1cf3daf204 407 else if (LPC_PINCON->I2CPADCFG & 0x00000001)
Blaze513 0:1b1cf3daf204 408 {
Blaze513 0:1b1cf3daf204 409 Result |= 0x10;
Blaze513 0:1b1cf3daf204 410 }
Blaze513 0:1b1cf3daf204 411 else if (LPC_PINCON->I2CPADCFG & 0x00000004)
Blaze513 0:1b1cf3daf204 412 {
Blaze513 0:1b1cf3daf204 413 Result |= 0x20;
Blaze513 0:1b1cf3daf204 414 }
Blaze513 0:1b1cf3daf204 415 return Result;
Blaze513 0:1b1cf3daf204 416 }