本文主要针对IMX6ULL芯片的时钟系统进行分析,并没有针对哪款开发板,毕竟是芯片的问题。

一、硬件原理图分析

对于IMX6ULL芯片有两个时钟源,我使用的开发板是百问网IMX6ULL,其他IMX6ULL开发板应该也是如此,两个时钟源如下图所示,

1. 32.768KHz的晶振是供给RTC使用。

2. 24MHz的晶振接到了开发板的T16和T17引脚供给给开发板使用,作为初始时钟,IMX6ULL后面的一系列时钟都是围绕着这颗24MHz的晶振展开。

二、IMX6U时钟系统分析

2.1 IMX6U的7路PLL

IMX6U时钟系统是一个相对复杂的系统,由于IMX6U的外设系统相当丰富,也就会涉及到不同的外设会使用到不同的时钟。IMX6U芯片为了方便生成时钟,IMX6U从24MHz的晶振中生出来了7路PLL,每个PLL对应一种时钟。另外,这7路的PLL中有的又会生出来PFD,同样也对应着不同频率的时钟。

根据IMX6ULL芯片的参考手册,可以看到,芯片已经对生出来的7路PLL进行了安排。

  • PLL1:ARM PLL供给给ARM内核使用。
  • PLL2:Sysytem PLL,528MHz,528_PLL,此路PLL分出了4路PFD,分别为PLL2_PFD0~PFD3。
  • PLL3:USB1 PLL,480MHz 480_PLL,此路PLL分出了4路PFD,分别为PLL3_PFD0~PFD3。
  • PLL4:Audio PLL,主供音频使用。
  • PLL5:Video PLL,主供视频外设,比如RGB LCD接口,和图像处理有关的外设。
  • PLL6:ENET PLL,主供网络外设。
  • PLL7: USB2_PLL ,480MHz,无PFD。

后面也会结合时钟树来说明,PLL的作用是什么,现在我们只需要知道,我们从24MHz的晶振倍频后生出了7路不同频率的时钟。

2.1.1 PLL1时钟 ARM PLL

PLL1时钟也可以称为ARM PLL时钟,该锁相环是从24MHz的参考时钟合成的低抖动时钟。ARM PLL锁相环范围的输出频率从650MHz到1.3GHz。而输出频率是由7位寄存器字段CCM_ANALOG_PLL_ARM[DIV_SELECT]来确定的。

ARM PLL输出频率的计算公式: PLL output frequency = Fref * DIV_SEL/2

2.1.2 PLL2时钟 System PLL

System PLL只能在528MHz的默认频率下运行。此 PLL 分出了 4 路 PFD,分别为: PLL2_PFD0~PLL2_PFD3,这 4 路 PFD 和 528_PLL共同作为其它很多外设的根时钟源。通常 528_PLL和这4路PFD是I.MX6U 内部系统总线的时钟源,比如内处理逻辑单元、 DDR 接口、 NAND/NOR 接口等等。

2.1.3 PLL3时钟 USB PLL

USB PLL的输出频率是480MHz,是固定的 20 倍频,该PLL应该使用该默认频率。

2.2 各路PLL分出的PFD

根据IMX6ULL的参考手册,我们可以知道,PFD是在PLL的基础之上再一次进行分频而产生的,目前只有PLL2与PLL3会产生有PFD

其实PLL与PFD是一样的,都是产生时钟用的。

2.3 时钟树

IMX6U的时钟树是相对复杂的,毕竟有这么多的外设呢。但将时钟树拆开来看,并没有想象中的复杂。根据上面的图,将时钟树分成了三个部分,就是上面用红色框框出来的部分,CLOCK SWITCHERCLOCK ROOT GENERATORSYSTEM CLOCKS这三个部分。其中左边的 CLOCK_SWITCHER 就是我们上一小节讲解的那 7 路 PLL 和8 路 PFD,右边的 SYSTEM CLOCKS 就是芯片外设,中间的 CLOCK ROOT GENERATOR 是最复杂的!这一部分就像“月老”一样, 给左边的CLOCK_SWITCHER和右边的SYSTEM CLOCKS进行牵线搭桥。外设时钟源是有多路可以选择的, CLOCK ROOT GENERATOR 就负责从 7 路PLL 和 8 路 PFD 中选择合适的时钟源给外设使用。

具体操作肯定是设置相应的寄存器,我们以ESAI 这个外设为例,

在该图中一共分成了三个部分。

  1. 第一部分是时钟源选择器,从上面图可看到,ESAI有4个可以选的时钟源,顺着线的颜色向上面找分别是:PLL4、PLL5、PLL3_PFD2和pll3_sw_clk。具体选择哪一路来作为ESAI的时钟源是由寄存器CCM->CSCMR2的ESAI_CLK_SEL位来决定的,用户自行进行配置。
  2. 第二部分是ESAI时钟的前级分频分频值由寄存器 CCM_CS1CDR 的 ESAI_CLK_PRED来确定的,可设置 1~8 分频,假如现在 PLL4=650MHz,我们选择 PLL4 作为 ESAI 时钟,前级分频选择 2 分频,那么此时的时钟就是 650/2=325MHz
  3. 此部分又是一个分频器,对第二部分中输出的时钟进一步分频,分频值由寄存器CCM_CS1CDR 的 ESAI_CLK_PODF 来决定,可设置 1~8 分频。假如我们设置为 8 分频的话,经过此分频器以后的时钟就是 325/8=40.625MHz。因此最终进入到 ESAI 外设的时钟就是40.625MHz。

三、IMX6U时钟系统配置

3.1 系统主频配置

IMX6U的时钟系统的组成已经详细讲解过了,其他的外设的设置方式与ESAI类似的。

下面就是我们对IMX6U时钟频率的设置了。假设,我们将IMX6U的主频设置为528MHz,下面是ARM时钟频率的时钟树。

  1. 内核时钟源来自于PLL1,假设此时的PLL1设置为996MHz。
  2. 通过寄存器 CCM_CACRR 的 ARM_PODF 位对 PLL1 进行分频,可选择 1/2/4/8 分频,假如我们选择 2 分频,那么经过分频以后的时钟频率是 996/2=498MHz。
  3. 大家不要被此处的 2 分频给骗了,此处没有进行 2 分频。
  4. 经过第2步 2 分频以后的 498MHz 就是 ARM 的内核时钟,也就是 I.MX6U 的主频。

经过上面几步的分析可知,假如我们要设置内核主频为 528MHz,那么 PLL1 可以设置为1056MHz,寄存器 CCM_CACRR 的 ARM_PODF 位设置为 2 分频即可。同理,如果要将主频设置为 696MHz,那么 PLL1 就可以设置为 696MHz, CCM_CACRR 的 ARM_PODF 设置为 1 分频即可。现在问题很清晰了,寄存器 CCM_CACRR 的 ARM_PODF 位很好设置, PLL1 的频率可以通过寄存器 CCM_ANALOG_PLL_ARMn 来设置。接下来详细的看一下 CCM_CACRR 和CCM_ANALOG_PLL_ARMn 这两个寄存器,

CCM_CACRR 寄存器结构如图所示

寄存器 CCM_CACRR 只有 ARM_PODF 位,可以设置为 0~7,分别对应 1~8 分频。如果要设置为2分频的话CCM_CACRR就要设置为1。

CCM_ANALOG_PLL_ARMn此寄存器结构如图所示

在寄存器 CCM_ANALOG_PLL_ARMn 中重要的位如下:

ENABLE:时钟输出使能位,此位设置为 1 使能 PLL1 输出,如果设置为 0 的话就关闭 PLL1
输出。

DIV_SELECT:此位设置 PLL1 的输出频率,可设置范围为:54~108,PLL1 CLK = Fin * div_seclec/2.0,Fin=24MHz。如果 PLL1 要输出 1056MHz 的话,div_select 就要设置为 88。

在修改 PLL1 时钟频率的时候我们需要先将内核时钟源改为其他的时钟源, PLL1 可选择的时钟源如图

  1. pll1_sw_clk 也就是 PLL1 的最终输出频率。
  2. 此处是一个选择器,选择 pll1_sw_clk 的时钟源,由寄存器 CCM_CCSR 的PLL1_SW_CLK_SEL 位决定 pll1_sw_clk 是选择 pll1_main_clk 还是 step_clk。正常情况下应该选择 pll1_main_clk,但是如果要对 pll1_main_clk(PLL1)的频率进行调整的话,比如我们要设置PLL1=1056MHz,此时就要先将 pll1_sw_clk 切换到 step_clk 上。等 pll1_main_clk 调整完成以后再切换回来。
  3. 此处也是一个选择器,选择 step_clk 的时钟源,由寄存器 CCM_CCSR 的 STEP_SEL 位来决定step_clk是选择osc_clk还是secondary_clk。一般选择osc_clk,也就是 24MHz 的晶振。

这里我们就用到了一个寄存器 CCM_CCSR,此寄存器结构如图所示,

寄存器 CCM_CCSR 我们只用到了 STEP_SEL、 PLL1_SW_CLK_SEL 这两个位,一个是用来选择 step_clk 时钟源的,一个是用来选择 pll1_sw_clk 时钟源的。

到这里,修改 I.MX6U 主频的步骤就很清晰了,修改步骤如下:

  1. 设置寄存器 CCSR 的 STEP_SEL 位,设置 step_clk 的时钟源为 24M 的晶振。
  2. 设置寄存器 CCSR 的 PLL1_SW_CLK_SEL 位,设置 pll1_sw_clk 的时钟源为step_clk=24MHz,通过这一步我们就将 I.MX6U 的主频先设置为 24MHz,直接来自于外部的24M 晶振。
  3. 设置寄存器 CCM_ANALOG_PLL_ARMn,将 pll1_main_clk(PLL1)设置为 1056MHz。
  4. 设置寄存器 CCSR 的 PLL1_SW_CLK_SEL 位,重新将 pll1_sw_clk 的时钟源切换回pll1_main_clk,切换回来以后的 pll1_sw_clk 就等于 1056MHz。
  5. 最后设置寄存器 CCM_CACRR 的 ARM_PODF 为 2 分频, I.MX6U 的内核主频就为1056/2=528MHz。

具体的代码设置如下:

    /* 初始化6U的主频为528MHz */if(((CCM->CCSR >> 2) & 0X1) == 0) /* 当前时钟使用pll1_main_clk也就是PLL1 */{CCM->CCSR &= ~(1 << 8); /* 设置step_clk = osc_clk=24M */CCM->CCSR |= (1 << 2);  /* pll1_sw_clk=step_clk=24MHz */}/* 设置PLL1=1056MHz */CCM_ANALOG->PLL_ARM = (1 << 13) | ((88 << 0) & 0x7f);CCM->CACRR = 1; /* 设置2分频 */CCM->CCSR &= ~(1 << 2); /* 设置pll1_sw_clk=pll1_main_clk=1056MHz */

3.2 各个PFD时钟设置

设置好主频以后我们还需要设置好其他的 PLL 和 PFD 时钟, PLL1 上一小节已经设置了,PLL2、 PLL3 和 PLL7 固定为 528MHz、 480MHz 和 480MHz, PLL4~PLL6 都是针对特殊外设的,用到的时候再设置。因此,接下来重点就是设置 PLL2 和 PLL3 的各自 4 路 PFD, NXP 推荐的这 8 路 PFD 频率如下,

PFD NXP推荐频率值
PLL2_PFD0 352MHz
PLL2_PFD1 594MHz
PLL2_PFD2 400MHz(实际为396MHz)
PLL2_PFD3 297MHz
PLL3_PFD0 720MHz
PLL3_PFD1 540MHz
PLL3_PFD2 508.2MHz
PLL3_PFD3 454.7MHz

先设置 PLL2 的 4 路 PFD 频率,用到寄存器是 CCM_ANALOG_PFD_528n,寄存器结构如图

寄存器 CCM_ANALOG_PFD_528n 其实分为四组,分别对应PFD0~PFD3,每组 8 个 bit,我们就以 PFD0 为例,看一下如何设置 PLL2_PFD0 的频率。 PFD0对应的寄存器位如下:

PFD0_FRAC:PLL2_PFD0 的分频数, PLL2_PFD0 的计算公式为 528*18/PFD0_FRAC,此为 可 设 置 的 范 围 为 12~35 。 如 果 PLL2_PFD0 的 频 率 要 设 置 为 352MHz 的 话PFD0_FRAC=528*18/352=27。

PFD0_STABLE:此位为只读位,可以通过读取此位判断 PLL2_PFD0 是否稳定。

PFD0_CLKGATE:PLL2_PFD0 输出使能位,为 1 的时候关闭 PLL2_PFD0 的输出,为 0 的
时候使能输出。

如果我们要设置 PLL2_PFD0 的频率为 352MHz 的话就需要设置 PFD0_FRAC 为 27,PFD0_CLKGATE 为 0 。 PLL2_PFD1~PLL2_PFD3 设 置 类 似 , 频 率 计 算 公 式 都 是528*18/PFDX_FRAC(X=1~3) , 因 此 PLL2_PFD1=594MHz 的 话 , PFD1_FRAC=16;PLL2_PFD2=400MHz 的话 PFD2_FRAC 不能整除,因此取最近的整数值,即PFD2_FRAC=24,这样 PLL2_PFD2 实际为 396MHz; PLL2_PFD3=297MHz 的话, PFD3_FRAC=32。

接 下 来 设 置 PLL3_PFD0~PLL3_PFD3 这 4 路 PFD 的 频 率 , 使 用 到 的 寄 存 器 是
CCM_ANALOG_PFD_480n,此寄存器结构如图所示,

寄存器 CCM_ANALOG_PFD_480n 和 CCM_ANALOG_PFD_528n的结构是一模一样的,只是一个是 PLL2 的,一个是 PLL3 的。寄存器位的含义也是一样的,只是 频 率 计 算 公 式 不 同 , 比 如 PLL3_PFDX=480*18/PFDX_FRAC(X=0~3) 。 如果PLL3_PFD0=720MHz 的话,PFD0_FRAC=12;如果 PLL3_PFD1=540MHz 的话, PFD1_FRAC=16;如果PLL3_PFD2=508.2MHz 的话, PFD2_FRAC=17; 如果 PLL3_PFD3=454.7MHz 的话,PFD3_FRAC=19。

具体的程序如下:

    /* 设置PLL2的4路PFD */reg = CCM_ANALOG->PFD_528;reg &= ~(0x3F3F3F3F);reg |= (32 << 24);                    /* PLL2_PFD3=297MHz*/reg |= (24 << 16);                     /* PLL2_PFD2=396MHz*/reg |= (16 << 8);                     /* PLL2_PFD1=594MHz*/reg |= (27 << 0);                      /* PLL2_PFD0=352MHz*/CCM_ANALOG->PFD_528 = reg;/* 设置PLL3的4路PFD */reg = 0;reg = CCM_ANALOG->PFD_480;reg &= ~(0x3F3F3F3F);reg |= (19 << 24);                    /* PLL3_PFD3=454.7MHz*/reg |= (17 << 16);                     /* PLL3_PFD2=508.2MHz*/reg |= (16 << 8);                     /* PLL3_PFD1=540MHz*/reg |= (12 << 0);                      /* PLL3_PFD0=720MHz*/CCM_ANALOG->PFD_480 = reg;

3.3 其他外设时钟源配置

7 路 PLL 和 8 路 PFD 设置完成以后最后还需要设置 AHB_CLK_ROOT 和 IPG_CLK_ROOT
的时钟, I.MX6U 外设根时钟可设置范围如图所示:

上图中给出了大多数外设的根时钟设置范围, AHB_CLK_ROOT 最高可以设置 132MHz,IPG_CLK_ROOT和PERCLK_CLK_ROOT最高可以设置66MHz。那我们就将AHB_CLK_ROOT、IPG_CLK_ROOT 和 PERCLK_CLK_ROOT 分 别 设 置 为 132MHz、66MHz、66MHz。AHB_CLK_ROOT 和 IPG_CLK_ROOT 的设计如图所示,

与时钟树的图对应

上图就是AHB_CLK_ROOT 和 IPG_CLK_ROOT 的时钟图,图中分为了部分。

  1. 此选择器用来选择 pre_periph_clk 的时钟源,可以选择 PLL2、 PLL2_PFD2、 PLL2_PFD0和 PLL2_PFD2/2。寄存器 CCM_CBCMR 的 PRE_PERIPH_CLK_SEL 位决定选择哪一个,默认选择 PLL2_PFD2,因此 pre_periph_clk=PLL2_PFD2=396MHz。
  2. 此选择器用来选择 periph_clk 的时钟源,由寄存器 CCM_CBCDR 的 PERIPH_CLK_SEL位与 PLL_bypass_en2 组成的或来选择。当 CCM_CBCDR 的 PERIPH_CLK_SEL 位为 0 的时候periph_clk=pr_periph_clk=396MHz。
  3. 通过 CBCDR 的 AHB_PODF 位来设置 AHB_CLK_ROOT 的分频值,可以设置 1~8 分频,如果想要 AHB_CLK_ROOT=132MHz 的话就应该设置为 3 分频: 396/3=132MHz。图中虽然写的是默认 4 分频,但是 I.MX6U 的内部 boot rom 将其改为了 3 分频!
  4. 通过 CBCDR 的 IPG_PODF 位来设置 IPG_CLK_ROOT 的分频值,可以设置 1~4 分频,IPG_CLK_ROOT 时钟源是 AHB_CLK_ROOT,要想 IPG_CLK_ROOT=66MHz 的话就应该设置2 分频: 132/2=66MHz。

最后要设置的就是 PERCLK_CLK_ROOT 时钟频率,其时钟结构图如图所示,

PERCLK_CLK_ROOT 来 源 有 两 种 : OSC(24MHz) 和IPG_CLK_ROOT,由寄存器 CCM_CSCMR1 的 PERCLK_CLK_SEL 位来决定,如果为 0 的话PERCLK_CLK_ROOT 的 时 钟 源 就 是 IPG_CLK_ROOT=66MHz 。 可以通过寄存器CCM_CSCMR1 的 PERCLK_PODF 位来设置分频,如果要设置 PERCLK_CLK_ROOT 为 66MHz的话就要设置为 1 分频。

在上面的设置中用到了三个寄存器: CCM_CBCDR、 CCM_CBCMR 和 CCM_CSCMR1,我
们依次来看一下这些寄存器, CCM_CBCDR 寄存器结构如图所示

寄存器 CCM_CBCDR 各个位的含义如下:
PERIPH_CLK2_PODF:periph2 时钟分频,可设置 0~7,分别对应 1~8 分频。
PERIPH2_CLK_SEL:选择 peripheral2 的主时钟,如果为 0 的话选择 PLL2,如果为 1 的
话选择 periph2_clk2_clk。修改此位会引起一次与 MMDC 的握手,所以修改完成以后要等待握
手完成,握手完成信号由寄存器 CCM_CDHIPR 中指定位表示。
PERIPH_CLK_SEL: peripheral 主时钟选择,如果为 0 的话选择 PLL2,如果为 1 的话选
择 periph_clk2_clock。修改此位会引起一次与 MMDC 的握手,所以修改完成以后要等待握手完
成,握手完成信号由寄存器 CCM_CDHIPR 中指定位表示。
AXI_PODF: axi 时钟分频,可设置 0~7,分别对应 1~8 分频。
AHB_PODF: ahb 时钟分频,可设置 0~7,分别对应 1~8 分频。修改此位会引起一次与MMDC 的握手,所以修改完成以后要等待握手完成,握手完成信号由寄存器 CCM_CDHIPR 中指定位表示。
IPG_PODF: ipg 时钟分频,可设置 0~3,分别对应 1~4 分频。
AXI_ALT_CLK_SEL: axi_alt 时钟选择,为 0 的话选择 PLL2_PFD2,如果为 1 的话选择
PLL3_PFD1。
AXI_CLK_SEL: axi 时钟源选择,为 0 的话选择 periph_clk,为 1 的话选择 axi_alt 时钟。
FABRIC_MMDC_PODF: fabric/mmdc 时钟分频设置,可设置 0~7,分别对应 1~8 分频。
PERIPH2_CLK2_PODF: periph2_clk2 的时钟分频,可设置 0~7,分别对应 1~8 分频。

接下来看一下寄存器 CCM_CBCMR,寄存器结构如图所示,

寄存器 CCM_CBCMR 各个位的含义如下:

LCDIF1_PODF: lcdif1 的时钟分频,可设置 0~7,分别对应 1~8 分频。
PRE_PERIPH2_CLK_SEL: pre_periph2 时钟源选择, 00 选择 PLL2, 01 选择 PLL2_PFD2,
10 选择 PLL2_PFD0, 11 选择 PLL4。
PERIPH2_CLK2_SEL: periph2_clk2 时钟源选择为 0 的时候选择 pll3_sw_clk,为 1 的时候
选择 OSC。
PRE_PERIPH_CLK_SEL: pre_periph 时钟源选择,00 选择 PLL2,01 选择 PLL2_PFD2,10 选择 PLL2_PFD0,11 选择 PLL2_PFD2/2。
PERIPH_CLK2_SEL: peripheral_clk2 时钟源选择, 00 选择 pll3_sw_clk, 01 选择 osc_clk,
10 选择 pll2_bypass_clk。

最后看一下寄存器 CCM_CSCMR1,寄存器结构如图所示,

此寄存器主要用于外设时钟源的选择,比如 QSPI1、 ACLK、 GPMI、 BCH 等外设,我们重点看一下下面两个位:

PERCLK_CK_SEL: perclk 时钟源选择,为 0 的话选择 ipg clk,为 1 的话选择 osc clk。
PERCLK_PODF: perclk 的时钟分频,可设置 0~7,分别对应 1~8 分频。

在修改如下时钟选择器或者分频器的时候会引起与 MMDC 的握手发生:
①、 mmdc_podf
②、 periph_clk_sel
③、 periph2_clk_sel
④、 arm_podf
⑤、 ahb_podf
发生握手信号以后需要等待握手完成,寄存器 CCM_CDHIPR 中保存着握手信号是否完成,如果相应的位为 1 的话就表示握手没有完成,如果为 0 的话就表示握手完成。

对应的程序编写如下:

    /* IPG_CLK_ROOT=66MHz */CCM->CBCDR &= ~(3 << 8);CCM->CBCDR |= (1 << 8); /* IPG_CLK_ROOT=AHB_CLK_ROOT/2=132/2=66MHz *//* PERCLK_CLK_ROOT=66MHz */CCM->CSCMR1 &= ~(1 << 6);   /* PERCLK_CLK_ROOT时钟源为IPG_CLK=66mhZ */CCM->CSCMR1 &= ~(0x3f << 0); /* 1分频,PERCLK_CLK_ROOT=66mHZ *//* 设置UART根时钟为pll3_80M=80M */CCM->CSCDR1 &= ~ (1 << 6);  /* UART_CLK_ROOT=80M */CCM->CSCDR1 &= ~0X3F;       /* 1分频 *//* 设置ECSPI根时钟为PLL3_60MHz */CCM->CSCDR2 &= ~(1 << 18);  /* ECSPI时钟源为PLL3_60M */CCM->CSCDR2 &= ~(0X3F << 19); /* 1分频 */

NXP IMX6ULL芯片时钟系统全概况相关推荐

  1. 国产办公计算机,国内第一台纯国产计算机在重庆下线,芯片、系统全是纯国产...

    原标题:国内第一台纯国产计算机在重庆下线,芯片.系统全是纯国产 国内第一台纯国产的计算机"天玥"在重庆下线,用的是国产的龙芯处理器.国产的中标麒麟操作系统,搭配国产的办公软件,替代 ...

  2. STM32F407ZGT6芯片时钟系统模块介绍

    STM32F4时钟系统的知识在<STM32F4中文参考手册>第六章复位和时钟控制章节有非常详细的讲解,网上关于时钟系统的讲解也有很多,讲不出啥特色,时钟模块是芯片非常重要的组成部分,我们必 ...

  3. 体验首款Linux消费级平板,原来芯片和系统全是国产

    晓查 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 国产OS,国产芯片,号称可以写代码,以生产力平板热议于海外的JingPad-- 真的有那么神吗? 不久前,我们介绍了由中国创业团队打造 ...

  4. IMX6ULL学习笔记(19)——时钟系统

    一.时钟系统简介 I.MX6U 的系统主频为 528MHz,有些型号可以跑到 696MHz,但是默认情况下内部 boot rom 会将 I.MX6U 的主频设置为 396MHz.我们在使用 I.MX6 ...

  5. ARM芯片的时钟系统详解(S5PV210芯片)

    1.时钟介绍 时钟是同步工作系统的同步节拍,时钟的快慢就是我们常说的工作频率,以赫兹(HZ)为单位.时钟系统指导器件的运行,我们分析器件的工作特性时,常常会看器件的时序图,时序图中的时钟周期就是时钟系 ...

  6. NXP S32K1 时钟系统

    概述 本文通过剖析NXP S32K1 时钟分布.SCG.PCC等,加深对MCU时钟系统的了解,避免今后开发在小细节上踩坑. SCG (System Clock Generator) 模块用以产生设备的 ...

  7. 第三篇,芯片启动和时钟系统

    芯片启动和时钟系统 1.芯片启动 首先stm32会根据启动方式(参考手册2.4节)从启动位置加载启动代码到内存中,之后开始执行启动代码,一般启动代码使用官方提供的即可 ---------- xxx.s ...

  8. 教你如何快速了解一款芯片的时钟系统

    时钟在芯片运行中的地位如同心脏在人体中的地位.所以好代码的前提自然需要一个配置正确的时钟!时钟乱了,代码九重天都能飞上去!     但是一款芯片的时钟系统是复杂的,我们需要时间去了解,尤其在涉及到带睡 ...

  9. imx6ull移植Linux系统第二篇——Linux内核的移植

    imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...

  10. ISE FPGA时钟系统

    在使用QuartusII设计Altera的FPGA时,对于时钟的考虑一般很少.我们想得到一个固定频率的时钟,无非就是将晶振从某个时钟管脚输入:若晶振频率即为期望频率,则可以直接使用:若与期望频率不符, ...

最新文章

  1. 数学之美系列 4 -- 怎样度量信息?
  2. DNN模块开发入门指导
  3. HOWTO:如何在代码中获取安装包目标机上的Windows Installer(MSI)版本
  4. gradle项目搭建
  5. 走入PHP-类与对象
  6. fanuc机器人刷机教程_发那科Fanuc机器人编程操作视频教程
  7. 问题:C语言习题5.22 - 学生成绩的处理
  8. 慕课马尔萨斯人口模型
  9. sql 多表连接多条件匹配查询,按匹配度排序
  10. Prolog语言及程序设计汇总
  11. 删除Windows中设备与驱动器下的多余图标
  12. 双系统平板电脑android升级吗,平板电脑双系统好不好 平板电脑双系统优缺点【详细介绍】...
  13. PHP实现货币换算的方法
  14. Java数据库插入记录的语句-单引号-双引号values('username+'-'+password
  15. 郭逸淵:4月6日比特幣(BTC)以太坊(ETH)行情分析及布局思路
  16. 一文彻底读懂三极管的工作原理,最通俗的解释,看完就明白了!
  17. 第一章:电子商务的概述
  18. 第4章 软件的设计——总体设计与详细设计
  19. 【iCore3 双核心板】【发布基于 iCore3的显示模块(包含7寸屏,4.3寸屏,vga模块等】...
  20. 【FPGA,MPPT】基于FPGA的MPPT最大功率跟踪系统verilog开发

热门文章

  1. 计算机的进制的转换公式,计算机进制转换公式
  2. NiFi ListSFTP精讲
  3. 维宏控制卡win7 驱动_雕刻机专用维宏5.55运动驱动控制卡
  4. 微信小程序模仿购物车页面
  5. word 导出编辑ftl_word文档如何变为ftl word文档转化成ftl文件
  6. Silvaco仿真学习
  7. 中国十大骨干网,了解互联网的真实结构
  8. Python:火山小视频-无水印视频-多线程-批量采集实现和完整代码
  9. Python 的输出矩阵的一些常用设置
  10. QPainter画箭头