This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP432: UART Baud rate up to 4M when VCORE=1.2V

Dear Champs,

As MSP432 datasheet said, if VORE is 1.2V, we can drive UART baud rate up to 5Mbps when BRCLK=12MHz.
After testing, I met higher error rate when setting 4Mbps baud rate.


Do you have any suggestion or this?

I use “msp432p401x_euscia0_uart_01” project to test it. Below is setting:

int main(void)

{

    WDT_A->CTL = WDT_A_CTL_PW |             // Stop watchdog timer

            WDT_A_CTL_HOLD;

 

    CS->KEY = CS_KEY_VAL;                   // Unlock CS module for register access

    CS->CTL0 = 0;                           // Reset tuning parameters

    CS->CTL0 = CS_CTL0_DCORSEL_3;           // Set DCO to 12MHz (nominal, center of 8-16MHz range)

    CS->CTL1 = CS_CTL1_SELA_2 |             // Select ACLK = REFO

            CS_CTL1_SELS_3 |                // SMCLK = DCO

            CS_CTL1_SELM_3;                 // MCLK = DCO

    CS->KEY = 0;                            // Lock CS module from unintended accesses

 

    // Configure UART pins

    P1->SEL0 |= BIT2 | BIT3;                // set 2-UART pin as secondary function

 

    // Configure UART

    EUSCI_A0->CTLW0 |= EUSCI_A_CTLW0_SWRST; // Put eUSCI in reset

    EUSCI_A0->CTLW0 = EUSCI_A_CTLW0_SWRST | // Remain eUSCI in reset

            EUSCI_B_CTLW0_SSEL__SMCLK;      // Configure eUSCI clock source for SMCLK

    // Baud Rate calculation

    // 12000000/4000000= 3

    // Fractional portion = 0

    // User's Guide Table 21-4: UCBRSx = 0

    // UCBRFx = 0

    EUSCI_A0->BRW = 3;                     // 48000000/4000000, 4Mbps baud rate

    EUSCI_A0->MCTLW = (0x0 << EUSCI_A_MCTLW_BRS_OFS)|(0 << EUSCI_A_MCTLW_BRF_OFS) |

             EUSCI_A_MCTLW_OS16_OFS;

 

    EUSCI_A0->CTLW0 &= ~EUSCI_A_CTLW0_SWRST; // Initialize eUSCI

    EUSCI_A0->IFG &= ~EUSCI_A_IFG_RXIFG;    // Clear eUSCI RX interrupt flag

    EUSCI_A0->IE |= EUSCI_A_IE_RXIE;        // Enable USCI_A0 RX interrupt

 

    // Enable sleep on exit from ISR

    SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk;

 

    // Enable global interrupt

    __enable_irq();

 

    // Enable eUSCIA0 interrupt in NVIC module

    NVIC->ISER[0] = 1 << ((EUSCIA0_IRQn) & 31);

 

    // Enter LPM0

    __sleep();

    __no_operation();                       // For debugger

}

If you have any suggestion, please feel free to let me know.

Thanks a lot.

**Attention** This is a public forum