diff --git a/source/lib/uart_drv/uart_drv.c b/source/lib/uart_drv/uart_drv.c index fde95a9d36fd41abc16bc33eb9c65e7eefabe10f..a9ad62665af6181b535147bab269348c879750c4 100644 --- a/source/lib/uart_drv/uart_drv.c +++ b/source/lib/uart_drv/uart_drv.c @@ -181,10 +181,10 @@ void uart_drv_toggle_echo(void) { #if (UART_SER_INTF == F5_UART_INTF_USCIA0) /************************************************************************** - * @brief Initializes the serial communications peripheral and GPIO ports - * + * @brief Initializes the serial communications peripheral and GPIO ports + * * @param none - * + * * @return none **************************************************************************/ void hal_uart_init(void) @@ -235,9 +235,9 @@ void hal_uart_init(void) /*************************************************************************** * @brief Disables the serial communications peripheral and clears the GPIO * settings, reset the interupts. - * + * * @param none - * + * * @return none **************************************************************************/ void hal_uart_deinit(void) @@ -253,9 +253,9 @@ void hal_uart_deinit(void) /************************************************************************** * @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) @@ -460,7 +460,13 @@ void hal_uart_init(void) rx_end_of_str = NO_END_OF_LINE_DETECTED; rx_str_length = 0; +<<<<<<< Updated upstream UART_PORT_SEL |= UART_PIN_RXD + UART_PIN_TXD; +======= + //Due to 3 peripherals per port there are more select bits. + UART_PORT_SEL0 |= UART_PIN_RXD + UART_PIN_TXD; + UART_PORT_SEL1 &= ~(UART_PIN_RXD + UART_PIN_TXD); +>>>>>>> Stashed changes UART_PORT_DIR |= UART_PIN_TXD; UART_PORT_DIR &= ~UART_PIN_RXD; @@ -487,7 +493,12 @@ void hal_uart_init(void) UCA1BR0 = 138; // 115200 bits per second UCA1BR1 = 0; +<<<<<<< Updated upstream UCA1MCTL = UCBRS2 + UCBRS1 + UCBRS0; // Modulation UCBRSx = 7 +======= + //Slight different modulation options in FR5994 + UCA0MCTLW = UCBRS2 + UCBRS1 + UCBRS0; +>>>>>>> Stashed changes UCA1CTL1 &= ~UCSWRST; UCA1IE |= UCRXIE; // Enable USCI_A0 RX interrupt @@ -508,11 +519,18 @@ void hal_uart_deinit(void) UCA1IE &= ~UCRXIE; UCA1IE &= ~UCTXIE; UCA1CTL1 = UCSWRST; //Reset State +<<<<<<< Updated upstream UART_PORT_SEL &= ~( UART_PIN_RXD + UART_PIN_TXD ); +======= + //Due to 3 peripherals per port there are more select bits. + UART_PORT_SEL0 &= ~( UART_PIN_RXD + UART_PIN_TXD); + UART_PORT_SEL1 &= ~( UART_PIN_RXD + UART_PIN_TXD); +>>>>>>> Stashed changes UART_PORT_DIR |= UART_PIN_TXD; UART_PORT_DIR |= UART_PIN_RXD; UART_PORT_OUT &= ~(UART_PIN_TXD + UART_PIN_RXD); } +<<<<<<< Updated upstream /************************************************************************** * @brief void hal_uart_start_tx(void) @@ -580,6 +598,75 @@ void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void) #elif UART_SER_INTF == F2_UART_INTF_USCIA0 // Interface to UART /************************************************************************** +======= + +/************************************************************************** + * @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 UCIV__NONE: + break; // Vector 0 - no interrupt + case UCIV__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 UCIV__UCTXCFG: + // 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 + +/************************************************************************** +>>>>>>> Stashed changes * @brief Initializes the serial communications peripheral and GPIO ports * to communicate with the TUSB3410. * @@ -618,9 +705,9 @@ void hal_uart_init(void) /*************************************************************************** * @brief Disables the serial communications peripheral and clears the GPIO * settings, reset the interupts. - * + * * @param none - * + * * @return none **************************************************************************/ void hal_uart_deinit(void) @@ -636,9 +723,9 @@ void hal_uart_deinit(void) /************************************************************************** * @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)