summaryrefslogtreecommitdiffstats
path: root/lib/launchpad/pins_energia.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/launchpad/pins_energia.h')
-rw-r--r--lib/launchpad/pins_energia.h270
1 files changed, 270 insertions, 0 deletions
diff --git a/lib/launchpad/pins_energia.h b/lib/launchpad/pins_energia.h
new file mode 100644
index 0000000..d1bdb4b
--- /dev/null
+++ b/lib/launchpad/pins_energia.h
@@ -0,0 +1,270 @@
+/*
+ ************************************************************************
+ * pins_energia.h
+ *
+ * Energia core files for MSP430
+ * Copyright (c) 2012 Robert Wessels. All right reserved.
+ *
+ * Contribution: Rei VILO
+ *
+ ***********************************************************************
+ Derived from:
+ pins_arduino.h - Pin definition functions for Arduino
+ Part of Arduino - http://www.arduino.cc/
+
+ Copyright (c) 2007 David A. Mellis
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+*/
+
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+#ifndef BV
+#define BV(x) (1 << (x))
+#endif
+
+#if defined(__MSP430_HAS_USCI__)
+static const uint8_t SS = 8; /* P2.0 */
+static const uint8_t SCK = 7; /* P1.5 */
+static const uint8_t MOSI = 15; /* P1.7 */
+static const uint8_t MISO = 14; /* P1.6 */
+static const uint8_t TWISDA = 14; /* P1.6 */
+static const uint8_t TWISCL = 15; /* P1.7 */
+static const uint8_t UARTRXD = 3; /* Receive Data (RXD) at P1.1 */
+static const uint8_t UARTTXD = 4; /* Transmit Data (TXD) at P1.2 */
+#define TWISDA_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1 /* | INPUT_PULLUP*/) /* do not enable the pull ups for this device */
+#define TWISCL_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1 /* | INPUT_PULLUP*/)
+#define UARTRXD_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1 | INPUT)
+#define UARTTXD_SET_MODE (PORT_SELECTION0 | PORT_SELECTION1 | OUTPUT)
+#endif
+
+#if defined(__MSP430_HAS_USI__)
+static const uint8_t SS = 8; /* P2.0 */
+static const uint8_t SCK = 7; /* P1.5 */
+static const uint8_t MOSI = 14; /* P1.6 */
+static const uint8_t MISO = 15; /* P1.7 */
+static const uint8_t TWISDA = 14; /* P1.7 */
+static const uint8_t TWISCL = 15; /* P1.6 */
+static const uint8_t UARTRXD = 4; /* Receive Data (RXD) at P1.2 */
+static const uint8_t UARTTXD = 3; /* Transmit Data (TXD) at P1.1 */
+#define TWISDA_SET_MODE (PORT_SELECTION0 | INPUT_PULLUP)
+#define TWISCL_SET_MODE (PORT_SELECTION0 | INPUT_PULLUP)
+#define UARTRXD_SET_MODE (PORT_SELECTION0 | INPUT)
+#define UARTTXD_SET_MODE (PORT_SELECTION0 | OUTPUT)
+#endif
+
+static const uint8_t A0 = 0;
+static const uint8_t A1 = 1;
+static const uint8_t A2 = 2;
+static const uint8_t A3 = 3;
+static const uint8_t A4 = 4;
+static const uint8_t A5 = 5;
+static const uint8_t A6 = 6;
+static const uint8_t A7 = 7;
+static const uint8_t A10 = 10; // special. This is the internal temp sensor
+
+// +-\/-+
+// VCC 1| |20 GND
+// (A0) P1.0 2| |19 XIN
+// (A1) P1.1 3| |18 XOUT
+// (A2) P1.2 4| |17 TEST
+// (A3) P1.3 5| |16 RST#
+// (A4) P1.4 6| |15 P1.7 (A7) (SCL) (MISO) depends on chip
+// (A5) P1.5 7| |14 P1.6 (A6) (SDA) (MOSI)
+// P2.0 8| |13 P2.5
+// P2.1 9| |12 P2.4
+// P2.2 10| |11 P2.3
+// +----+
+//
+
+// Pin names based on the silkscreen
+//
+static const uint8_t P1_0 = 2;
+static const uint8_t P1_1 = 3;
+static const uint8_t P1_2 = 4;
+static const uint8_t P1_3 = 5;
+static const uint8_t P1_4 = 6;
+static const uint8_t P1_5 = 7;
+static const uint8_t P2_0 = 8;
+static const uint8_t P2_1 = 9;
+static const uint8_t P2_2 = 10;
+static const uint8_t P2_3 = 11;
+static const uint8_t P2_4 = 12;
+static const uint8_t P2_5 = 13;
+static const uint8_t P1_6 = 14;
+static const uint8_t P1_7 = 15;
+static const uint8_t P2_7 = 18;
+static const uint8_t P2_6 = 19;
+
+static const uint8_t RED_LED = 2;
+static const uint8_t GREEN_LED = 14;
+static const uint8_t PUSH2 = 5;
+static const uint8_t TEMPSENSOR = 10; // depends on chip
+
+
+#ifdef ARDUINO_MAIN
+
+const uint16_t port_to_input[] = {
+ NOT_A_PORT,
+ (uint16_t) &P1IN,
+ (uint16_t) &P2IN,
+#ifdef __MSP430_HAS_PORT3_R__
+ (uint16_t) &P3IN,
+#endif
+};
+
+const uint16_t port_to_output[] = {
+ NOT_A_PORT,
+ (uint16_t) &P1OUT,
+ (uint16_t) &P2OUT,
+#ifdef __MSP430_HAS_PORT3_R__
+ (uint16_t) &P3OUT,
+#endif
+};
+
+const uint16_t port_to_dir[] = {
+ NOT_A_PORT,
+ (uint16_t) &P1DIR,
+ (uint16_t) &P2DIR,
+#ifdef __MSP430_HAS_PORT3_R__
+ (uint16_t) &P3DIR,
+#endif
+};
+
+const uint16_t port_to_ren[] = {
+ NOT_A_PORT,
+ (uint16_t) &P1REN,
+ (uint16_t) &P2REN,
+#ifdef __MSP430_HAS_PORT3_R__
+ (uint16_t) &P3REN,
+#endif
+};
+
+const uint16_t port_to_sel0[] = { /* put this PxSEL register under the group of PxSEL0 */
+ NOT_A_PORT,
+ (uint16_t) &P1SEL,
+ (uint16_t) &P2SEL,
+#ifdef __MSP430_HAS_PORT3_R__
+ (uint16_t) &P3SEL,
+#endif
+};
+
+const uint16_t port_to_sel2[] = {
+ NOT_A_PORT,
+#ifdef P1SEL2_
+ (uint16_t) &P1SEL2,
+#else
+ NOT_A_PORT,
+#endif
+#ifdef P2SEL2_
+ (uint16_t) &P2SEL2,
+#else
+ NOT_A_PORT,
+#endif
+#ifdef P3SEL2_
+ (uint16_t) &P3SEL2,
+#else
+ NOT_A_PORT,
+#endif
+};
+
+
+/*
+ * Defines for devices with 2x TA3 timers (e.g. MSP430g2553). On the 20pin devices, upto 3 analog outputs are available
+ * T0A1, T1A1 and T1A2
+ */
+const uint8_t digital_pin_to_timer[] = {
+ NOT_ON_TIMER, /* dummy */
+ NOT_ON_TIMER, /* 1 - VCC */
+ NOT_ON_TIMER, /* 2 - P1.0 */
+ T0A0, /* 3 - P1.1, note: A0 output cannot be used with analogWrite */
+ T0A1, /* 4 - P1.2 */
+ NOT_ON_TIMER, /* 5 - P1.3 */
+ NOT_ON_TIMER, /* 6 - P1.4 note: special case. Leaving as no timer due to difficulty determining if available */
+ T0A0, /* 7 - P1.5 note: A0 output cannot be used with analogWrite */
+#if defined(__MSP430_HAS_T1A3__)
+ T1A0, /* 8 - P2.0 note: A0 output cannot be used with analogWrite */
+ T1A1, /* 9 - P2.1 */
+ T1A1, /* 10 - P2.2 */
+ T1A0, /* 11 - P2.3 note: A0 output cannot be used with analogWrite */
+ T1A2, /* 12 - P2.4 */
+ T1A2, /* 13 - P2.5 */
+#else
+ NOT_ON_TIMER, /* 8 - P2.0 */
+ NOT_ON_TIMER, /* 9 - P2.1 */
+ NOT_ON_TIMER, /* 10 - P2.3 */
+ NOT_ON_TIMER, /* 11 - P2.4 */
+ NOT_ON_TIMER, /* 12 - P2.5 */
+ NOT_ON_TIMER, /* 13 - P2.6 */
+#endif
+ T0A1, /* 14 - P1.6 */
+ NOT_ON_TIMER, /* 15 - P1.7 */
+ NOT_ON_TIMER, /* 16 - /RESET */
+ NOT_ON_TIMER, /* 17 - TEST */
+ NOT_ON_TIMER, /* 18 - XOUT - P2.7 */
+ T0A1, /* 19 - XIN - P2.6: */
+ NOT_ON_TIMER, /* 20 - GND */
+};
+
+const uint8_t digital_pin_to_port[] = {
+ NOT_A_PIN, /* dummy */
+ NOT_A_PIN, /* 1 */
+ P1, /* 2 */
+ P1, /* 3 */
+ P1, /* 4 */
+ P1, /* 5 */
+ P1, /* 6 */
+ P1, /* 7 */
+ P2, /* 8 */
+ P2, /* 9 */
+ P2, /* 10 */
+ P2, /* 11 */
+ P2, /* 12 */
+ P2, /* 13 */
+ P1, /* 14 */
+ P1, /* 15 */
+ NOT_A_PIN, /* 16 */
+ NOT_A_PIN, /* 17 */
+ P2, /* 18 */
+ P2, /* 19 */
+ NOT_A_PIN, /* 20 */
+};
+
+const uint8_t digital_pin_to_bit_mask[] = {
+ NOT_A_PIN, /* 0, pin count starts at 1 */
+ NOT_A_PIN, /* 1, VCC */
+ BV(0), /* 2, port P1.0 */
+ BV(1), /* 3, port P1.1 */
+ BV(2), /* 4, port P1.2 */
+ BV(3), /* 5, port P1.3*/
+ BV(4), /* 6, port P1.4 */
+ BV(5), /* 7, port P1.5 */
+ BV(0), /* 8, port P2.0 */
+ BV(1), /* 9, port P2.1 */
+ BV(2), /* 10, port P2.2 */
+ BV(3), /* 11, port P2.3 */
+ BV(4), /* 12, port P2.4 */
+ BV(5), /* 13, port P2.5 */
+ BV(6), /* 14, port P1.6 */
+ BV(7), /* 15, port P1.7 */
+ NOT_A_PIN, /* 16, RST */
+ NOT_A_PIN, /* 17, TEST */
+ BV(7), /* 18, XOUT */
+ BV(6), /* 19, XIN */
+ NOT_A_PIN, /* 20, GND */
+};
+#endif
+#endif