首页 > 解决方案 > Atmel Cortex M4 SAM4S 处理器的 PMC 接口中启动时间变量的用途

问题描述

我正在为Atmel Cortex M4 SAM4S处理器设置系统时钟。对于主振荡器寄存器 ( CKGR_MOR) 和 PLL 寄存器 ( CKGR_PLLxR),都有变量(MOSCXTSTPLLxCOUNT,分别)允许指定更长的启动时间。将这些值设置为 0 似乎不会影响性能,所以我想知道这些变量的目的是什么,以及如何选择正确的值。

这是我当前的代码,相关行标为(->)。

//setup clocks
//enable crystal oscillator
->  PMC->CKGR_MOR |= CKGR_MOR_KEY_PASSWD | CKGR_MOR_MOSCXTST(0) | CKGR_MOR_MOSCXTEN;
    while(!(PMC->PMC_SR & PMC_SR_MOSCXTS));
//switch to crystal oscillator
    PMC->CKGR_MOR |= CKGR_MOR_KEY_PASSWD | CKGR_MOR_MOSCSEL;
    while(!(PMC->PMC_SR & PMC_SR_MOSCSELS));
//measure frequency
    while(!(PMC->CKGR_MCFR & CKGR_MCFR_MAINFRDY));
    freq = PMC->CKGR_MCFR;
//configure PLLA
->  PMC->CKGR_PLLAR = CKGR_PLLAR_ONE | CKGR_PLLAR_MULA(20-1) | CKGR_PLLAR_PLLACOUNT(0) | CKGR_PLLAR_DIVA(1);
    while(!(PMC->PMC_SR & PMC_SR_LOCKA));
//set flash wait states
    EFC0->EEFC_FMR = EEFC_FMR_FWS(5) | EEFC_FMR_CLOE;
    EFC1->EEFC_FMR = EEFC_FMR_FWS(5) | EEFC_FMR_CLOE;
//set master clock to PLLA
//  PMC->PMC_MCKR = PMC_MCKR_PRES_CLK_2 | PMC_MCKR_CSS_MAIN_CLK;
//  while(!(PMC->PMC_SR & PMC_SR_MCKRDY));
//  PMC->PMC_MCKR = PMC_MCKR_PRES_CLK_2 | PMC_MCKR_CSS_PLLA_CLK;
//  while(!(PMC->PMC_SR & PMC_SR_MCKRDY));
    PMC->PMC_MCKR = PMC_MCKR_PLLADIV2 | PMC_MCKR_CSS_PLLA_CLK;
    while(!(PMC->PMC_SR & PMC_SR_MCKRDY));

标签: embeddedstartupatmel

解决方案


推荐阅读