I.MX6U 的时钟系统 -3(AHB、 IPG 和 PERCLK 根时钟设置)

7 路 PLL 和 8 路 PFD 设置完成以后最后还需要设置 AHB_CLK_ROOT 和 IPG_CLK_ROOT的时钟。

AHB、 IPG时钟设置

在这里插入图片描述
简化后
在这里插入图片描述

①、此选择器用来选择 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。
②、此选择器用来选择 periph_clk 的时钟源,由寄存器 CCM_CBCDR 的 PERIPH_CLK_SEL位与 PLL_bypass_en2 组成的或来选择。当 CCM_CBCDR 的 PERIPH_CLK_SEL 位为 0 的时候periph_clk=pr_periph_clk=396MHz。
③、通过 CBCDR 的 AHB_PODF 位来设置 AHB_CLK_ROOT 的分频值,可以设置 1~8 分频,如果想要 AHB_CLK_ROOT=132MHz 的话就应该设置为 3 分频: 396/3=132MHz。图 16.1.2中虽然写的是默认 4 分频,但是 I.MX6U 的内部 boot rom 将其改为了 3 分频!
④、通过 CBCDR 的 IPG_PODF 位来设置 IPG_CLK_ROOT 的分频值,可以设置 1~4 分频,IPG_CLK_ROOT 时钟源是 AHB_CLK_ROOT,要想 IPG_CLK_ROOT=66MHz 的话就应该设置2 分频: 132/2=66MHz。

由下图可知,AHB_CLK_ROOT 最高可以设置132MHz,IPG_CLK_ROOT和PERCLK_CLK_ROOT最高可以设置66MHz。

在这里插入图片描述

CCM->CBCMR &= ~(3 << 18); 	/* 清除设置*/ 
CCM->CBCMR |= (1 << 18);	/* pre_periph_clk=PLL2_PFD2=396MHz */

在这里插入图片描述

CCM->CBCDR &= ~(1 << 25);	/* periph_clk=pre_periph_clk=396MHz */

在这里插入图片描述

CCM->CBCDR &= ~(3 << 8);	/* CBCDR的IPG_PODF清零 */
	CCM->CBCDR |= 1 << 8;		/* IPG_PODF 2分频,IPG_CLK_ROOT=66MHz */

在这里插入图片描述

握手

在这里插入图片描述
在这里插入图片描述

while(CCM->CDHIPR & (1 << 5));/* 等待握手完成 */
		
	/* 修改AHB_PODF位的时候需要先禁止AHB_CLK_ROOT的输出,但是
	 * 我没有找到关闭AHB_CLK_ROOT输出的的寄存器,所以就没法设置。
	 * 下面设置AHB_PODF的代码仅供学习参考不能直接拿来使用!!
	 * 内部boot rom将AHB_PODF设置为了3分频,即使我们不设置AHB_PODF,
	 * AHB_ROOT_CLK也依旧等于396/3=132Mhz。
	 */
#if 0
	/* 要先关闭AHB_ROOT_CLK输出,否则时钟设置会出错 */
	CCM->CBCDR &= ~(7 << 10);	/* CBCDR的AHB_PODF清零 */
	CCM->CBCDR |= 2 << 10;		/* AHB_PODF 3分频,AHB_CLK_ROOT=132MHz */
	while(CCM->CDHIPR & (1 << 1));/
* 等待握手完成 */
#endif

在修改如下时钟选择器或者分频器的时候会引起与 MMDC 的握手发生:
①、 mmdc_podf
②、 periph_clk_sel
③、 periph2_clk_sel
④、 arm_podf
⑤、 ahb_podf
发生握手信号以后需要等待握手完成,寄存器 CCM_CDHIPR 中保存着握手信号是否完成,如果相应的位为 1 的话就表示握手没有完成,如果为 0 的话就表示握手完成,很简单,这里就不详细的列举寄存器 CCM_CDHIPR 中的各个位了。另外在修改 arm_podf 和 ahb_podf 的时候需要先关闭其时钟输出,等修改完成以后再打开,否则的话可能会出现在修改完成以后没有时钟输出的问题。需要修改寄存器CCM_CBCDR 的 AHB_PODF 位来设置 AHB_ROOT_CLK 的时钟,所以在修改之前必须先关闭AHB_ROOT_CLK 的输出。但是笔者没有找到相应的寄存器,因此目前没法关闭,那也就没法设置 AHB_PODF 了。不过 AHB_PODF 内部 boot rom 设置为了 3 分频,如果 pre_periph_clk 的时钟源选择 PLL2_PFD2 的话, AHB_ROOT_CLK 也是 396MHz/3=132MHz。

官方文档
18.5.1.5.6 Divider change handshake
Modifying the following dividers will start the handshake with MMDC.
• mmdc_podf
• periph_clk_sel
• periph2_clk_sel
• arm_podf
• ahb_podf
The dividers listed above are designed with a handshake. For dividers without ahandshake design, the following sequence must be performed when updating PODF value:

  1. Gate the output clock off before updating PODF value.
  2. Gate the output clock on after the PODF value is updated and stable.
    To update the PODF value without gating the output clock off will cause unpredictable results such as no clock output.
    在这里插入图片描述

PERCLK_CLK_ROOT 时钟频率

CCM->CSCMR1 &= ~(1 << 6);	/* PERCLK_CLK_ROOT时钟源为IPG */
	CCM->CSCMR1 &= ~(7 << 0);	/* PERCLK_PODF位清零,即1分频 */

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: i.MX6U是一款NXP(原Freescale)公司推出的嵌入式处理器,Yocto Project是一种用于构建文件系统的开源项目。 要构建i.MX6U上的Yocto文件系统,需要进行以下步骤: 1. 准备环境:首先需要在开发主机上安装Yocto Project开发环境。可以通过官方网站获取最新的Yocto Project版本,然后按照指南进行安装。 2. 获取代码:通过Git工具获取Yocto Project的源代码。可以使用以下命令进行克隆: git clone http://git.yoctoproject.org/git/poky 这将克隆Yocto Project的主要代码库。 3. 配置环境:进入代码目录,并执行以下命令: source oe-init-build-env 这将配置构建环境并创建一个"build"目录。 4. 配置构建:在"build"目录下,可以使用文本编辑器打开"conf/local.conf"文件和"conf/bblayers.conf"文件,进行环境变量和层配置。 a. 在"conf/local.conf"文件中,可以设置交叉编译工具链、目标硬件平台、软件包等配置项。 b. 在"conf/bblayers.conf"文件中,可以添加额外的层(比如meta-fsl-arm)来支持i.MX6U平台。 5. 构建文件系统:在"build"目录下,执行以下命令进行构建: bitbake core-image-minimal 这将使用Yocto Project工具链和配置来构建一个精简的文件系统镜像。 6. 导出文件系统:构建完成后,可以在"build/tmp/deploy/images"目录下找到生成的文件系统镜像文件。将它们拷贝到目标设备上即可使用。 这些步骤只是基本的流程,据具体需求,还可以进行其他的配置和扩展。通过以上步骤,我们能够成功构建适用于i.MX6U的Yocto文件系统,以满足特定的嵌入式应用需求。 ### 回答2: i.MX6U是一款基于ARM架构的处理器,而Yocto是一款针对嵌入式系统的开源构建工具。构建文件系统时,我们可以使用Yocto项目来生成适用于i.MX6U平台的定制化文件系统。 首先,我们需要安装Yocto构建工具,并设置好相应的环境变量。然后,我们需要克隆i.MX6U的Yocto层,该层包含了i.MX6U特定的配置和软件包。在给定的i.MX6U Yocto层中,我们可以找到一个位于conf目录下的local.conf文件,该文件中包含了构建文件系统所需的各种配置选项,如目标硬件平台、内核版本、文件系统类型等。 接着,我们需要在local.conf中配置构建参数。例如,我们可以指定使用哪个内核版本、选择文件系统类型(如ext4、ubifs等)、设置文件系统的大小、选择需要安装的软件包等等。我们还需要指定i.MX6U的目标硬件平台和编译选项。 接下来,运行bitbake命令进行构建。bitbake命令会据我们在local.conf中的配置选项来下载源代码、编译软件包、生成文件系统映像等。整个构建过程可能需要一些时间,具体时间取决于我们选择的软件包和系统组件。 最后,构建完成后,我们可以在output目录中找到生成的文件系统映像。这个映像可以烧录到i.MX6U平台上并运行。我们还可以在文件系统中添加或修改软件包、配置文件等,以满足我们的特定需求。 总之,通过使用Yocto项目来构建文件系统,我们可以灵活定制适用于i.MX6U平台的嵌入式系统,并满足特定的功能需求。 ### 回答3: i.MX6U是一款NXP公司推出的嵌入式处理器,它在嵌入式系统中应用广泛。Yocto Project是一个开源的构建系统,用于创建嵌入式Linux发行版。我们可以使用Yocto Project来构建i.MX6U文件系统。 首先,我们需要准备一台运行Linux操作系统的开发主机,并安装好Yocto Project的相关工具。接下来,我们需要下载i.MX6U的Yocto Project BSP(Board Support Package)提供的代码。 下载完成后,我们可以开始进行配置。据Yocto Project的文档,我们需要使用bitbake工具进行配置。bitbake可以据配置文件生成用于构建文件系统的Makefile,并自动下载和编译所需的组件。 在配置过程中,我们需要指定构建目标(i.MX6U)以及需要的软件包。Yocto Project提供了一些预定义的配置模板,我们可以据需要选择适合我们的配置模板,或者自定义配置。 配置完成后,我们可以运行bitbake进行构建。bitbake会据配置文件,自动下载和编译所需的软件包,并生成文件系统的镜像文件。 构建完成后,我们需要将生成的文件系统的镜像文件烧录到i.MX6U的存储设备中,然后启动i.MX6U开发板。文件系统启动后,我们可以登录到i.MX6U的Linux系统,并开始进行应用程序和驱动程序的开发。 总结来说,构建i.MX6U文件系统需要使用Yocto Project的工具和BSP提供的代码,通过配置和编译生成文件系统的镜像文件。然后将镜像文件烧录到i.MX6U的存储设备中,从而实现开发板的启动和应用程序的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值