📄 pmc.c
字号:
/*-----------------------------------------------------------------------------
* ATMEL Microcontroller Software Support - ROUSSET -
*-----------------------------------------------------------------------------
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*----------------------------------------------------------------------------
* File Name : pmc.c
* Object : PMC utilities function
* Creation : JPP
*----------------------------------------------------------------------------
*/
#include "project.h"
#include "pmc.h"
//*----------------------------------------------------------------------------
//* \fn AT91F_PMC_Change_PPLA
//* \brief Write a value to PLLA and wait Ready
//*----------------------------------------------------------------------------
void AT91F_PMC_Change_PPLA(unsigned int Value)
{
AT91C_BASE_CKGR->CKGR_PLLAR= Value;
// Wait until the master clock is established for the case we already
// turn on the PLL
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA));
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
}
//*----------------------------------------------------------------------------
//* \fn AT91F_PMC_Change_PPLB
//* \brief Write a value to PLLB and wait Ready
//*----------------------------------------------------------------------------
void AT91F_PMC_Change_PPLB(unsigned int Value)
{
AT91C_BASE_CKGR->CKGR_PLLBR= Value;
// Wait until the master clock is established for the case we already
// turn on the PLL
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB));
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
}
//*----------------------------------------------------------------------------
//* \fn AT91F_PMC_SwitchMasterClock
//* \brief Set the New CSS field to AT91C_PMC_MCKR And wait ready
//* Return the new master clock
//*----------------------------------------------------------------------------
unsigned int AT91F_PMC_SwitchMasterClock(unsigned int css)
{
unsigned int clock,mdiv;
*AT91C_PMC_MCKR = (*AT91C_PMC_MCKR &~AT91C_PMC_CSS) | css ;
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA));
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
mdiv= (*AT91C_PMC_MCKR >> 8) * 2;
if (mdiv == 0) mdiv =1;
clock = AT91F_PMC_GetProcessorClock(AT91C_BASE_PMC,AT91C_BASE_CKGR,AT91B_SLOW_OSC);
return clock/mdiv;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -