diff --git a/source/lib/uart_drv/uart_drv.c b/source/lib/uart_drv/uart_drv.c
index 57fee5030f8f413a0d446b52c186d240547940f7..fde95a9d36fd41abc16bc33eb9c65e7eefabe10f 100644
--- a/source/lib/uart_drv/uart_drv.c
+++ b/source/lib/uart_drv/uart_drv.c
@@ -442,14 +442,149 @@ void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void)
 	}
 }
 
-#elif UART_SER_INTF == F2_UART_INTF_USCIA0        // Interface to UART 
+#elif (UART_SER_INTF == FR5x_UART_INTF_USCIA0)        // Interface to UART
+/**************************************************************************
+ * @brief  Initializes the serial communications peripheral and GPIO ports
+ *
+ * @param  none
+ *
+ * @return none
+ **************************************************************************/
+void hal_uart_init(void)
+{
+
+	circ_buf_init(&uart_rx_buf, rx_buf, RX_UART_BUFFER_SIZE);
+
+	circ_buf_init(&uart_tx_buf, tx_buf, TX_UART_BUFFER_SIZE);
+
+	rx_end_of_str = NO_END_OF_LINE_DETECTED;
+	rx_str_length = 0;
+
+	UART_PORT_SEL |= UART_PIN_RXD + UART_PIN_TXD;
+	UART_PORT_DIR |= UART_PIN_TXD;
+	UART_PORT_DIR &= ~UART_PIN_RXD;
+
+	/* 9600 bits per second on 32768 ACLK */
+    /*
+	UCA1CTL1 |= UCSWRST;                        // Reset State
+	UCA1CTL1 |= UCSSEL_1;                       // ACLK
+	UCA1CTL0 = UCMODE_0;
+	UCA1CTL0 &= ~UC7BIT;                        // 8bit char
+
+	UCA1BR0 = 3;                                // 9600 bits per second
+	UCA1BR1 = 0;
+
+	UCA1MCTL = UCBRS1 + UCBRS0;                 // Modulation UCBRSx = 3
+	UCA1CTL1 &= ~UCSWRST;
+    */
+
+	/* 115200 bits per second on 16MHz SMCLK */
+	UCA1CTL1 |= UCSWRST;                        // Reset State
+	UCA1CTL1 |= UCSSEL_2;                       // SMCLK
+	UCA1CTL0 = UCMODE_0;
+	UCA1CTL0 &= ~UC7BIT;                        // 8bit char
+
+	UCA1BR0 = 138;                              // 115200 bits per second
+	UCA1BR1 = 0;
+
+	UCA1MCTL = UCBRS2 + UCBRS1 + UCBRS0;        // Modulation UCBRSx = 7
+	UCA1CTL1 &= ~UCSWRST;
+
+	UCA1IE |= UCRXIE;                           // Enable USCI_A0 RX interrupt
+
+	__bis_SR_register(GIE);                     // Enable Interrupts
+}
+
+/***************************************************************************
+ * @brief  Disables the serial communications peripheral and clears the GPIO
+ *         settings, reset the interupts.
+ *
+ * @param  none
+ *
+ * @return none
+ **************************************************************************/
+void hal_uart_deinit(void)
+{
+	UCA1IE &= ~UCRXIE;
+	UCA1IE &= ~UCTXIE;
+	UCA1CTL1 = UCSWRST;                          //Reset State
+	UART_PORT_SEL &= ~( UART_PIN_RXD + UART_PIN_TXD );
+	UART_PORT_DIR |= UART_PIN_TXD;
+	UART_PORT_DIR |= UART_PIN_RXD;
+	UART_PORT_OUT &= ~(UART_PIN_TXD + UART_PIN_RXD);
+}
 
 /**************************************************************************
- * @brief  Initializes the serial communications peripheral and GPIO ports 
+ * @brief  void hal_uart_start_tx(void)
+ *
+ * @param  Start the TX ISR, it will automatically stop when FIFO is empty
+ *
+ * @return none
+ **************************************************************************/
+void hal_uart_start_tx(void)
+{
+
+	if(isr_state == TX_ISR_OFF) {
+		ENTER_CRITICAL_SECTION(isr_flag);
+		isr_state = TX_ISR_ON;
+		UCA1IE |= UCTXIE;
+		UCA1TXBUF = circ_buf_get_data(&uart_tx_buf);
+		LEAVE_CRITICAL_SECTION(isr_flag);
+	}
+}
+
+// Echo back RXed character, confirm TX buffer is ready first
+#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
+#pragma vector=USCI_A1_VECTOR
+__interrupt void USCI_A1_ISR(void)
+#elif defined(__GNUC__)
+void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void)
+#else
+#error Compiler not supported!
+#endif
+{
+	char tmp_uart_data;
+	switch(__even_in_range(UCA1IV,4))
+	{
+	case USCI_NONE:
+		break;                             // Vector 0 - no interrupt
+	case USCI_UCRXIFG:                                   // Vector 2 - RXIFG
+		tmp_uart_data = UCA1RXBUF;
+
+		circ_buf_put_data(&uart_rx_buf, tmp_uart_data);
+
+		if(uart_state == UART_ECHO_ON) {
+			uart_put_char(tmp_uart_data);
+		}
+		// if its a "return" then activate main-loop
+		if(tmp_uart_data == 13) {
+			rx_end_of_str = END_OF_LINE_DETECTED;
+			rx_str_length = uart_rx_buf.size_of_buffer - circ_buf_remainder(&uart_rx_buf);
+			__bic_SR_register_on_exit(LPM3_bits);
+		}
+		break;
+	case USCI_UCTXIFG:
+		// check if there is more data to send
+		if(circ_buf_remainder(&uart_tx_buf) < uart_tx_buf.size_of_buffer) {
+			UCA1TXBUF = circ_buf_get_data(&uart_tx_buf);
+		} else {
+			isr_state = TX_ISR_OFF;
+			UCA1IE &= ~UCTXIE;                        // Disable USCI_A0 TX interrupt
+		}
+		break;                             // Vector 4 - TXIFG
+	default:
+		break;
+	}
+}
+
+#elif UART_SER_INTF == F2_UART_INTF_USCIA0        // Interface to UART
+
+/**************************************************************************
+ * @brief  Initializes the serial communications peripheral and GPIO ports
  *         to communicate with the TUSB3410.
- * 
+ *
  * @param  none
- * 
+ *
  * @return none
  **************************************************************************/
 void hal_uart_init(void)
diff --git a/source/lib/uart_drv/uart_drv.h b/source/lib/uart_drv/uart_drv.h
index e3c5ba8afd8017ad971afa7deed19cc5933c9de1..a56952f0aa91741a78c6d524a06180d78c27d1fc 100644
--- a/source/lib/uart_drv/uart_drv.h
+++ b/source/lib/uart_drv/uart_drv.h
@@ -43,7 +43,7 @@
 *
 * 		F2_UART_INTF_USCIA0    		LaunchPAD_G2553
 * 		F5_UART_INTF_USCIA0    		MSP430_TRXEB development kit
-* 		FR5_UART_INTF_USCIA0   		LaunchPAD_FR5969
+* 		FR5_UART_INTF_USCIA0   		LaunchPAD_FR5994
 *
 *******************************************************************************/
 #if defined (__MSP430G2553__)
@@ -58,6 +58,10 @@
 #define UART_SER_INTF  F5_UART_INTF_USCIA1
 #endif
 
+#if defined (__MSP430FR5994__)
+#define UART_SER_INTF  FR5x_UART_INTF_USCIA0
+#endif
+
 
 #if UART_SER_INTF == F2_UART_INTF_USCIA0        // Interface to UART
   #define UART_PORT_OUT      P1OUT
@@ -90,6 +94,8 @@
   #define UART_PIN_RXD       BIT5
 #elif UART_SER_INTF == FR5x_UART_INTF_USCIA0
   #define UART_PORT_OUT      P2OUT
+  // The 430FR5xxx series is different as it has multiple function per pin
+  // 4 Way multiplexing takes place
   #define UART_PORT_SEL0     P2SEL0
   #define UART_PORT_SEL1     P2SEL1
   #define UART_PORT_DIR      P2DIR