查看: 2726|回复: 1

手工计算时钟参数产生12.288MHz的I2S主机发送时钟

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32017
    最后登录
    2024-4-9
    发表于 2021-9-3 10:39:36 | 显示全部楼层 |阅读模式
    相信很多小伙伴在看到这个题目时,脑海中都会产生一个大大的问号。What?这都什么年代了,手工计算不是有些过时了吗,难道就没有软件工具能自动计算吗?莫急莫急,且听小编娓娓道来。


    其实,这篇文章源自于对客户Raser的技术支持。客户需求是这样子的: 外部晶振频率为12MHz, 音频采样频率Fs为48KHz,通过设置PLL和其他时钟分频器令LPC1765 I2S的主机发送时钟TX_MCLK为256Fs,即12.288MHz。

    为什么要手工计算


    初看这个需求,小编觉得这完全可以使用NXP配置MCU的神器MCUXpresso Config Tools。相信很多小伙伴对MCUXpresso Config Tools非常熟悉。这是一套集成有引脚工具、时钟工具、外设工具等的工具集,可以将引脚、时钟、外设等的配置,转换为C代码。最后,用户可以将工具生成的C代码添加到自己的应用之中。这不仅降低了NXP MCU的使用复杂度,还大大提高了客户产品的开发效率。其中,与时钟配置有关的界面如下图所示。
    12.png


    应该说,如果MCUXpresso Config Tools能够支持LPC1765, 这一切都迎刃而解。然而,截止到2021年7月,MCUXpresso Config Tools尚不支持LPC1765,信息来自于MCUXpresso Supported DevicesTable,链接: https://community.nxp.com/t5/MCU ... -Table/ta-p/1101007


    显然,我们无法借助自动化工具计算时钟参数以达到上述客户需求,唯有通过手工计算。

    I2S主机发送时钟TX_MCLK与哪些因素有关


    我们可以通过逆推法得到I2S主机发送时钟TX_MCLK与外部12MHz晶振频率的关系,从而确定需要配置哪些参数才能得到12.288MHz的TX_MCLK。


    首先,可以从LPC176x/5x参考手册(UM10360)得到TX_MCLK的计算公式,具体如下:
    13.png


    其中X和Y是I2TXRATE寄存器的位域,具体如下:
    14.png
    而PCLK_I2S是I2S外设时钟,其与CPU时钟CCLK的关系由PCLKSEL1寄存器确定,如下图所示。
    15.png
    那么,由此可知I2S外设时钟是由CPU时钟CCLK分频得到。更进一步,CCLK又是如何得到的呢?如下图所示,外部12MHz晶振的频率输入经过Main PLL(PLL0)倍频后再经CPU时钟频率分频器得到CCLK。
    16.png
    根据LPC176x/5x参考手册(UM10360)章节-4.5.10 PLL0 frequency calculation,我们可以得到MainPLL(PLL0)的输出PLLCLK与系统时钟sysclk(这里是外部12MHz晶振输入)的关系如下图所示。
    17.png
    至此,我们知道I2S主机发送时钟TX_MCLK与下列因素有关:


    ·外部时钟源输入FIN,这里采用12MHz外部晶振
    ·Main PLL (PLL0)的预分频系数N和乘法器系数M
    ·CPU时钟CCLK分频系数,这里记作CCLK_DIV
    ·I2S外设时钟PCLK_I2S分频系数,这里记作PCLK_I2S_DIV, 取值为1,2,4,8
    ·I2S TX_MCLK速率因子X和Y,Y应当大于或者等于X

    如何确定与I2S主机发送时钟TX_MCLK有关的时钟参数


    通过上面的分析,可以得到TX_MCLK的计算公式,推导过程如下:
    18.png
    上述公式给出了TX_MCLK与FIN、M、N 、CCLK_DIV、PCLK_I2S_DIV以及X和Y之间的关系。下面确定时钟参数时需要用到这个公式,因此提前列出。


    可能有的小伙伴看到这里就会问了,你说这么多还是没说到点子上啊,到底这些时钟参数该如何确定。莫急莫急,请听我慢慢道来。


    通过上面的分析,我们知道TX_MCLK来自Main PLL(PLL0)输出FPLLCLK的分频。首先,应当明确,只有找到整数的M和N,使得Main PLL(PLL0)输出FPLLCLK是12.288MHz的整数倍,才能最大程度减少TX_MCLK的频率偏移。有的小伙伴会说,12.288MHz的整数倍频率很多,我怎么知道选择哪一个。其实,如果小伙伴熟悉PLL运行原理和LPC1765 PLL这个IP的话,应当知道,PLL输出FPLLCLK有一个确定的频率范围。利用这个频率范围可以大大简化计算过程。LPC176x/5x参考手册(UM10360)中的章节-4.5.10 PLL0 frequency calculation描述了MainPLL (PLL0) 的输出频率范围。
    19.png
    看这里看这里,是的,您看到了,Main PLL (PLL0)的输出频率范围是275MHz~550MHz。接下来,我们在275MHz~550MHz范围内寻找12.288MHz的整数倍频率,结果如下:
    20.png
    通过上面的分析,Main PLL(PLL0)输出FPLLCLK由如下公式确定:
    21.png
    因此,Main PLL(PLL0)的乘法器系数M和预分频系数N的比值M/N由如下公式确定:
    22.png
    在得到M/N计算公式之后,根据上图所列的FPLLCLK取值,计算得到M/N、M和N的全部取值如下图所示。
    23.png
    到目前为止,我们得到22组M和N的取值。为了进一步缩小范围,我们可以利用PLL特性作为约束条件对这22组数据进行进一步筛选。根据LPC176x/5x参考手册(UM10360),可以得到如下与Main PLL(PLL0)有关的约束条件:


    ·PLL输入频率FIN的范围是32KHz ~ 50MHz, 这里采用12MHz满足要求。
    ·CCLK时钟频率FCCLK,对于LPC1769/LPC1759最大是120MHz, 其他LPC17xx系列最大是100MHz
    ·FPLLCLK频率范围是275 MHz 到550 MHz
    ·PLL输入频率FIN经过N分频后的输出,即参考频率FREF应当在100KHz到20MHz之间,否则PLL锁定不稳定
    ·PLL预分频系数N的取值范围是1~32, 乘法器系数M的取值分为higheroscillator frequencies(MHz)和low oscillatorfrequencies(KHz)两种情况, 前者的取值是6到512,后者参考数据表
    ·较小的 PLL 预分频系数N和乘法器系数M都会导致更好的 PLL 操作稳定性和更低的输出抖动。


    通过分析上述约束条件,我们可以得到N的取值在1~32,所以可以过滤掉N为125的


    取值情形,结果如下图所示。同时,根据最后一个约束条件,尽可能减少M和N的取值。
    24.png
    最终,我们确定PLL的输出FPLLCLK为307.2MHz, M取值64,N取值为5。该频率是TX_MCLK目标频率12.288MHz的25倍。为了确保FCCLK满足不超过100MHz的条件,CCLK_DIV取值为5,即FCCLK为FPLLCLK的5分频,也就是61.44MHz。又因为与TX_MCLK有关的因子Y应当大于或者等于X,所以Y取值5, X取值2,PCLK_I2S_DIV为1。


    最后,对与TX_MCLK有关的时钟参数取值进行总结如下:
    25.png
    上述时钟参数在程序中的设置如下图所示。
    26.png


    测试结果


    使用上述时钟参数设置,测量得到的TX_MCLK波形如下图所示。结果表明,实际测量结果与预期一致。
    27.png
    总结
    本文以LPC1765为例,经过一系列分析和推导,给出TX_MCLK与Main PLL预分频系数N、乘法器系数M、CPU时钟频率分频系数、I2S外设时钟频率分频系数、TX_MCLK速率因子X和Y的关系公式,并以PLL的正常运行条件作为约束,最终确定相关的时钟参数设置。


    本文的意义在于当无法使用自动配置工具计算相关时钟参数时,可以使用本文提供的方法推算相关时钟参数。



    本文虽然以LPC1765为例,但是对于其他LPC系列的MCU同样具有借鉴意义。

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2926

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7803
    最后登录
    2024-4-23
    发表于 2021-9-3 13:48:11 | 显示全部楼层
    很详细
    加油哦
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 21:01 , Processed in 0.115408 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表