ARM内核及8路PFD频率怎么配置

描述

芯片要工作就需要读取指令,解析指令然后运行指令,需要在某种固定的周期性运动的设备驱动下有条不紊的进行,它就是频率

默认情况下I.MX6ULL工作在默认频率下(396MHz),工作频率相对保守。为了更好发挥I.MX6ULL的性能,需要对它的时钟频率进行配置。I.MX6ULL开发手册标注的内核最高频率支持528MHz,实际上它还可以超频到696MHz。

配置内核频率

I.MX6ULL支持24MHz32.768kHz两个OSC,32.768为低频率,目前使用的所有时钟来源都是24MHz

指令从上面这张图可以看出,pll1_sw_clk是进入到内核频率的,通过CCSRpll1_sw_clk_sel来选择到底使用哪一路作为最终进入ARM内核频率。step_clk在这里通过CCSRstep_sel选择为与OSC相同频率24MHz,它主要是用于在配置pll1_main_clk时的备用频率使用。

  • 读取CCSR的第2位值,如果是0表示当前选择的是pll1_main_clk,需要将它切换到step_clk,同时将step_clk选择成24MHz频率
/// CCM->CCSR的第二位判断是否选择的是pll1_main_clk(值是0)
if (((CCM->CCSR >> 2) & 0x1) == 0)
{
    /// 需要先切换时钟源到24MHz晶振
    CCM->CCSR &= ~(1 << 8);
    CCM->CCSR |= (1 << 2);
}
  • 配置CCM_ANALOG_PLL_ARMn寄存器

    /// bit 13: enable register
      /// 配置(696MHz)
      CCM_ANALOG->PLL_ARM = (1 << 13) | (58);
      /// 分频器配置为1
      CCM->CACRR = 0;
      /// 将时钟源切换回CCSR的第二位判断是否选择的是pll1_main_clk
      CCM->CCSR &= ~(1 << 2);
    

    这里配置了一个超频数值696MHz

    8路FPD配置

    • BYPASS_CLK_ SRC(15 - 14)配置成0x0,即选择使用24MHz作为时钟源
    • ENABLE(13)配置成1即使能时钟频率输出
    • DIV_SELECT按公式(PLL output frequency = Fref * DIV_SEL/2)配置
    • CCMCACRR的1-3位配置分频器的值
    • 配置完成切换回pll1_main_clk

到目前为止,会使用到的PLL除了内核以外还有PLL2PLL3PLL2PLL3是固定的频率,但他们都各分出去了4路FPD是可以灵活配置的。指令上面红色框里面看到的就是。分别有两个寄存器控制,PLL2CCM_ANALOG_PFD_528n, PLL3CCM_ANALOG_PFD_480n。配置的公式是 528(480) * 18 / 实际频率,具体配置代码如下:

/// 配置PPL2(528MHz)的PFD0 ~ FPD3
int reg = CCM_ANALOG->PFD_528;
/// PFD0: 352MHz
reg |= (27 << 0);
/// PFD1: 594MHz
reg |= (16 << 8);
/// PFD2: 396MHz
reg |= (24 << 16);
/// PFD3: 297MHz
reg |= (32 << 24);
CCM_ANALOG->PFD_528 = reg;
/// 配置PPL3(480MHz)的PFD0 ~ FPD3
reg = CCM_ANALOG->PFD_480;
/// PFD0: 720MHz
reg |= (12 << 0);
/// PFD1: 540MHz
reg |= (16 << 8);
/// PFD2: 508.2MHz
reg |= (17 << 16);
// PFD3: 454.7MHz
reg |= (19 << 24);
CCM_ANALOG->PFD_480 = reg;

配置完成后,烧写后可看到实验07中的LED0BEEP闪灯与响声的频率更高了,这是由于内核工作在了更高的频率。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分