16 #ifdef __MSP430_HAS_PORT1_R__
21 static const uint16_t GPIO_PORT_TO_BASE[] = {
23 #if defined(__MSP430_HAS_PORT1_R__)
24 __MSP430_BASEADDRESS_PORT1_R__,
25 #elif defined(__MSP430_HAS_PORT1__)
26 __MSP430_BASEADDRESS_PORT1__,
30 #if defined(__MSP430_HAS_PORT2_R__)
31 __MSP430_BASEADDRESS_PORT2_R__,
32 #elif defined(__MSP430_HAS_PORT2__)
33 __MSP430_BASEADDRESS_PORT2__,
37 #if defined(__MSP430_HAS_PORT3_R__)
38 __MSP430_BASEADDRESS_PORT3_R__,
39 #elif defined(__MSP430_HAS_PORT3__)
40 __MSP430_BASEADDRESS_PORT3__,
44 #if defined(__MSP430_HAS_PORT4_R__)
45 __MSP430_BASEADDRESS_PORT4_R__,
46 #elif defined(__MSP430_HAS_PORT4__)
47 __MSP430_BASEADDRESS_PORT4__,
51 #if defined(__MSP430_HAS_PORT5_R__)
52 __MSP430_BASEADDRESS_PORT5_R__,
53 #elif defined(__MSP430_HAS_PORT5__)
54 __MSP430_BASEADDRESS_PORT5__,
58 #if defined(__MSP430_HAS_PORT6_R__)
59 __MSP430_BASEADDRESS_PORT6_R__,
60 #elif defined(__MSP430_HAS_PORT6__)
61 __MSP430_BASEADDRESS_PORT6__,
65 #if defined(__MSP430_HAS_PORT7_R__)
66 __MSP430_BASEADDRESS_PORT7_R__,
67 #elif defined(__MSP430_HAS_PORT7__)
68 __MSP430_BASEADDRESS_PORT7__,
72 #if defined(__MSP430_HAS_PORT8_R__)
73 __MSP430_BASEADDRESS_PORT8_R__,
74 #elif defined(__MSP430_HAS_PORT8__)
75 __MSP430_BASEADDRESS_PORT8__,
79 #if defined(__MSP430_HAS_PORT9_R__)
80 __MSP430_BASEADDRESS_PORT9_R__,
81 #elif defined(__MSP430_HAS_PORT9__)
82 __MSP430_BASEADDRESS_PORT9__,
86 #if defined(__MSP430_HAS_PORT10_R__)
87 __MSP430_BASEADDRESS_PORT10_R__,
88 #elif defined(__MSP430_HAS_PORT10__)
89 __MSP430_BASEADDRESS_PORT10__,
93 #if defined(__MSP430_HAS_PORT11_R__)
94 __MSP430_BASEADDRESS_PORT11_R__,
95 #elif defined(__MSP430_HAS_PORT11__)
96 __MSP430_BASEADDRESS_PORT11__,
101 #if defined(__MSP430_HAS_PORTJ_R__)
102 __MSP430_BASEADDRESS_PORTJ_R__
103 #elif defined(__MSP430_HAS_PORTJ__)
104 __MSP430_BASEADDRESS_PORTJ__
110 void GPIO_setAsOutputPin(uint8_t selectedPort, uint16_t selectedPins) {
112 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
115 if(baseAddress == 0xFFFF) {
121 if((selectedPort & 1) ^ 1) {
125 HWREG16(baseAddress + OFS_PASEL) &= ~selectedPins;
126 HWREG16(baseAddress + OFS_PADIR) |= selectedPins;
131 void GPIO_setAsInputPin(uint8_t selectedPort, uint16_t selectedPins) {
133 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
136 if(baseAddress == 0xFFFF) {
142 if((selectedPort & 1) ^ 1) {
146 HWREG16(baseAddress + OFS_PASEL) &= ~selectedPins;
147 HWREG16(baseAddress + OFS_PADIR) &= ~selectedPins;
148 HWREG16(baseAddress + OFS_PAREN) &= ~selectedPins;
151 void GPIO_setAsPeripheralModuleFunctionOutputPin(uint8_t selectedPort,
152 uint16_t selectedPins
155 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
158 if(baseAddress == 0xFFFF) {
164 if((selectedPort & 1) ^ 1) {
168 HWREG16(baseAddress + OFS_PADIR) |= selectedPins;
169 HWREG16(baseAddress + OFS_PASEL) |= selectedPins;
172 void GPIO_setAsPeripheralModuleFunctionInputPin(uint8_t selectedPort,
173 uint16_t selectedPins
175 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
178 if(baseAddress == 0xFFFF) {
184 if((selectedPort & 1) ^ 1) {
188 HWREG16(baseAddress + OFS_PADIR) &= ~selectedPins;
189 HWREG16(baseAddress + OFS_PASEL) |= selectedPins;
193 uint16_t selectedPins) {
195 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
198 if(baseAddress == 0xFFFF) {
204 if((selectedPort & 1) ^ 1) {
208 HWREG16(baseAddress + OFS_PAOUT) |= selectedPins;
213 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
216 if(baseAddress == 0xFFFF) {
222 if((selectedPort & 1) ^ 1) {
226 HWREG16(baseAddress + OFS_PAOUT) &= ~selectedPins;
229 void GPIO_toggleOutputOnPin (uint8_t selectedPort, uint16_t selectedPins) {
231 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
234 if(baseAddress == 0xFFFF) {
240 if((selectedPort & 1) ^ 1) {
244 HWREG16(baseAddress + OFS_PAOUT) ^= selectedPins;
247 void GPIO_setAsInputPinWithPullDownResistor(uint8_t selectedPort,
248 uint16_t selectedPins) {
250 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
253 if(baseAddress == 0xFFFF) {
259 if((selectedPort & 1) ^ 1) {
263 HWREG16(baseAddress + OFS_PASEL) &= ~selectedPins;
265 HWREG16(baseAddress + OFS_PADIR) &= ~selectedPins;
266 HWREG16(baseAddress + OFS_PAREN) |= selectedPins;
267 HWREG16(baseAddress + OFS_PAOUT) &= ~selectedPins;
270 void GPIO_setAsInputPinWithPullUpResistor(uint8_t selectedPort,
271 uint16_t selectedPins) {
273 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
276 if(baseAddress == 0xFFFF) {
282 if((selectedPort & 1) ^ 1) {
286 HWREG16(baseAddress + OFS_PASEL) &= ~selectedPins;
287 HWREG16(baseAddress + OFS_PADIR) &= ~selectedPins;
288 HWREG16(baseAddress + OFS_PAREN) |= selectedPins;
289 HWREG16(baseAddress + OFS_PAOUT) |= selectedPins;
292 uint8_t GPIO_getInputPinValue(uint8_t selectedPort,
293 uint16_t selectedPins) {
295 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
298 if(baseAddress == 0xFFFF) {
304 if((selectedPort & 1) ^ 1) {
308 uint16_t inputPinValue =
HWREG16(baseAddress + OFS_PAIN) & (selectedPins);
310 if(inputPinValue > 0){
311 return (GPIO_INPUT_PIN_HIGH);
313 return (GPIO_INPUT_PIN_LOW);
316 void GPIO_enableInterrupt(uint8_t selectedPort, uint16_t selectedPins) {
318 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
321 if(baseAddress == 0xFFFF) {
327 if((selectedPort & 1) ^ 1) {
331 HWREG16(baseAddress + OFS_PAIE) |= selectedPins;
334 void GPIO_disableInterrupt(uint8_t selectedPort, uint16_t selectedPins) {
336 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
339 if(baseAddress == 0xFFFF) {
345 if((selectedPort & 1) ^ 1) {
349 HWREG16(baseAddress + OFS_PAIE) &= ~selectedPins;
352 uint16_t GPIO_getInterruptStatus(uint8_t selectedPort, uint16_t selectedPins) {
354 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
357 if(baseAddress == 0xFFFF) {
363 if((selectedPort & 1) ^ 1) {
364 if((baseAddress & 0x1) ^ 0x1)
366 return (
HWREG8(baseAddress + OFS_PAIFG_H) & selectedPins);
370 return (
HWREG8(baseAddress + OFS_PAIFG) & selectedPins);
374 return (
HWREG16(baseAddress + OFS_PAIFG) & selectedPins);
378 void GPIO_clearInterrupt(uint8_t selectedPort, uint16_t selectedPins) {
380 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
383 if(baseAddress == 0xFFFF) {
389 if((selectedPort & 1) ^ 1) {
393 HWREG16(baseAddress + OFS_PAIFG) &= ~selectedPins;
396 void GPIO_selectInterruptEdge(uint8_t selectedPort, uint16_t selectedPins,
397 uint8_t edgeSelect) {
399 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
402 if(baseAddress == 0xFFFF) {
408 if((selectedPort & 1) ^ 1) {
412 if (GPIO_LOW_TO_HIGH_TRANSITION == edgeSelect){
413 HWREG16(baseAddress + OFS_PAIES) &= ~selectedPins;
416 HWREG16(baseAddress + OFS_PAIES) |= selectedPins;
420 void GPIO_setDriveStrength(uint8_t selectedPort, uint16_t selectedPins,
421 uint8_t driveStrength) {
423 uint16_t baseAddress = GPIO_PORT_TO_BASE[selectedPort];
426 if(baseAddress == 0xFFFF) {
432 if((selectedPort & 1) ^ 1) {
436 if(GPIO_REDUCED_OUTPUT_DRIVE_STRENGTH == driveStrength) {
437 HWREG16(baseAddress + OFS_PADS) &= ~selectedPins;
439 HWREG16(baseAddress + OFS_PADS) |= selectedPins;
GPIO_setOutputHighOnPin(GPIO_PORT_LED1|GPIO_PORT_LED2, GPIO_PIN_LED1|GPIO_PIN_LED2)
GPIO_setOutputLowOnPin(GPIO_PORT_LED1|GPIO_PORT_LED2, GPIO_PIN_LED1|GPIO_PIN_LED2)