Exemple #1
0
//*****************************************************************************
//
//! \brief Set Vcore to expected level
//!
//! \param baseAddress is the base address of the PMM module.
//! \param level level to which Vcore needs to be decreased/increased
//!        Valid values are:
//!        - \b PMM_CORE_LEVEL_0 [Default]
//!        - \b PMM_CORE_LEVEL_1
//!        - \b PMM_CORE_LEVEL_2
//!        - \b PMM_CORE_LEVEL_3
//!
//! Modified bits of \b PMMCTL0 register, bits of \b PMMIFG register, bits of
//! \b PMMRIE register, bits of \b SVSMHCTL register and bits of \b SVSMLCTL
//! register.
//!
//! \return STATUS_SUCCESS or STATUS_FAIL
//
//*****************************************************************************
bool PMM_setVCore(uint32_t baseAddress, uint8_t level)
{
        assert(
                (PMM_CORE_LEVEL_0 == level) ||
                (PMM_CORE_LEVEL_1 == level) ||
                (PMM_CORE_LEVEL_2 == level) ||
                (PMM_CORE_LEVEL_3 == level)
                );

        uint8_t actlevel;
        bool status = STATUS_SUCCESS;

        //Set Mask for Max. level
        level &= PMMCOREV_3;

        //Get actual VCore
        actlevel = (HWREG16(baseAddress + OFS_PMMCTL0) & PMMCOREV_3);

        //step by step increase or decrease
        while ((level != actlevel) && (status == STATUS_SUCCESS)) {
                if (level > actlevel)
                        status = PMM_setVCoreUp(baseAddress, ++actlevel);
                else
                        status = PMM_setVCoreDown(baseAddress, --actlevel);
        }

        return status;
}
bool PMM_setVCore (uint16_t baseAddress, uint8_t level)
{
    uint8_t actlevel;
    bool status = STATUS_SUCCESS;

    //Set Mask for Max. level
    level &= PMMCOREV_3;

    //Get actual VCore
    actlevel = (HWREG16(baseAddress + OFS_PMMCTL0) & PMMCOREV_3);

    //step by step increase or decrease
    while ((level != actlevel) && (status == STATUS_SUCCESS))
    {
        if (level > actlevel){
            status = PMM_setVCoreUp(baseAddress, ++actlevel);
        } else   {
            status = PMM_setVCoreDown(baseAddress, --actlevel);
        }
    }

    return ( status) ;
}