乐鑫技术交流
直播中

贾小龙

7年用户 1637经验值
私信 关注
[问答]

在ESP32C3中如何设置CPU震荡源为内部PLL_CLK?

从你们的芯片手册中了解到,CPU可以由多个外部高性能时钟驱动,由一个寄存器来控制使用的是内部PLL_CLK还是外部晶振,默认是外部晶振。
那么我如果不放外部晶振,并且希望使用内部PLL_CLK的话该怎么实现?                                                                                                                                                
我看到RTC时钟的选择可以通过menuconfig配置,那么这个高性能时钟在哪里?
                                                                                                                                                                                                                        
               

回帖(1)

study875

2024-6-13 16:31:11
在ESP32-C3中,要设置CPU振荡源为内部PLL_CLK,您需要按照以下步骤操作:

1. **初始化内部RC振荡器**:ESP32-C3具有一个内置的RC振荡器,可以在没有外部晶振的情况下提供时钟源。首先,您需要初始化这个振荡器。

2. **配置PLL**:使用内部RC振荡器作为参考时钟,配置PLL以生成所需的CPU时钟频率。

3. **切换时钟源**:在ESP32-C3中,有一个寄存器(`ANA_CONF`)用于控制CPU时钟源。您需要设置这个寄存器以选择内部PLL_CLK作为CPU时钟源。

以下是具体的实现步骤:

### 步骤1:初始化内部RC振荡器

ESP32-C3的内部RC振荡器默认是启用的。如果需要调整其频率或性能,可以查看ESP-IDF文档中的相关配置。

### 步骤2:配置PLL

使用ESP-IDF提供的API来配置PLL。以下是一个示例代码片段,展示如何配置PLL:

```c
#include "esp32c3/rom/ets_sys.h"
#include "esp32c3/clk.h"

void configure_pll() {
    // 设置PLL的参考时钟为内部RC振荡器
    ets_update_cpu_clock(&rc_fast_clk);

    // 配置PLL参数,例如:乘数、分频等
    // 以下参数仅为示例,具体参数需要根据您的需求进行调整
    int rc32m_freq = 32000; // RC振荡器频率
    int cpu_freq = 160000000; // 目标CPU频率
    int div = 1; // 分频
    int mul = cpu_freq / (rc32m_freq * div);

    // 配置PLL
    xtal_freq = rc32m_freq;
    pll_freq = cpu_freq;
    pll_div = div;
    pll_mul = mul;

    // 启动PLL
    ets_update_cpu_clock(NULL);
}
```

### 步骤3:切换时钟源

在ESP32-C3中,`ANA_CONF`寄存器控制CPU时钟源的选择。以下是如何设置这个寄存器的示例:

```c
#include "esp32c3/analog.h"

void select_pll_clk() {
    // 读取ANA_CONF寄存器
    volatile uint32_t *ana_conf_reg = (volatile uint32_t*)ANA_CONF_REG;
    uint32_t ana_conf = READ_PERI_REG(ANA_CONF_REG);

    // 清除时钟源选择位
    ana_conf &= ~(ANA_CONF_PLL_I2S_DIV_MASK);

    // 设置使用PLL时钟源
    ana_conf |= ANA_CONF_PLL_I2S_DIV(1); // 根据需要设置分频

    // 写回ANA_CONF寄存器
    WRITE_PERI_REG(ANA_CONF_REG, ana_conf);
}
```

### 注意事项

- 确保在配置PLL之前,已经正确初始化了内部RC振荡器。
- 根据ESP32-C3的数据手册和ESP-IDF文档,调整PLL参数以满足您的具体需求。
- 在切换时钟源之前,确保PLL已经稳定并输出所需的频率。

通过以上步骤,您应该能够成功地将ESP32-C3的CPU时钟源设置为内部PLL_CLK。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分