//***************************************************************************** // //! \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) ; }