乐鑫技术交流
直播中

三心四意

8年用户 825经验值
私信 关注
[问答]

i2s使用并口,i2s_parallel PLL_D2_CLK APLL_CLK频率怎么设置?

//Initialize I2S parallel device.
        //并行数据引脚,数位宽度,时钟等等
        i2s_parallel_config_t i2scfg={
                //.gpio_bus={2, 4, 5, 9, 10, 16,
                .gpio_bus={2, 4, 5, 9, 10, 16, 17, 32, 33, 18, 19, 21, 22, 23,
                #ifdef showDebugPulse
                -1, -1
                #else
                25, 26
                #endif
                },
                .bits=I2S_PARALLEL_BITS_16,
                //.bits=I2S_PARALLEL_BITS_8,
                //.clkspeed_hz=3333333, //3.33 MHz
                .clkspeed_hz=6200000, //3.33 MHz

其中并未提及PLL_D2_CLK  APLL_CLK频率怎么设置,官方除了cpu这块可以设置,并不提及外设是如可设置PLL_D2_CLK  APLL_CLK
FabGL  可以轻松使用 PLL_D2_CLK  APLL_CLK 做并行数据,官方怎么看都看不到相关例子,
是否有高手提供下 FabGL  相关i2s 并行数据处理的  esp-idf 的例子。
看了将近一个月的资料:
官方的汇编都没有,idf 如何用汇编来 做项目?
C 和c++ 一起混,太乱了。
整个文档相关联都没有,手册介绍汇编,官网介绍c 和  c++,看手册来做项目根本不行。
本人新手,c51相当熟,到这里直接翻车。无语
                                                                                                                                                                                 

回帖(1)

王伟

2024-6-14 16:49:41
I2S(Inter-IC Sound)是一种音频通信协议,用于在数字音频设备之间传输数据。在ESP32等微控制器上实现I2S并行通信时,需要配置一些参数,包括PLL(Phase-Locked Loop,锁相环)频率、APLL(Audio Phase-Locked Loop,音频锁相环)频率等。以下是如何设置这些参数的详细步骤:

1. **初始化I2S并行设备**:首先,需要定义一个`i2s_parallel_config_t`结构体,用于配置I2S并行设备的参数。

```c
i2s_parallel_config_t i2scfg = {
    // 配置GPIO引脚
    .gpio_bus = {2, 4, 5, 9, 10, 16, 17, 32, 33, 18, 19, 21, 22, 23},
    // 其他配置参数
};
```

2. **设置PLL频率**:PLL频率是I2S通信的基础时钟频率。在ESP32中,可以使用`esp_clk_apll_enable`函数来设置APLL频率。例如,如果需要设置APLL频率为44.1kHz(音频CD标准采样率),可以按照以下步骤进行:

```c
// 计算APLL的参数
uint8_t sdm0 = 255; // 0~255
uint8_t sdm1 = 1;   // 0或1
uint8_t o_div = 0;  // 0~3

// 根据需要的频率设置APLL参数
esp_clk_apll_enable(44100, sdm0, sdm1, o_div);
```

3. **设置I2S并行设备参数**:在`i2s_parallel_config_t`结构体中,可以设置数据宽度、时钟等参数。例如,设置数据宽度为16位,时钟为44.1kHz:

```c
i2scfg.data_width = I2S_DATA_WIDTH_16BIT;
i2scfg.clk_cfg = {
    .clk_src = I2S_CLK_SRC_PLL_D2,
    .clk_freq = 44100, // 采样率
    .clk_div = 1,      // 时钟分频
};
```

4. **初始化I2S并行设备**:使用`i2s_parallel_driver_install`函数来初始化I2S并行设备:

```c
i2s_parallel_driver_install(&i2scfg, 0, 10, NULL);
```

5. **使用I2S并行设备**:初始化完成后,可以使用`i2s_parallel_write`等函数来发送或接收数据。

请注意,上述代码示例仅供参考,实际应用中可能需要根据具体硬件和需求进行调整。例如,GPIO引脚配置、数据宽度、时钟频率等参数可能需要根据实际硬件连接和设计要求进行修改。
举报

更多回帖

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