107 lines
2.2 KiB
C
Raw Permalink Normal View History

2016-09-18 15:51:12 +02:00
/*
* gpio.c
*
* Created on: 29.08.2016
* Author: wn
*/
#include <msp430g2553.h>
#include <stdint.h>
#define GPIO_C
#include "gpio.h"
#undef GPIO_C
extern tPinCfg pinCfg[];
void gpioInitPins() {
P1OUT = 0;
P1DIR = 0;
P1REN = 0;
P2OUT = 0;
P2DIR = 0;
P2REN = 0;
for (tPin p = PINS_FIRST; p < PINS_END; p += 1) {
tPinCfg pin = pinCfg[p];
if (pin.portId == PORT1) {
if (pin.direction == PIN_OUT) {
P1DIR |= pin.bit;
P1SEL &= ~pin.bit;
P1SEL2 &= ~pin.bit;
gpioSetPin(p, pin.defaultOut);
} else if (pin.direction == PIN_IN) {
P1DIR &= ~pin.bit;
P1SEL &= ~pin.bit;
P1SEL2 &= ~pin.bit;
P1REN &= ~pin.bit;
} else if (pin.direction == PIN_IN_PULLUP) {
P1DIR &= ~pin.bit;
P1SEL &= ~pin.bit;
P1SEL2 &= ~pin.bit;
P1REN |= pin.bit;
P1OUT |= pin.bit;
}
} else if (pin.portId == PORT2) {
if (pin.direction == PIN_OUT) {
P2DIR |= pin.bit;
P2SEL &= ~pin.bit;
P2SEL2 &= ~pin.bit;
gpioSetPin(p, pin.defaultOut);
} else if (pin.direction == PIN_IN) {
P2DIR &= ~pin.bit;
P2SEL &= ~pin.bit;
P2SEL2 &= ~pin.bit;
P2REN &= ~pin.bit;
} else if (pin.direction == PIN_IN_PULLUP) {
P2DIR &= ~pin.bit;
P2SEL &= ~pin.bit;
P2SEL2 &= ~pin.bit;
P2REN |= pin.bit;
P2OUT |= pin.bit;
}
}
}
}
void gpioSetPin(tPin p, tPinState v) {
tPinCfg pin = pinCfg[p];
if (v == HIGH) {
if (pin.portId == PORT1) {
P1OUT |= pin.bit;
} else if (pin.portId == PORT2) {
P2OUT |= pin.bit;
}
} else {
if (pin.portId == PORT1) {
P1OUT &= ~pin.bit;
} else if (pin.portId == PORT2) {
P2OUT &= ~pin.bit;
}
}
}
void gpioTogglePin(tPin p) {
tPinCfg pin = pinCfg[p];
if (pin.portId == PORT1) {
P1OUT ^= pin.bit;
} else if (pin.portId == PORT2) {
P2OUT ^= pin.bit;
}
}
tPinState gpioGetPin(tPin p) {
tPinCfg pin = pinCfg[p];
uint16_t pinValue = 0;
if (pin.portId == PORT1) {
pinValue = P1IN;
} else if (pin.portId == PORT2) {
pinValue = P2IN;
}
return (pinValue & pin.bit) ? HIGH : LOW;
}