帮我翻译一下代码void main(void) { InitPll(0x0A); } void InitPll(unsigned int val) { EALLOW; SysCtrlReg.PLLCR.bit.DIV=val; EDIS; }
时间: 2024-04-23 19:22:52 浏览: 101
这段代码的作用是初始化系统的 PLL(Phase-Locked Loop)时钟。它包含两个函数:main 和 InitPll。
main 函数中,调用了 InitPll 函数,并将参数值 0x0A 传入。这个参数值会被传递给 InitPll 函数,并作为 PLL 的分频系数。
InitPll 函数中,首先使用 EALLOW 宏打开了对系统控制寄存器的访问权限。然后,将传入的参数值 val 赋给了 SysCtrlReg.PLLCR 寄存器的 DIV 字段,从而设置了 PLL 的分频系数。最后,使用 EDIS 宏关闭了对系统控制寄存器的访问权限。
总之,这段代码的作用是设置系统的 PLL 时钟,使其按照指定的分频系数运行。
相关问题
设外部时钟为30兆赫兹若虚设定C P U的时钟频率为150兆赫兹那么初始化P L L C R寄存器的代码如下:void main(void) { InitPll(0x0A); } void InitPll(unsigned int val) { EALLOW; SysCtrlReg.PLLCR.bit.DIV=val; EDIS; }
如果外部时钟为30兆赫兹,虚设定 CPU 的时钟频率为 150 兆赫兹,那么初始化 PLLCR 寄存器的代码如下:
```
void main(void) {
// 将分频器的值设置为 4,使得 CPU 的时钟频率为 30 MHz * 5 / 4 = 37.5 MHz
InitPll(0x04);
}
void InitPll(unsigned int val) {
// 允许访问系统控制寄存器
EALLOW;
// 设置时钟分频器的值
SysCtrlReg.PLLCR.bit.DIV = val;
// 禁止访问系统控制寄存器
EDIS;
}
```
在这里,我们将分频器的值设置为 4,这样 CPU 的时钟频率就会变成 30 MHz * 5 / 4 = 37.5 MHz。注意,这里的 5 指的是 PLLCR 中的乘数因子,也就是我们虚设的 CPU 时钟频率除以外部时钟频率。由于我们虚设定的 CPU 时钟频率是 150 兆赫兹,所以乘数因子为 5。
帮我翻译一下代码void InitPll(unsigned int val) { volatile unsigned int i; EALLOW; SysCtrlRegs.PLLCR.bit.DIV = val; EDIS; DisableDog(); // Wait PLL lock cycles. for(i= 0; i< ( (131072/2)/12 ); i++) {;} } }
这段代码的作用是初始化PLL(相锁环),函数名为InitPll,参数为unsigned int类型的val。函数中使用了volatile unsigned int i来作为循环计数器,使用EALLOW和EDIS来打开和关闭系统控制寄存器的保护机制,使用SysCtrlRegs.PLLCR.bit.DIV = val来设置PLL的分频值。最后使用for循环等待PLL锁定,循环次数为131072/2/12,即等待PLL锁定的周期数。同时,函数中还调用了DisableDog函数来禁用看门狗。
阅读全文