1989|7

6841

帖子

11

TA的资源

版主

楼主
 

【正点原子阿尔法 IMX6ULL Linux开发板】主频和时钟配置 [复制链接]

  1. 【正点原子阿尔法 IMX6ULL Linux开发板】用BSP工程管理项目 
  2. 【正点原子阿尔法 IMX6ULL Linux开发板】BEEP驱动 
  3. 【正点原子阿尔法 IMX6ULL Linux开发板】KEY控制蜂鸣器
在前几章实验中我们都没有涉及到 I.MX6U 的时钟和主频配置操作,全部使用的默认配置,
默认配置下 I.MX6U 工作频率为 396MHz。但是 I.MX6U 系列标准的工作频率为 528MHz,有些
型号甚至可以工作到 696MHz。本章我们就学习 I.MX6U 的时钟系统,学习如何配置 I.MX6U 的
系统时钟和其他的外设时钟,使其工作频率为 528MHz,其他的外设时钟源都工作在 NXP 推荐
的频率。
 
实验程序编写
1、将上期的key实验重命令,在bsp_clk.c上修改源码
/*
 * [url=home.php?mod=space&uid=1068364]@description[/url] : 初始化系统时钟,设置系统时钟为792Mhz,并且设置PLL2和PLL3各个
 				  PFD时钟,所有的时钟频率均按照I.MX6U官方手册推荐的值.
 * @param 		: 无
 * [url=home.php?mod=space&uid=784970]@return[/url] : 无
 */
void imx6u_clkinit(void)
{
	unsigned int reg = 0;
	/* 1、设置ARM内核时钟为792MHz*/
	/*1.1、判断当前ARM内核是使用哪个时钟源启动的,正常情况下ARM内核是由pll1_sw_clk驱动的,而
	*      pll1_sw_clk有两个来源:pll1_main_clk和tep_clk。
	*      如果我们要让ARM内核跑到792M的话,那必须将pll1_main_clk作为pll1的时钟源。
	*      如果我们要修改pll1_main_clk时钟的话,就必须先将pll1_sw_clk从pll1_main_clk切换到step_clk,
    *          当修改完pll1_main_clk以后将pll1_sw_clk切换回pll1_amin_clk。而step_clk的时钟源可以选择板子上的24MHz晶振  
	*/
	if((((CCM->CCSR)>>2) & 0x1) == 0)  // 当前pll1_sw_clk使用pll1_main_clk
	{
		CCM->CCSR  &= ~(1<<8);        /* 配置step_clk时钟源为24MH OSC */	
		CCM->CCSR |= (1<<2);          /* 配置pll1_sw_clk时钟源为step_clk */
	}

	/* 
	* 1.2 设置pll1_main_clk为792MHz
	*     因为pll1_sw_clk进ARM内核的时候会被二分频!
	*     配置CCM_ANLOG->PLL_ARM寄存器
	*     bit13: 1 使能时钟输出
	*     bit[6:0]:66 由公式 Fout = Fin *div_select/2.0 792=24*div_select/2.0
	*                            得出:div_select = 66
	*/
	CCM_ANALOG->PLL_ARM = (1<<13) | ((66<<0) & 0x7f);
	CCM->CCSR &= ~(1<<2);      /* 将 pll_sw_clk 时钟切换回 pll1_main_clk */
	CCM->CACRR = 1;           /* ARM 内核时钟为 pll1_sw_clk/2=1056/2=528Mhz */

	/* 2、 设置PLL2(SYS PLL) 各个PFD */
	reg = CCM_ANALOG->PFD_528;
	reg &=(0x3f3f3f3f); /* 请除原来的设置              */
	reg |= 32<<24;      /* PLL2_PFD3=528*18/32=297Mhz */
	reg |= 24<<16;      /* PLL2_PFD2=528*18/24=396Mhz */
	reg |= 16<<8;       /* PLL2_PFD1=528*18/16=594Mhz */
	reg |= 27<<0;       /* PLL2_PFD0=528*18/27=352Mhz */
	CCM_ANALOG->PFD_528 = reg;  /* 设置 PLL2_PFD0~3 */

	/* 3、设置 PLL3(USB1)各个 PFD */
	reg = 0; /* 清零 */
	reg = CCM_ANALOG->PFD_480;
	reg &= ~(0X3F3F3F3F); /* 清除原来的设置 */
	reg |= 19<<24; /* PLL3_PFD3=480*18/19=454.74Mhz */
	reg |= 17<<16; /* PLL3_PFD2=480*18/17=508.24Mhz */
	reg |= 16<<8; /* PLL3_PFD1=480*18/16=540Mhz */
	reg |= 12<<0; /* PLL3_PFD0=480*18/12=720Mhz */
	CCM_ANALOG->PFD_480=reg; /* 设置 PLL3_PFD0~3 */

	/* 4、设置AHB时钟 最小6Mhz, 最大132Mhz (boot rom自动设置好了可以不用设置)*/
	CCM->CBCMR &= ~(3 << 18); 	/* 清除设置*/ 
	CCM->CBCMR |= (1 << 18);	/* pre_periph_clk=PLL2_PFD2=396MHz */
	CCM->CBCDR &= ~(1 << 25);	/* periph_clk=pre_periph_clk=396MHz */
	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
	
	/* 5、设置IPG_CLK_ROOT最小3Mhz,最大66Mhz (boot rom自动设置好了可以不用设置)*/
	CCM->CBCDR &= ~(3 << 8);	/* CBCDR的IPG_PODF清零 */
	CCM->CBCDR |= 1 << 8;		/* IPG_PODF 2分频,IPG_CLK_ROOT=66MHz */
	
	/* 6、设置PERCLK_CLK_ROOT时钟 */
	CCM->CSCMR1 &= ~(1 << 6);	/* PERCLK_CLK_ROOT时钟源为IPG */
	CCM->CSCMR1 &= ~(7 << 0);	/* PERCLK_PODF位清零,即1分频 */
}

然后在main下面增加系统时钟初始化的代码:

int main(void)
{
	int i = 0;
	int keyvalue = 0;
	uint8_t led_state = OFF;
	uint8_t beep_state = OFF;
	
	imx6u_clkinit();    /* 初始化系统时钟 */
	clk_enable();		/* 使能所有的时钟 			*/
	led_init();			/* 初始化led 			*/
	beep_init();        /* 初始化beep     */
	key_init();         /* 按键初始化    */

把工程拷入虚拟机编译,并下载到开发板。

 开机后,LED0闪烁,相比以前要快了一些。这样我们就完成了对系统时钟的配置。

此帖出自ARM技术论坛

最新回复

那确实是,哈哈,要是我,我也选择申请一个   详情 回复 发表于 2023-5-26 11:42
点赞 关注
 

回复
举报

1668

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

来学习一下 I.MX6U 的时钟和主频配置操作

此帖出自ARM技术论坛
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 

正点那个6ull 黑黑的不好看

此帖出自ARM技术论坛

点评

只要好用就行,很难得的学习机会呀。就是时间不够呀。  详情 回复 发表于 2023-5-24 19:52
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6841

帖子

11

TA的资源

版主

4
 
freebsder 发表于 2023-5-24 19:34 正点那个6ull 黑黑的不好看

只要好用就行,很难得的学习机会呀。就是时间不够呀。

此帖出自ARM技术论坛

点评

买一个,也不贵。  详情 回复 发表于 2023-5-24 19:53
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

5
 
lugl4313820 发表于 2023-5-24 19:52 只要好用就行,很难得的学习机会呀。就是时间不够呀。

买一个,也不贵。

此帖出自ARM技术论坛

点评

今天,大家还在讨论,有些大佬月入几个W,但是还是想去申请那十来块钱的开发板。他们总结了一句,申请来的开发板,比自己买的香  详情 回复 发表于 2023-5-24 19:59
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6841

帖子

11

TA的资源

版主

6
 
freebsder 发表于 2023-5-24 19:53 买一个,也不贵。

今天,大家还在讨论,有些大佬月入几个W,但是还是想去申请那十来块钱的开发板。他们总结了一句,申请来的开发板,比自己买的香

此帖出自ARM技术论坛

点评

那确实是,哈哈,要是我,我也选择申请一个  详情 回复 发表于 2023-5-26 11:42
 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

7
 
lugl4313820 发表于 2023-5-24 19:59 今天,大家还在讨论,有些大佬月入几个W,但是还是想去申请那十来块钱的开发板。他们总结了一句,申请来 ...

那确实是,哈哈,要是我,我也选择申请一个

此帖出自ARM技术论坛

点评

申请一个还差不多,现在开发板多了,头痛,决定洗手,不干 了。  详情 回复 发表于 2023-5-26 12:03
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6841

帖子

11

TA的资源

版主

8
 
freebsder 发表于 2023-5-26 11:42 那确实是,哈哈,要是我,我也选择申请一个

申请一个还差不多,现在开发板多了,头痛,决定洗手,不干 了。

此帖出自ARM技术论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表