Quantcast
Channel: MSP low-power microcontroller forum - Recent Threads
Viewing all articles
Browse latest Browse all 21927

What is the maximum baud for the backchannel UART on the MSP432P401 Launchpad?

$
0
0

Hi,

I noticed Tim Logan mentioned here that he didn't recommend over 38400 with the back channel UART.  What is the limitation?

I am trying to use the backchannel UART on the MSP432P401 launchpad and at 115200 baud I am missing every other character on receive.  On transmit,there appears to be no problem.  My UART ISR and setup is given below.

const eUSCI_UART_Config uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
26, // BRDIV = 26
0, // UCxBRF = 0
0, // UCxBRS = 0
EUSCI_A_UART_NO_PARITY, // No Parity
EUSCI_A_UART_LSB_FIRST, // MSB First
EUSCI_A_UART_ONE_STOP_BIT, // One stop bit
EUSCI_A_UART_MODE, // UART mode
EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION // Low Frequency Mode
};
char uartRXData[80];
static bool uartEndOfLineFlag = false;

void EusciA0_ISR(void)
{
    static int i=0;
	uint32_t status = UART_getEnabledInterruptStatus(EUSCI_A0_BASE);

    UART_clearInterruptFlag(EUSCI_A0_BASE, status);

    if(status & EUSCI_A_UART_RECEIVE_INTERRUPT)
    {
        uartRXData[i] = UART_receiveData(EUSCI_A0_BASE);
        if(uartRXData[i++]==0x0d)
        {
        	uartEndOfLineFlag = true;
        	uartRXData[i] = 0;  // To end the array.
        	i=0; // Get ready for the next command.
        }
    }
}

void initializeClocks(void)
{
    /* Initialize main clock to 48MHz.  To make it 3 MHz change the 48 to 3
     * and the 16's to 1.*/
	PCM_setCoreVoltageLevel(PCM_VCORE1);
    CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48); // Full speed
    CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_16 );
    MAP_CS_initClockSignal(CS_HSMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_16 );
    MAP_CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_16 );
}

/*  We may want to use P3.2 and P3.3 as a Bluetooth UART because the
 *  backchannel UART is a bit slow.  I only get every other character
 *  at 115200 baud.
 */
int initializeBackChannelUART(void){

	initializeClocks();
    /* Selecting P1.2 and P1.3 in UART mode. */
    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
        GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);

    /* Configuring UART Module */
    if(UART_initModule(EUSCI_A0_BASE, &uartConfig)==STATUS_FAIL)
    	return (STATUS_FAIL);

    UART_selectDeglitchTime(EUSCI_A0_BASE,EUSCI_A_UART_DEGLITCH_TIME_200ns);

    /* Enable UART module */
    MAP_UART_enableModule(EUSCI_A0_BASE);

    /* Enable UART interrupts for backchannel UART
     * We may or may not need to do this.  The simple
     * printf() routine doesn't seem to use it.  */
    UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
    		/*EUSCI_A_SPI_TRANSMIT_INTERRUPT);*/
    Interrupt_enableInterrupt(INT_EUSCIA0);
    return 1;
}

What options do I have and what are the benefits/drawbacks of each?

  • Use DMA (perhaps in ping pong mode)....  
  • Use an external port like P3.2 and P3.3....
  • Cut the speed down to 38400....

Thanks,

Rob


Viewing all articles
Browse latest Browse all 21927

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>