embedded - Atmel Cortex M4 SAM4S 处理器的 PMC 接口中启动时间变量的用途
问题描述
我正在为Atmel Cortex M4 SAM4S处理器设置系统时钟。对于主振荡器寄存器 ( CKGR_MOR
) 和 PLL 寄存器 ( CKGR_PLLxR
),都有变量(MOSCXTST
和PLLxCOUNT
,分别)允许指定更长的启动时间。将这些值设置为 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));
解决方案
推荐阅读
- html - 为什么我的 html 到 WordPress 转换主题的菜单不显示?
- vb.net - DrawString 上的文本未居中 vb.net
- typescript - NestJS:管道未应用于绑定的主体参数
- typescript - 打字稿错误地将元组推断为数组
- javascript - 在同一浏览器和新标签中打开 Cookie 横幅“隐私声明”
- javascript - 比较时间和日期是否包括在内?
- android - 在 Android MVVM 中,我需要创建多少个存储库和网络客户端来服务不同的查询?
- javascript - 对按名称分组的数字属性求和
- java - 在春天使用 cglib 的嵌套代理
- java - Docker 容器中的 FTP 上传文件失败