设外部时钟为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; }
时间: 2024-03-13 07:43:58 浏览: 19
如果外部时钟为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。
相关问题
设外部时钟为30兆赫兹若虚设定C P U的时钟频率为150兆赫兹那么初始化P L L C R寄存器。分频器的值怎么确定?
初始化 PLLCR 寄存器的分频器值需要满足以下条件:
1. CPU 的时钟频率必须小于或等于 150 兆赫兹;
2. CPU 的时钟频率必须是外部时钟频率的整数倍。
因此,我们可以先计算出 CPU 的时钟频率,然后根据这个频率计算出分频器的值。
由于外部时钟为 30 兆赫兹,虚设定 CPU 的时钟频率为 150 兆赫兹,因此 CPU 的时钟频率应该是 30 兆赫兹 * 5 = 150 兆赫兹。因此,分频器的值可以通过以下公式计算得出:
```
分频器的值 = (CPU 的时钟频率 / 外部时钟频率) - 1
= (150 MHz / 30 MHz) - 1
= 4
```
因此,初始化 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;
}
```
设外部时钟为30兆赫兹若虚设定C P U的时钟频率为150兆赫兹那么初始化P L L C R寄存器。分频器的值可以是0x0A嘛
分频器的值可以是 0x0A,但是这样设置会导致 CPU 的时钟频率超过了 150 兆赫兹,不符合我们虚设定的 CPU 时钟频率。具体来说,分频器的值为 0x0A 时,CPU 的时钟频率会变成 30 MHz * 11 / 10 = 33 MHz,明显低于我们期望的 150 兆赫兹。
因此,如果要将 CPU 的时钟频率虚设定为 150 兆赫兹,分频器的值应该是 4,而不是 0x0A。具体代码如下:
```
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;
}
```