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.

MSPM0L1306: MSPM0L1306 Fast Boot Time Test

Part Number: MSPM0L1306

I have a requirement for a low-cost microcontroller with a sub 0.5ms boot time. The MSPM0L1306 was selected for its internal clock, package options, low-cost, and that its M0 core has sufficient performance and peripherals. I have seen in the datasheet that it supports a fast boot time of 214us that could easily meet my timing requirement. However, my testing has shown a consistent 4.5ms boot time. I am measuring this by toggling on power quickly using a high side driver circuit, running code that toggles an output pin on/off, and recording the time from the time the circuit was powered to the time the toggling starts. Are there any important settings in the project options, .syscfg file, BCR memory, or elsewhere that need to be modified to achieve a faster time? Is there an MCU that would be a better choice? I am testing this with the eval-board and do get much faster times by disconnecting the headers connecting the debugger to the MCU. My file uploads aren't working likely due to an IT policy issue so all I can include is my code.

#include "ti_msp_dl_config.h"
#include <stdint.h>
int main(void) {
    // Minimal GPIO initialization - bypass SYSCFG_DL_init() for fastest boot
    // 1. Enable power to GPIOA peripheral
    GPIOA->GPRCM.PWREN = (GPIOA->GPRCM.PWREN & ~0xFF000000) | 0x26000000 | 0x1;
    // 2. Wait for power domain to be ready
    volatile int timeout = 10000;
    while (((GPIOA->GPRCM.STAT & 0x1) == 0) && (timeout-- > 0));
    // 3. Configure IOMUX for PA21 as GPIO function
    // PA21 is IOMUX index 21, set to GPIO function (function 1)
    IOMUX->SECCFG.PINCM[21] = 0x00000081;  // Enable + GPIO function
    // 4. Configure PA21 as GPIO output
    GPIOA->DOE31_0 = (1 << 21);
    // 5. Toggle PA21
    while (1) {
        GPIOA->DOUT31_0 = (1 << 21);   // Set PA21 high
        for (volatile int i = 0; i < 32000; i++) __asm("nop");
        GPIOA->DOUT31_0 = 0;            // Set PA21 low
        for (volatile int i = 0; i < 32000; i++) __asm("nop");
    }
    return 0;
}