diff --git a/Telem_Debug/Debug_RS-232/.ccsproject b/Telem_Debug/Debug_RS-232/.ccsproject
new file mode 100644
index 0000000..799e765
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/.ccsproject
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Telem_Debug/Debug_RS-232/.cproject b/Telem_Debug/Debug_RS-232/.cproject
new file mode 100644
index 0000000..4e95f5f
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/.cproject
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Telem_Debug/Debug_RS-232/.gitignore b/Telem_Debug/Debug_RS-232/.gitignore
new file mode 100644
index 0000000..3df573f
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/.gitignore
@@ -0,0 +1 @@
+/Debug/
diff --git a/Telem_Debug/Debug_RS-232/.project b/Telem_Debug/Debug_RS-232/.project
new file mode 100644
index 0000000..2738d61
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/.project
@@ -0,0 +1,27 @@
+
+
+ Debug_RS-232
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ com.ti.ccstudio.core.ccsNature
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.core.ccnature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
diff --git a/Telem_Debug/Debug_RS-232/.settings/org.eclipse.cdt.codan.core.prefs b/Telem_Debug/Debug_RS-232/.settings/org.eclipse.cdt.codan.core.prefs
new file mode 100644
index 0000000..f653028
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/.settings/org.eclipse.cdt.codan.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+inEditor=false
+onBuild=false
diff --git a/Telem_Debug/Debug_RS-232/.settings/org.eclipse.cdt.debug.core.prefs b/Telem_Debug/Debug_RS-232/.settings/org.eclipse.cdt.debug.core.prefs
new file mode 100644
index 0000000..2adc7b1
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/.settings/org.eclipse.cdt.debug.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.cdt.debug.core.toggleBreakpointModel=com.ti.ccstudio.debug.CCSBreakpointMarker
diff --git a/Telem_Debug/Debug_RS-232/.settings/org.eclipse.core.resources.prefs b/Telem_Debug/Debug_RS-232/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..7c051cc
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//Debug/makefile=UTF-8
+encoding//Debug/objects.mk=UTF-8
+encoding//Debug/sources.mk=UTF-8
+encoding//Debug/subdir_rules.mk=UTF-8
+encoding//Debug/subdir_vars.mk=UTF-8
diff --git a/Telem_Debug/Debug_RS-232/SunseekerTelemetry2021.h b/Telem_Debug/Debug_RS-232/SunseekerTelemetry2021.h
new file mode 100644
index 0000000..3fb6e61
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/SunseekerTelemetry2021.h
@@ -0,0 +1,356 @@
+/*
+ * Sunseeker Telemetry 2021
+ *
+ * Main CLK : MCLK = XT2 = 20 MHz
+ * Sub-Main CLK : SMCLK = XT2/2 = 10 MHz
+ * Aux CLK : ACLK = XT1 = 32.768 kHz
+ *
+ */
+
+#ifndef SUNSEEKERTELEMETRY2021_H_
+#define SUNSEEKERTELEMETRY2021_H_
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+void clock_init(void);
+
+static inline void delay(void){
+ volatile int jj;
+ volatile int ii;
+ // Using count-down since it uses one less instruction to compare (not really necessary here, but CCS recommends it anyway): Ultra-Low Power Advisor > Rule 13.1 (https://software-dl.ti.com/ccs/esd/documents/dmed/HTML/MSP430/1544.html)
+ for (ii = 4; ii > 0; ii--){
+ for (jj = 1000; jj > 0; jj--){
+ _NOP();
+ }
+ }
+}
+
+static inline void delayMultiplied(int multiplier){
+ volatile int jj;
+ volatile int ii;
+ // Using count-down since it uses one less instruction to compare (not really necessary here, but CCS recommends it anyway): Ultra-Low Power Advisor > Rule 13.1 (https://software-dl.ti.com/ccs/esd/documents/dmed/HTML/MSP430/1544.html)
+ for (ii = 4 * multiplier; ii > 0; ii--){
+ for (jj = 1000; jj > 0; jj--){
+ _NOP();
+ }
+ }
+}
+
+// Event timing
+#define SMCLK_RATE 10000000 // Hz
+#define ACLK_RATE 32768 // Hz
+#define TICK_RATE 16 // Hz
+#define TELEM_STATUS_COUNT 16 // Number of ticks per event: 5 sec
+#define HS_COMMS_SPEED 16*5 // Number of ticks per event: 5 sec
+#define LS_COMMS_SPEED 16*10 // Number of ticks per event: 15 sec
+#define ST_COMMS_SPEED 16*20 // Number of ticks per event: 60 sec
+
+// Constant Definitions
+#define TRUE 1
+#define FALSE 0
+
+/******************** Pin Definitions *************************/
+
+// PORT 1
+#define P10 0x01
+#define P11 0x02
+#define P12 0x04
+#define P13 0x08
+#define P14 0x10
+#define P15 0x20
+#define RTC_MFP 0x40
+#define IMU_INTn 0x80
+#define P1_UNUSED 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20
+
+// PORT 2
+#define CAN0_INTn 0x01
+#define CAN0_RXB0n 0x02
+#define CAN0_RXB1n 0x04
+#define CAN1_INTn 0x08
+#define CAN1_RXB0n 0x10
+#define CAN1_RXB1n 0x20
+#define GPS_INTn 0x40
+#define P27 0x80
+#define P2_UNUSED 0x80
+
+// PORT 3
+#define CAN0_SCLK 0x01
+#define SDC_MOSI 0x02
+#define SDC_MISO 0x04
+#define SDC_SCLK 0x08
+#define CAN0_MOSI 0x10
+#define CAN0_MISO 0x20
+#define CAN1_SCLK 0x40
+#define IMU_SDA 0x80
+#define P3_UNUSED 0x00
+
+// PORT 4
+#define CAN0_RSTn 0x01
+#define CAN0_CSn 0x02
+#define CAN1_RSTn 0x04
+#define CAN1_CSn 0x08
+#define SDC_WPn 0x10
+#define SDC_CDn 0x20
+#define P46 0x40
+#define P47 0x80
+#define P4_UNUSED 0x40 | 0x80
+
+// PORT 5
+#define P50 0x01
+#define P51 0x02
+#define XT2IN 0x04
+#define XT2OUT 0x08
+#define IMU_SCL 0x10
+#define P55 0x20
+#define CAN1_MOSI 0x40
+#define CAN1_MISO 0x80
+#define P5_UNUSED 0x01 | 0x02 | 0x20
+
+// PORT 6
+#define P60 0x01
+#define P61 0x02
+#define P62 0x04
+#define P63 0x08
+#define P64 0x10
+#define P65 0x20
+#define P66 0x40
+#define P67 0x80
+#define P6_UNUSED 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80
+
+// PORT 7
+#define XT1IN 0x01
+#define XT1OUT 0x02
+#define P72 0x04
+#define P73 0x08
+#define P74 0x10
+#define P75 0x20
+#define P76 0x40
+#define P77 0x80
+#define P7_UNUSED 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80
+
+// PORT 8
+#define P80 0x01
+#define P81 0x02
+#define P82 0x04
+#define LEDG 0x08
+#define LEDR 0x10
+#define LEDY0 0x20
+#define LEDY1 0x40
+#define Button0 0x80
+#define P8_UNUSED 0x01 | 0x02 | 0x04
+
+// PORT 9
+#define P90 0x01
+#define RTC_SDA 0x02
+#define RTC_SCL 0x04
+#define P93 0x08
+#define USB_TX 0x10
+#define USB_RX 0x20
+#define SDC_CSn 0x40
+#define GPS_CSn 0x80
+#define P9_UNUSED 0x01 | 0x08
+
+// PORT 10
+#define BT_CSn 0x01
+#define BT_MOSI 0x02
+#define BT_MISO 0x04
+#define BT_SCLK 0x08
+#define UART_TX 0x10
+#define UART_RX 0x20
+#define BT_EN 0x40
+#define P107 0x80
+#define P10_UNUSED 0x80
+
+// PORT 11
+#define ACLK_TEST 0x01
+#define MCLK_TEST 0x02
+#define SMCLK_TEST 0x04
+
+// PORT J
+#define JTAG_TDO 0x01
+#define JTAG_TDI 0x02
+#define JTAG_TMS 0x04
+#define JTAG_TCK 0x08
+
+// Transmit Packet Info
+#define HF_MSG_PACKET 10 //number of messages per packet in high frequency
+#define LF_MSG_PACKET 0 //number of messages per packet in low frequency
+#define ST_MSG_PACKET 0 //number of messages that we receive and don't send out
+#define No_MSG_PACKET 38 //number of messages that we receive and don't send out
+#define LOOKUP_ROWS HF_MSG_PACKET+LF_MSG_PACKET+ST_MSG_PACKET+No_MSG_PACKET
+#define NAME_LOOKUP_ROWS LOOKUP_ROWS
+//#define TIME_SIZE 30 //number of characters in time
+#define MSG_SIZE 30 //number of characters in single message
+
+// Motor controller CAN base address and packet offsets
+#define MC_CAN_BASE1 0x400 // High = CAN1_SERIAL Number Low = 0x00004003 P=1s
+#define MC_CAN_BASE2 0x420 // High = CAN1_SERIAL Number Low = 0x00004003 P=1s
+#define MC_LIMITS 0x01 // High = CAN_Err,Active Motor Low = Error & Limit flags P=200ms
+#define MC_BUS 0x02 // High = Bus Current Low = Bus Voltage P=200ms
+#define MC_VELOCITY 0x03 // High = Velocity (m/s) Low = Velocity (rpm) P=200ms
+#define MC_PHASE 0x04 // High = Phase C Current Low = Phase B Current P=200ms
+#define MC_V_VECTOR 0x05 // High = Vd vector Low = Vq vector P=200ms
+#define MC_I_VECTOR 0x06 // High = Id vector Low = Iq vector P=200ms
+#define MC_BEMF_VECTOR 0x07 // High = BEMFd vector Low = BEMFq vector P=200ms
+#define MC_RAIL1 0x08 // High = 15V Low = Reserved P=1s
+#define MC_RAIL2 0x09 // High = 3.3V Low = 1.9V P=1s
+//#define MC_FAN 0x0A // High = Reserved Low = Reserved P=
+#define MC_TEMP1 0x0B // High = Heatsink Temp (case) Low = Motor Temp (internal) P=1s
+#define MC_TEMP2 0x0C // High = Reserved Low = DSP Temp P=1s
+//#define MC_TEMP3 0x0D // High = Outlet Temp Low = Capacitor Temp P=
+#define MC_CUMULATIVE 0x0E // High = DC Bus AmpHours (A-Hr) Low = Odometer (m) P=1s
+#define MC_SLIPSPEED 0x17 // High = Slip Speed (Hz ) Low = Reserved P=200ms
+
+// Driver controls CAN base address and packet offsets
+#define DC_CAN_BASE 0x500 // High = CAN1_SERIAL Number Low = "TRIb" string P=1s
+#define DC_DRIVE 0x01 // High = Motor Current Setpoint Low = Motor Velocity Setpoint P=100ms
+#define DC_POWER 0x02 // High = Bus Current Setpoint Low = Unused P=100ms
+#define DC_RESET 0x03 // High = Unused Low = Unused P=
+#define DC_SWITCH 0x04 // High = Switch position Low = Switch state change P=100ms
+
+//Battery Protection System base address and packet offsets
+#define BP_CAN_BASE 0x580 // High = "BPV1" string or nulls Low = CAN1_SERIAL Number P=10s
+#define BP_VMAX 0x01 // High = Max. Voltage Value Low = Max. Voltage Cell Num. P=10s
+#define BP_VMIN 0x02 // High = Min. Voltage Value Low = Min. Voltage Cell Num. P=10s
+#define BP_TMAX 0x03 // High = Max. Temperature Low = Max. Temperature Cell P=10s
+#define BP_PCDONE 0x04 // High = "BPV2" or "0000" string Low = CAN1_SERIAL Number P=When Ready
+#define BP_ISH 0x05 // High = Shunt Current Low = Battery Voltage P=1s
+
+//Battery Protection System base address and packet offsets
+#define AC_CAN_BASE 0x5C0 // High = "ACV1" string or nulls Low = CAN1_SERIAL Number P=10s
+#define AC_M1 0x01 // High = Array Voltage Average Low = Array Current Average P=10s
+#define AC_M2 0x02 // High = Array Voltage Average Low = Array Current Average P=10s
+#define AC_M3 0x03 // High = Array Voltage Average Low = Array Current Average P=10s
+#define AC_ISH 0x04 // High = Shunt Current Low = Battery Voltage P=1s
+#define AC_TMAX 0x05 // High = Max. Temperature Low = Max. Temperature MPPT P=10s
+#define AC_TVAL1 0x06 // High = Temp AC1 Low = Temp AC2 P=10s
+#define AC_TVAL2 0x06 // High = Temp AC3 Low = Reserved P=10s
+#define AC_BP_CHARGE 0x07 // High = "ACV1" or "0000" string Low = CAN1_SERIAL Number P=When Charge
+
+static int addr_lookup[LOOKUP_ROWS][5] = {
+ //address ASCII Offset MSG_REC position Packet(0-HF:1-LF:2-Status) Filter Priority
+ {MC_CAN_BASE1, 0, 0x0001, 3, 29}, //0-0x400 High = CAN1_SERIAL Number Low = "TRIa" string
+ {MC_CAN_BASE1 + MC_LIMITS, 0, 0x0001, 3, 15}, //1-0x01 High = Active Motor Low = Error & Limit flags
+ {MC_CAN_BASE1 + MC_BUS, 0, 0x0002, 0, 1}, //2-0x02 High = Bus Current Low = Bus Voltage
+ {MC_CAN_BASE1 + MC_VELOCITY, 1, 0x0004, 0, 2}, //3-0x03 High = Velocity (m/s) Low = Velocity (rpm)
+ {MC_CAN_BASE1 + MC_PHASE, 1, 0x0001, 3, 30}, //4-0x04 High = Phase A Current Low = Phase B Current
+ {MC_CAN_BASE1 + MC_V_VECTOR, 2, 0x0002, 3, 31}, //5-0x05 High = Vd vector Low = Vq vector
+ {MC_CAN_BASE1 + MC_I_VECTOR, 3, 0x0004, 3, 32}, //6-0x06 High = Id vector Low = Iq vector
+ {MC_CAN_BASE1 + MC_BEMF_VECTOR, 4, 0x0008, 3, 33}, //7-0x07 High = BEMFd vector Low = BEMFq vector
+ {MC_CAN_BASE1 + MC_RAIL1, 1, 0x0002, 3, 16}, //8-0x08 High = 15V Low = Reserved
+ {MC_CAN_BASE1 + MC_RAIL2, 2, 0x0004, 3, 17}, //9-0x09 High = 3.3V Low = 1.9V
+ {MC_CAN_BASE1 + MC_TEMP1, 0, 0x0001, 3, 7}, //10-0x0B High = Heatsink Temp Low = Motor Temp
+ {MC_CAN_BASE1 + MC_TEMP2, 1, 0x0002, 3, 8}, //11-0x0C High = Inlet Temp Low = CPU Temp
+ {MC_CAN_BASE1 + MC_CUMULATIVE, 3, 0x0008, 3, 18}, //12-x0E High = DC Bus AmpHours Low = Odometer
+ {MC_CAN_BASE1 + MC_SLIPSPEED, 5, 0x0010, 3, 34}, //13-0x17 High =Slip Speed (Hz) Low = Reserved
+ {MC_CAN_BASE2, 6, 0x0020, 3, 35}, //14-0x420 High = CAN1_SERIAL Number Low = "TRIa" string
+ {MC_CAN_BASE2 + MC_LIMITS, 4, 0x0010, 3, 19}, //15-0x01 High = Active Motor Low = Error & Limit flags
+ {MC_CAN_BASE2 + MC_BUS, 2, 0x0010, 0, 3}, //16-0x02 High = Bus Current Low = Bus Voltage
+ {MC_CAN_BASE2 + MC_VELOCITY, 3, 0x0020, 0, 4}, //17-0x03 High = Velocity (m/s) Low = Velocity (rpm)
+ {MC_CAN_BASE2 + MC_PHASE, 7, 0x0040, 3, 36}, //18-0x04 High = Phase A Current Low = Phase B Current
+ {MC_CAN_BASE2 + MC_V_VECTOR, 8, 0x0080, 3, 37}, //19-0x05 High = Vd vector Low = Vq vector
+ {MC_CAN_BASE2 + MC_I_VECTOR, 9, 0x0100, 3, 38}, //20-0x06 High = Id vector Low = Iq vector
+ {MC_CAN_BASE2 + MC_BEMF_VECTOR, 10, 0x0200, 3, 39}, //21-0x07 High = BEMFd vector Low = BEMFq vector
+ {MC_CAN_BASE2 + MC_RAIL1, 5, 0x0020, 3, 20}, //22-0x08 High = 15V Low = Reserved
+ {MC_CAN_BASE2 + MC_RAIL2, 6, 0x0040, 3, 21}, //23-0x09 High = 3.3V Low = 1.9V
+ {MC_CAN_BASE2 + MC_TEMP1, 2, 0x0004, 3, 9}, //24-0x0B High = Heatsink Temp Low = Motor Temp
+ {MC_CAN_BASE2 + MC_TEMP2, 3, 0x0008, 3, 10}, //25-0x0C High = Inlet Temp Low = CPU Temp
+ {MC_CAN_BASE2 + MC_CUMULATIVE, 7, 0x0080, 3, 22}, //26-0x0E High = DC Bus AmpHours Low = Odometer
+ {MC_CAN_BASE2 + MC_SLIPSPEED, 11, 0x0400, 3, 40}, //27-0x17 High =Slip Speed (Hz) Low = Reserved
+ {DC_CAN_BASE, 12, 0x0800, 3, 41}, //28-0x500 High = CAN1_SERIAL Number Low = "TRIb" string
+ {DC_CAN_BASE + DC_DRIVE, 4, 0x0800, 0, 23}, //29-0x01 High = Motor Current Setpoint Low = Motor Velocity Setpoint
+ {DC_CAN_BASE + DC_POWER, 9, 0x0200, 3, 24}, //30-0x02 High = Bus Current Setpoint Low = Unused
+ {DC_CAN_BASE + DC_RESET, 13, 0x1000, 3, 42}, //31-0x03 High = Unused Low = Unused
+ {DC_CAN_BASE + DC_SWITCH, 5, 0x0080, 0, 25}, //32-0x04 High = Switch position Low = Switch state change
+ {BP_CAN_BASE, 14, 0x2000, 3, 43}, //33-0x580 High = BPV2" string or nulls Low = CAN1_SERIAL Number
+ {BP_CAN_BASE + BP_VMAX, 6, 0x0010, 0, 11}, //34-0x01 High = Max Voltage Low = Cell Number
+ {BP_CAN_BASE + BP_VMIN, 7, 0x0020, 0, 12}, //35-0x02 High = Min Voltage Low = Cell Number
+ {BP_CAN_BASE + BP_TMAX, 8, 0x0040, 0, 13}, //36-0x03 High = Temp Max Low = Cell Number
+ {BP_CAN_BASE + BP_PCDONE, 15, 0x0200, 3, 44}, //37-0x04 High = "BPV1" string Low = CAN1_SERIAL Number
+ {BP_CAN_BASE + BP_ISH, 9, 0x0010, 0, 5}, //38-0x05 High = Shunt Current Low = Battery Voltage
+ {AC_CAN_BASE, 16, 0x8000, 3, 45}, //39-0x5C0 High = ACV1" string or nulls Low = CAN1_SERIAL Number
+ {AC_CAN_BASE + AC_M1, 11, 0x0800, 3, 26}, //40-0x01 High = Array Voltage Average Low = Array Current Average
+ {AC_CAN_BASE + AC_M2, 12, 0x1000, 3, 27}, //41-0x02 High = Array Voltage Average Low = Array Current Average
+ {AC_CAN_BASE + AC_M3, 13, 0x2000, 3, 28}, //42-0x03 High = Array Voltage Average Low = Array Current Average
+ {AC_CAN_BASE + AC_ISH, 5, 0x0020, 3, 6}, //43-0x04 High = Shunt Current Low = Battery Voltage
+ {AC_CAN_BASE + AC_TMAX, 7, 0x0080, 3, 14}, //44-0x05 High = Max. Temperature Low = Max. Temperature MPPT
+ {AC_CAN_BASE + AC_TVAL1, 17, 0x1000, 3, 46}, //45-0x03 High = Temp AC1 Low = Temp AC2
+ {AC_CAN_BASE + AC_TVAL2, 18, 0x2000, 3, 47}, //46-0x04 High = Temp AC3 Low = Reserved
+ {AC_CAN_BASE + AC_BP_CHARGE, 19, 0x4000, 3, 48}, //47-0x05 High = "ACV1" or "0000" string Low = CAN1_SERIAL Number
+};
+// removed
+//{MC_CAN_BASE1 + MC_FAN, -, 0x----, -, --}, //xx-0x0A High = Fan speed (rpm) Low = Fan drive (%)
+//{MC_CAN_BASE1 + MC_TEMP3, -, 0x----, -, --}, //xx-0x0D High = Outlet Temp Low = Capacitor Temp
+//{MC_CAN_BASE2 + MC_FAN, -, 0x----, -, --}, //xx-0x0A High = Fan speed (rpm) Low = Fan drive (%)
+//{MC_CAN_BASE2 + MC_TEMP3, -, 0x----, -, --}, //xx-0x0D High = Outlet Temp Low = Capacitor Temp
+
+
+//static char lut_blacklist[] = {32,11,4,5,11,12,13,14,15,23,24,25,3,26,27,28};
+//static char lut_blacklist[] = {44};
+static char lut_blacklist[] = {49};
+
+static char *name_lookup[NAME_LOOKUP_ROWS] = {
+ //name
+ "MC1BAS", //MC_CAN_BASE1_
+ "MC1LIM", //MC_CAN_BASE1 + MC_LIMITS
+ "MC1BUS", //MC_CAN_BASE1 + MC_BUS
+ "MC1VEL", //MC_CAN_BASE1 + MC_VELOCITY
+ "MC1PHA", //MC_CAN_BASE1 + MC_PHASE
+ "MC1VVC", //MC_CAN_BASE1 + MC_V_VECTOR
+ "MC1IVC", //MC_CAN_BASE1 + MC_I_VECTOR
+ "MC1BEM", //MC_CAN_BASE1 + MC_BEMF_VECTOR
+ "MC1RL1", //MC_CAN_BASE1 + MC_RAIL1
+ "MC1RL2", //MC_CAN_BASE1 + MC_RAIL2
+ "MC1TP1", //MC_CAN_BASE1 + MC_TEMP1
+ "MC1TP2", //MC_CAN_BASE1 + MC_TEMP2
+ "MC1CUM", //MC_CAN_BASE1 + MC_CUMULATIVE
+ "MC1SLS", //MC_CAN_BASE1 + MC_SLIPSPEED
+ "MC2BAS", //MC_CAN_BASE2
+ "MC2LIM", //MC_CAN_BASE2 + MC_LIMITS
+ "MC2BUS", //MC_CAN_BASE2 + MC_BUS
+ "MC2VEL", //MC_CAN_BASE2 + MC_VELOCITY
+ "MC2PHA", //MC_CAN_BASE2 + MC_PHASE
+ "MC2VVC", //MC_CAN_BASE2 + MC_V_VECTOR
+ "MC2IVC", //MC_CAN_BASE2 + MC_I_VECTOR
+ "MC2BEM", //MC_CAN_BASE2 + MC_BEMF_VECTOR
+ "MC2RL1", //MC_CAN_BASE2 + MC_RAIL1
+ "MC2RL2", //MC_CAN_BASE2 + MC_RAIL2
+ "MC2TP1", //MC_CAN_BASE2 + MC_TEMP1
+ "MC2TP2", //MC_CAN_BASE2 + MC_TEMP2
+ "MC2CUM", //MC_CAN_BASE2 + MC_CUMULATIVE
+ "MC2SLS", //MC_CAN_BASE2 + MC_SLIPSPEED
+ "DC_BAS", //DC_CAN_BASE
+ "DC_DRV", //DC_CAN_BASE + DC_DRIVE
+ "DC_POW", //DC_CAN_BASE + DC_POWER
+ "DC_RST", //DC_CAN_BASE + DC_RESET
+ "DC_SWC", //DC_CAN_BASE + DC_SWITCH
+ "BP_BAS", //BP_CAN_BASE
+ "BP_VMX", //BP_CAN_BASE + BP_VMAX
+ "BP_VMN", //BP_CAN_BASE + BP_VMIN
+ "BP_TMX", //BP_CAN_BASE + BP_TMAX
+ "BP_PCD", //BP_CAN_BASE + BP_PCDONE
+ "BP_ISH", //BP_CAN_BASE + BP_ISH
+ "AC_BAS", //AC_CAN_BASE
+ "AC_MP1", //AC_CAN_BASE + AC_M1
+ "AC_MP2", //AC_CAN_BASE + AC_M2
+ "AC_MP3", //AC_CAN_BASE + AC_M3
+ "AC_ISH", //AC_CAN_BASE + AC_ISH
+ "AC_TMX", //AC_CAN_BASE + AC_TMAX
+ "AC_TV1", //AC_CAN_BASE + AC_TVAL1
+ "AC_TV2", //AC_CAN_BASE + AC_TVAL2
+ "AC_BPC", //AC_CAN_BASE + AC_BP_CHARGE
+};
+
+// removed
+// "MC1FAN", //MC_CAN_BASE1 + MC_FAN
+// "MC1TP3", //MC_CAN_BASE1 + MC_TEMP3
+// "MC2FAN", //MC_CAN_BASE2 + MC_FAN
+// "MC2TP3", //MC_CAN_BASE2 + MCSUNSEEKERTELEMETRY2021_H_* SUNSEEKERTELEMETRY2021_H_ */
+
+#endif /* SUNSEEKERTELEMETRY2021_H_ */
diff --git a/Telem_Debug/Debug_RS-232/clock_init.c b/Telem_Debug/Debug_RS-232/clock_init.c
new file mode 100644
index 0000000..377a275
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/clock_init.c
@@ -0,0 +1,100 @@
+#include "clock_init.h"
+
+void clock_init(void)
+{
+ WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer; `WDTPW` is the "WatchDog Timer PassWord", required for all `WDTCTL` operations
+
+ Port_Init(); //ensure clock pins are configured
+
+ SetVCoreUp(1); //Configure MCU core voltage for HF clock
+ SetVCoreUp(2); //
+ SetVCoreUp(3); //
+
+ Clock_XT1_Init(); //LF clock source init
+ Clock_XT2_Init(); //HF clock source init
+
+}
+
+void Port_Init(void)
+{
+ //Clock Source TEST PINS ACLK/MCLK/SMCLK
+ P11DIR |= ACLK_TEST | MCLK_TEST | SMCLK_TEST; // Set P11.0:P11.2 as output ACLK/MCLK/SMCLK
+ P11SEL |= ACLK_TEST | MCLK_TEST | SMCLK_TEST; // Set P11.0:P11.2 as ACLK/MCLK/SMCLK function
+
+ //XT1 ALTERNATE PIN CONFIG
+ P7SEL |= XT1IN | XT1OUT; // Set P7.0 & P7.1 as XT1IN/XT1OUT peripheral
+ P7DIR |= XT1IN | XT1OUT;
+
+ //XT2 ALTERNATE PIN CONFIG
+ P5SEL |= XT2IN | XT2OUT; // Set P5.2 & P5.3 as XT2IN/XT2OUT peripheral
+ P5DIR |= XT2IN | XT2OUT;
+}
+
+void Clock_XT1_Init(void)
+{
+ char i;
+
+ //XT1 CLOCK CONFIG
+ UCSCTL6 &= ~(XT1OFF); // Enable XT1
+ UCSCTL6 &= ~(XT1DRIVE1 | XT1DRIVE0); // Lowest drive current LF 32KHz oscillator
+
+ do{
+ UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags
+ SFRIFG1 &= ~OFIFG; // Clear fault flags
+ for(i=255;i>0;i--){ // Delay for oscillator to stabilize
+ _NOP(); // "No Operation"
+ }
+ }
+ while((SFRIFG1 & OFIFG) != 0); // Test oscillator fault flag
+
+ UCSCTL4 |= SELA__XT1CLK; // Clock Source ACLK = XT1 = 32kHz
+ UCSCTL5 |= DIVA_0; // Divide ACLK/1 = 32kHz
+
+}
+
+void Clock_XT2_Init(void)
+{
+ char i;
+
+ //XT2 CLOCK CONFIG
+ UCSCTL6 &= ~(XT2OFF); // Enable XT2
+ UCSCTL6 |= XT2DRIVE_3; // Drive current 16-24 MHz Clock
+ UCSCTL6 &= ~XT2BYPASS; // XT2 Sourced Externally from pin - 20MHz
+
+ do{
+ UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags
+ SFRIFG1 &= ~OFIFG; // Clear fault flags
+ for(i=255;i>0;i--){ // Delay for oscillator to stabilize
+ _NOP(); // "No Operation"
+ }
+ }
+ while((SFRIFG1 & OFIFG) != 0); // Test oscillator fault flag
+
+ UCSCTL4 |= (SELS__XT2CLK | SELM__XT2CLK); // Clock Source SMCLK=MCLK = XT2 = 20MHz
+ UCSCTL5 |= DIVM_0 | DIVS_1; // MCLK:XT2/1 = 20MHz SMCLK:XT2/2 = 10MHz
+
+}
+
+/*************************************************************
+/ Name: SetVCoreUp
+/ IN: int Level
+/ OUT: void
+/ DESC: This function is used to set the voltage of the VCORE to
+/ The level specified in input
+/ Reference: Users Guide page 74
+************************************************************/
+void SetVCoreUp (unsigned int level)
+{
+ PMMCTL0_H = 0xA5; // Open PMM registers for write access
+ SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // Set SVS/SVM high side new level
+ SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; // Set SVM low side to new level
+ while((PMMIFG & SVSMLDLYIFG) == 0); // Wait till SVM is settled
+ PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Clear already set flags
+ PMMCTL0_L = PMMCOREV0 * level; // Set VCore to new level
+ if(PMMIFG & SVMLIFG){
+ while((PMMIFG & SVMLVLRIFG) == 0); // Wait till new level reached
+ }
+ SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; // Set SVS/SVM low side to new level
+ while((PMMIFG & SVSMLDLYIFG) == 0); // Wait till SVM is settled
+ PMMCTL0_H = 0x00; // Lock PMM registers for write access
+}
diff --git a/Telem_Debug/Debug_RS-232/clock_init.h b/Telem_Debug/Debug_RS-232/clock_init.h
new file mode 100644
index 0000000..632f28b
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/clock_init.h
@@ -0,0 +1,27 @@
+/*
+ * Clock Initialization Code MSP430F5438A
+ * Initialize Clock Source XT1 @ 32768 Hz
+ * Initialize Clock Source XT2 @ 20MHz
+ *
+ * Sunseeker Telemetry 2021
+ *
+ * Last modified October 2015 by Scott Haver
+ * Last modified May 2021 by B. Bazuin
+ *
+ * Main CLK : MCLK = XT2 = 20 MHz
+ * Sub-Main CLK : SMCLK = XT2/2 = 10 MHz
+ * Aux CLK : ACLK = XT1 = 32.768 kHz
+ *
+ */
+
+#ifndef CLOCK_INIT_H_
+#define CLOCK_INIT_H_
+
+#include "SunseekerTelemetry2021.h"
+
+void Port_Init(void);
+void Clock_XT1_Init(void);
+void Clock_XT2_Init(void);
+void SetVCoreUp(unsigned int level);
+
+#endif /* CLOCK_INIT_H_ */
diff --git a/Telem_Debug/Debug_RS-232/interrupts.c b/Telem_Debug/Debug_RS-232/interrupts.c
new file mode 100644
index 0000000..8788a2a
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/interrupts.c
@@ -0,0 +1,41 @@
+#include "interrupts.h"
+
+extern volatile unsigned char status_flag;
+extern char* pUSBReceiveString;
+extern char* pRS232ReceiveString;
+
+/*
+ * Timer B CCR0 Interrupt Service Routine
+ * - Interrupts on Timer B CCR0 match at 10Hz
+ * - Sets Time_Flag variable
+ */
+
+/*
+ * GNU interrupt semantics
+ * interrupt(TIMERB0_VECTOR) timer_b0(void)
+ */
+
+#pragma vector = TIMER0_B0_VECTOR
+__interrupt void TIMER0_B0_ISR(void){
+ static unsigned int status_count = TELEM_STATUS_COUNT;
+
+ // Primary System Heart beat
+ status_count--;
+ if(status_count == 0){
+ status_count = TELEM_STATUS_COUNT;
+ status_flag = TRUE;
+ P8OUT |= LEDG; // Turn on the green LED
+ }else{
+ P8OUT &= ~LEDG; // Turn off the green LED
+ }
+}
+
+#pragma vector = USCI_A2_VECTOR
+__interrupt void USCI_A2_ISR(void){
+ usci_A2_receiveString(pUSBReceiveString);
+}
+
+#pragma vector = USCI_A3_VECTOR
+__interrupt void USCI_A3_ISR(void){
+ usci_A3_receiveString(pRS232ReceiveString);
+}
diff --git a/Telem_Debug/Debug_RS-232/interrupts.h b/Telem_Debug/Debug_RS-232/interrupts.h
new file mode 100644
index 0000000..e2b9ec4
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/interrupts.h
@@ -0,0 +1,7 @@
+#ifndef INTERRUPTS_H_
+#define INTERRUPTS_H_
+
+#include "SunseekerTelemetry2021.h"
+#include "usci.h"
+
+#endif /* INTERRUPTS_H_ */
diff --git a/Telem_Debug/Debug_RS-232/io_init.c b/Telem_Debug/Debug_RS-232/io_init.c
new file mode 100644
index 0000000..48e4ad9
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/io_init.c
@@ -0,0 +1,91 @@
+#include "io_init.h"
+
+void io_init(void)
+{
+ /****************************** PORT 1 **************************************/
+ P1OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P1DIR = P1_UNUSED; // Set all unused pins to output
+ P1DIR &= ~(RTC_MFP | IMU_INTn); // Set specific pins to input
+ /*Interrupts Enable*/
+// P1SEL = RTC_MFP | IMU_INTn; // Peripheral module function selected for specific pins
+// P1IE = RTC_MFP | IMU_INTn; // Enable Interrupts
+ P1IES = IMU_INTn; // High to low
+ P1IFG = 0x00; // Clear all interrupt flags on Port 1
+ delay();
+
+ /****************************** PORT 2 **************************************/
+ P2OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P2DIR = P2_UNUSED; // Set all unused pins to output
+ /*Interrupts Enable */
+// P2SEL = CAN0_INTn | CAN1_INTn | GPS_INTn; // Peripheral module function selected for specific pins
+// P2IES = CAN0_INTn | CAN1_INTn | GPS_INTn;
+// P2IE = CAN0_INTn | CAN1_INTn | GPS_INTn; // Enable Interrupts
+// P2SEL |= CAN0_RXB0n | CAN0_RXB1n | CAN1_RXB0n | CAN1_RXB1n; // Peripheral module function selected for specific pins
+// P2IES |= CAN0_RXB0n | CAN0_RXB1n | CAN1_RXB0n | CAN1_RXB1n;
+// P2IE |= CAN0_RXB0n | CAN0_RXB1n | CAN1_RXB0n | CAN1_RXB1n; // Enable Interrupts
+ P2IFG = 0x00; // Clear all interrupt flags on Port 2
+ delay();
+
+ /****************************** PORT 3 **************************************/
+ P3OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P3DIR = CAN0_SCLK | CAN0_MOSI | SDC_SCLK | SDC_MOSI | CAN1_SCLK | P3_UNUSED; // Set to output
+ P3OUT |= CAN0_SCLK | CAN0_MOSI | SDC_SCLK | SDC_MOSI | CAN1_SCLK; // Pull used output pins high
+ P3DIR &= ~(CAN0_MISO | SDC_MISO); // Set specific pins to input
+ P3SEL = CAN0_SCLK | CAN0_MOSI | CAN0_MISO | SDC_SCLK | SDC_MOSI | SDC_MISO | CAN1_SCLK | IMU_SDA;
+
+ /****************************** PORT 4 **************************************/
+ P4OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P4DIR = CAN0_RSTn | CAN0_CSn | CAN1_RSTn | CAN1_CSn | P4_UNUSED; // Set specific pins to output
+ P4OUT = CAN0_RSTn | CAN0_CSn | CAN1_RSTn | CAN1_CSn; // Pull used output pins high
+ delay();
+ P4OUT &= ~(CAN0_RSTn | CAN1_RSTn); // Set specific pins of output register to low
+ delay();
+ delay();
+ P4OUT |= (CAN0_RSTn | CAN1_RSTn); // Set specific pins of output register to high
+
+ /****************************** PORT 5 **************************************/
+ P5OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P5DIR = XT2OUT | CAN1_MOSI | P5_UNUSED; // Set specific pins to output
+ P5OUT = CAN1_MOSI; // Set specific pins of output register to high
+ P5DIR &= ~(CAN1_MISO); // Set specific pins to input
+ P5SEL = XT2IN | XT2OUT | IMU_SCL | CAN1_MOSI | CAN1_MISO; // Peripheral module function selected for specific pins
+
+ /****************************** PORT 6 **************************************/
+ P6OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P6DIR = P6_UNUSED; // Set all unused pins to output
+ P6SEL = 0x00; // I/O function selected for all pins
+
+ /****************************** PORT 7 **************************************/
+ P7OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P7DIR = XT1OUT | P7_UNUSED; // Set specific pins to output
+ P7SEL = XT1IN | XT1OUT; // Peripheral module function selected for specific pins
+
+ /****************************** PORT 8 **************************************/
+ P8OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P8DIR = LEDG | LEDR | LEDY0 | LEDY1 | P8_UNUSED; // Set specific pins to output
+ P8DIR &= ~(Button0); // Set to input
+ P8SEL = 0x00; // I/O function selected for all pins
+
+ /****************************** PORT 9 **************************************/
+ P9OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P9DIR = USB_TX | SDC_CSn | GPS_CSn | P9_UNUSED; // Set specific pins to output
+ P9OUT = SDC_CSn | GPS_CSn; // Set specific pins of output register to high
+ P9SEL = RTC_SDA | RTC_SCL | USB_TX | USB_RX; // Peripheral module function selected for specific pins
+
+ /****************************** PORT 10 **************************************/
+ P10OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P10DIR = BT_CSn | BT_MOSI | BT_SCLK | UART_TX | BT_EN |P10_UNUSED; // Set specific pins to output
+ P10OUT = BT_CSn | BT_MOSI | BT_SCLK; // Set specific pins of output register to high
+ P10SEL = BT_MOSI | BT_MISO | BT_SCLK | UART_TX | UART_RX; // Peripheral module function selected for specific pins
+
+ /****************************** PORT 11 **************************************/
+ P11OUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ P11DIR = ACLK_TEST | MCLK_TEST | SMCLK_TEST; // Set specific pins to output
+ P11OUT = ACLK_TEST | MCLK_TEST | SMCLK_TEST; // Set specific pins of output register to high
+ P11SEL = ACLK_TEST | MCLK_TEST | SMCLK_TEST; // Peripheral module function selected for specific pins
+
+ /****************************** PORT J **************************************/
+ PJOUT = 0x00; // Set output register to all low. Pulling enabled pins low, only affects ports set as output, no effect on inputs
+ PJDIR = 0x0F; // Set to output as per user's guide
+
+}
diff --git a/Telem_Debug/Debug_RS-232/io_init.h b/Telem_Debug/Debug_RS-232/io_init.h
new file mode 100644
index 0000000..b8e531d
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/io_init.h
@@ -0,0 +1,18 @@
+/*
+ * I/O Initialization
+ */
+
+/*
+ * Initialize I/O port directions and states
+ * Drive unused pins as outputs to avoid floating inputs and wasting power
+ *
+ */
+
+#ifndef IO_INIT_H_
+#define IO_INIT_H_
+
+#include "SunseekerTelemetry2021.h"
+
+void io_init(void);
+
+#endif /* IO_INIT_H_ */
diff --git a/Telem_Debug/Debug_RS-232/lnk_msp430f5438a.cmd b/Telem_Debug/Debug_RS-232/lnk_msp430f5438a.cmd
new file mode 100644
index 0000000..a9cab7d
--- /dev/null
+++ b/Telem_Debug/Debug_RS-232/lnk_msp430f5438a.cmd
@@ -0,0 +1,250 @@
+/* ============================================================================ */
+/* Copyright (c) 2016, Texas Instruments Incorporated */
+/* All rights reserved. */
+/* */
+/* Redistribution and use in source and binary forms, with or without */
+/* modification, are permitted provided that the following conditions */
+/* are met: */
+/* */
+/* * Redistributions of source code must retain the above copyright */
+/* notice, this list of conditions and the following disclaimer. */
+/* */
+/* * Redistributions in binary form must reproduce the above copyright */
+/* notice, this list of conditions and the following disclaimer in the */
+/* documentation and/or other materials provided with the distribution. */
+/* */
+/* * Neither the name of Texas Instruments Incorporated nor the names of */
+/* its contributors may be used to endorse or promote products derived */
+/* from this software without specific prior written permission. */
+/* */
+/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" */
+/* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, */
+/* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */
+/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */
+/* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, */
+/* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; */
+/* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */
+/* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */
+/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
+/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+/* ============================================================================ */
+
+/******************************************************************************/
+/* lnk_msp430f5438a.cmd - LINKER COMMAND FILE FOR LINKING MSP430F5438A PROGRAMS */
+/* */
+/* Usage: lnk430 -o -m