以44.1 kHz,在CY8CPROTO-062-4343W板采样音频

简介

PSoC 6 Wi-Fi BT原型套件(CY8CPROTO-062-4343W)是PSoC 6入门开发板的经济之选。它具有许多功能,其中包括两个相距40毫米的PDM麦克风,用于立体声音频采样。这些采样可通过PDM-PCM转换器外设获取,本教程中将对该转换器进行配置,以便在标准速率44.1 kHz(与音频CD使用的速率相同)下收集采样。

ModusToolbox是PSoC 6系列的首选开发环境,因为其中包括PSoC 6 SDK和ModusToolbox IDE,而其本身也包含了适用于硬件和一些中间件的几个配置器。主要的配置器是器件配置器,它能极大地减少配置器件的系统功能和外设所需的工作量。开发人员可以使用图形界面来设置其配置参数,且该工具会在生成C代码之前对任何无效参数发送警告/错误。当然,这并不意味着开发人员完全不需要工作。器件配置器远非完美,除非是最基本的外设,否则可能需要参考架构技术参考手册(TRM)。以下教程将演示这两点。

流程

配置PDM-PCM外设

我们从最简单的步骤开始。TRM中的表31-1提供了如何针对几种标准采样率 ( fs)来配置PDM-PCM转换器的定时参数的示例。

要将fs = 44.1 kHz的值输入器件配置器中,请在ModusToolbox IDE中双击项目的design.modus文件。在“Peripherals”选项卡中,展开“Digital”资源并选择PDM-PCM Converter 0 。在“Parameters”窗口中,向下滚动到定时参数,并按图1中所示输入值。请注意,TRM的表31-1中存在错误。fs = 44.1 kHz的总除数比应为16,而不是32。这对配置没有影响,因为我们不会直接将该值输入器件配置器中,但这可能会造成困惑。

01_00
1 PDM-PCM转换器的定时参数

三个时钟除数将生成PDM_CKO 时钟信号,用于对外部PDM麦克风进行时钟控制,具体如下:

f_{PDM\_CKO}=\frac{f_{CLK−HF[1]}}{(CLK\_CLOCK\_DIV+1)(MCLKQ\_CLOCK\_DIV+1)(CKO\_CLOCK\_DIV+1)}

=\frac{45.1584 MHz}{(0+1)(1+1)(7+1)}=\frac{45.1584 MHz}{16}=2.8224 MHz

SINC_RATE 随后根据以下公式确定fs 的值:

f_s=\frac{f_{PDM\_CKO}}{2∗SINC\_RATE}=\frac{2.8224 MHz}{2∗(32)}=.0441 MHz

尽管本教程中未涉及,但还有其他几个参数需要设置PDM-PCM转换器,包括通道设置、滤波器首选项和中断触发器。有关这些属性的更多信息,请参阅TRM。

配置外设时钟

现在进入复杂的部分。如何得到fCLK-HF[1] = 45.1584 MHz?TRM的31.2.3节介绍了外部晶振(ECO)与锁相回路(PLL)结合的解决方案,我发现这个方法非常有效。要修改CLK-HF1 时钟的配置,请点击时钟参数的链式图标(图2)。

02_00
2 跳转到链式时钟信号的配置

这将打开“Platform”选项卡,其中包括配置系统时钟的选项以及其他选项。选项卡中心应该显示有交互式时钟图表,用于指示启用的时钟元素以及它们之间的连接方式。根据TRM的示例,我们希望内部连接如图3所示。

03_00
3 突出显示所需元素连接的时钟图表

我们将从路径的起点开始配置ECO。如果时钟图表中的ECO框不是绿色的,请双击以启用。请注意,“Parameters”窗口现在有几个可供我们更改的参数。这些是板上外部晶体的特性,在CY8CPROTO-062-4343W上是来自TXC的34.4064 MHz晶体。其零件编号为8Y34470001,而TXC 8Y系列规格书为我们提供了配置ECO外设所需的全部信息。然而,如果我们尝试在“Frequency (MHz)”字段中输入34.4064,我们会收到以下警告:

无法评估“ECO”上的参数“Frequency (MHz)”。‘34.41’不在参数“Frequency (MHz)”的合法范围[4.00-33.33]内。

这不是致命错误,因为如果输入的值为33.33而不是34.41,外设仍然可以正常工作,但这是非常烦人的问题,下面将详细介绍。输入此值和其他值之后,ECO的配置应该如图4所示。

04_00
4 最终ECO配置

接下来是PATH_MUX2多路复用器。在时钟图表中点击该元素以查看其参数。将Source Clock 值选择为“ECO”(图5)。

05_00
5 最终PATH_MUX2配置

接下来,在时钟图表中点击PLL1元素(如果未启用,请双击)以填充“Parameters”窗口。这就是输入33.33 MHz的ECO频率所产生的后果。请注意,Source Frequency 会自动填充为33.33 MHz。这是器件配置器认为PLL参考时钟频率(fref) 的值。配置器将执行以下计算来确定PLL的输出频率(显示在Actual Frequency 字段中):

f_{out}=\frac{f_{ref}∗FEEDBACK\_DIV}{REFERENCE\_DIV∗OUTPUT\_DIV}

默认情况下,Configuration 参数设置为“Automatic”,这意味着我们可以输入所需的输出频率,器件配置器将确定满足上述公式的最佳分频器值组合。但必须记住的是,它将使用33.33 MHz而不是实际的34.4064 MHz作为 fref 值进行计算。因此,我们不能将45.1584输入到Desired Frequency (MHz) 字段中,而必须使用以下计算得出的调整值:

\frac{34.4064 MHz}{33.33 MHz} = \frac{45.1584 MHz}{f_{out\_adjusted}}

f_{out\_adjusted}=43.745625 MHz

Desired Frequency (MHz) 字段中输入“43.745625”将得到如图6所示的配置。

06_00
6 最终PLL1配置

然后,我们可以使用实际的 fref值来确保通过此配置获得正确的输出。

f_{out\_actual}=\frac{f_{ref\_actual}∗FEEDBACK\_DIV}{REFERENCE\_DIV∗OUTPUT\_DIV}=\frac{(34.4064 MHz)∗(84)}{(8)∗(8)}=45.1584 MHz

因此,尽管Actual Frequency 字段可能显示为43.745625 MHz,但它实际上是我们所需的 45.1584 MHz

最后,在时钟图表中点击CLK_HF1元素。将Source Clock 值更改为“CLK_PATH2”,如图7所示。

07_00
7 最终CLK_HF1配置

选择File > Save,以保存配置并生成源代码。