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.

MSP432E401Y: MSP432E401Y

Part Number: MSP432E401Y

Dear,

On our custom board, build around the MSP432E, we use the CRC module. Before using the CC module, we reset and enabl the module as on Ti reconditions.

Once in in a while, after cold booting the board, the READY bit does not get enabled by the CRC module. Power cycling the board fixes this.

I have found this post: https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/948694/ccs-msp432e411y-crc_init-problem which is exactly the same problem.

The pity is, there is no solution given, nor any updates/hint made what the root cause is.

Is there any extra info available on this problem?

Regards,

BartT

  • Hi Bart,

      I just ran the code a couple of times and I can't repeat the problem. I also don't find any errata that explains the problem. However, I do find a CRC example code for TM4C129 MCU that waits in a timeout loop for the CRC to be ready. TM4C129 and MSP432E share the same silicon. This seems to suggest that someone might have experienced this phenomenon in order to put this workaround in. Sorry, I don't have the history of this example. I will suggest you do the same. I suppose this problem is very silicon dependent and this is why I can't repeat it and nor Chester in the other post you referred. 

    //*****************************************************************************
    //
    // Configuration defines.
    //
    //*****************************************************************************
    #define CCM_LOOP_TIMEOUT        500000
    
    
    
    //*****************************************************************************
    //
    // Initialize the CRC and CCM modules.
    //
    //*****************************************************************************
    bool
    CRCInit(void)
    {
        uint32_t ui32Loop;
    
        //
        // Check that the CCM peripheral is present.
        //
        if(!MAP_SysCtlPeripheralPresent(SYSCTL_PERIPH_CCM0))
        {
            UARTprintf("No CCM peripheral found!\n");
    
            //
            // Return failure.
            //
            return(false);
        }
    
        //
        // The hardware is available, enable it.
        //
        MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_CCM0);
    
        //
        // Wait for the peripheral to be ready.
        //
        ui32Loop = 0;
        while(!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0))
        {
            //
            // Increment our poll counter.
            //
            ui32Loop++;
    
            if(ui32Loop > CCM_LOOP_TIMEOUT)
            {
                //
                // Timed out, notify and spin.
                //
                UARTprintf("Time out on CCM ready after enable.\n");
    
                //
                // Return failure.
                //
                return(false);
            }
        }
    
        //
        // Reset the peripheral to ensure we are starting from a known condition.
        //
        MAP_SysCtlPeripheralReset(SYSCTL_PERIPH_CCM0);
    
        //
        // Wait for the peripheral to be ready again.
        //
        ui32Loop = 0;
        while(!MAP_SysCtlPeripheralReady(SYSCTL_PERIPH_CCM0))
        {
            //
            // Increment our poll counter.
            //
            ui32Loop++;
    
            if(ui32Loop > CCM_LOOP_TIMEOUT)
            {
                //
                // Timed out, spin.
                //
                UARTprintf("Time out on CCM ready after reset.\n");
    
                //
                // Return failure.
                //
                return(false);
            }
        }
    
        //
        // Return initialization success.
        //
        return(true);
    }