Main.C时钟设定
void Main(void)
时钟设定:400M 100M 50M 得到 1:4:8 进而需要得到 hdivn=2 ; pdivn=1;
i = 2 ; //用于选择CUP核的频率;以及对应MPLL_vall ;key 参数;
switch ( i )
case 2: //400
key = 14; key=14 指 hdivn_val (FCLK:HCLK) 1:4 ; hdivn=2
mpll_val = (92<<12)|(1<<4)|(1); MPLL=2*(92+8)*12M/(1+2)*2^1=400M
break;
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);三个参数传递给rMPLLCON
ChangeClockDivider(key, 12); 12 指 (HCLK:PCLK) 1:2 ; pdivn=1
cal_cpu_bus_clk(); 400M 100M 50M 得到 1:4:8 进而得到 hdivn=2 ; pdivn=1;计算过程
//*************************[ MPLL ]*******************************
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
rMPLLCON = (mdiv<<) | (pdiv<<) | sdiv; //根据频率需求推算各个参数,传递给rMPLLCON,总分总的程序模式
}
// Modified for 2440.
void ChangeClockDivider(int hdivn_val,int pdivn_val)
{
int hdivn=, pdivn=; // hdivn_val (FCLK:HCLK)ratio hdivn
// 11 1:1 (0)
// 12 1:2 (1)
// 13 1:3 (3)
// 14 1:4 (2)
// pdivn_val (HCLK:PCLK)ratio pdivn
// 11 1:1 (0)
// 12 1:2 (1)
switch(hdivn_val) {
case : hdivn=; break;
case : hdivn=; break;
case :
case : hdivn=; break;
case :
case : hdivn=; break;
} switch(pdivn_val) {
case : pdivn=; break;
case : pdivn=; break;
} //Uart_Printf("Clock division change [hdiv:%x, pdiv:%x]\n", hdivn, pdivn);
rCLKDIVN = (hdivn<<) | pdivn; switch(hdivn_val) { 分频时钟在1:6或者1:8时,也会对摄像头时钟构成影响
case : // when 1, HCLK=FCLK/8.
rCAMDIVN = (rCAMDIVN & ~(<<)) | (<<);
break;
case : // when 1, HCLK=FCLK/6.
rCAMDIVN = (rCAMDIVN & ~(<<)) | (<<);
break;
} if(hdivn!=)
MMU_SetAsyncBusMode();
else
MMU_SetFastBusMode();
}
static void cal_cpu_bus_clk(void)
{
U32 val;
U8 m, p, s; val = rMPLLCON;
m = (val>>)&0xff;
p = (val>>)&0x3f;
s = val&; //(m+8)*FIN*2 不要超出32位数!
FCLK = ((m+)*(FIN/)*)/((p+)*(<<s))*; val = rCLKDIVN;
m = (val>>)&;
p = val&;
val = rCAMDIVN;
s = val>>; switch (m) {
case :
HCLK = FCLK;
break;
case :
HCLK = FCLK>>;
break;
case :
if(s&)
HCLK = FCLK>>;
else
HCLK = FCLK>>;
break;
case :
if(s&)
HCLK = FCLK/;
else
HCLK = FCLK/;
break;
} if(p)
PCLK = HCLK>>;
else
PCLK = HCLK; if(s&0x10)
cpu_freq = HCLK;
else
cpu_freq = FCLK; val = rUPLLCON;
m = (val>>)&0xff;
p = (val>>)&0x3f;
s = val&;
UPLL = ((m+)*FIN)/((p+)*(<<s));
UCLK = (rCLKDIVN&)?(UPLL>>):UPLL;
}
Main.C时钟设定的更多相关文章
- [stm32] STM32 Interrupts and events 系统了解(EXTI)及槽型光电开关tp850电路研究
中断和事件 1 嵌套向量中断控制器 特性: ● 68个可屏蔽中断通道(不包含16个Cortex™-M3的中断线):● 16个可编程的优先等级(使用了4位中断优先级):● 低延迟的异常和中断处理:● 电 ...
- [stm32] USART USART1收发功能工程
>_<!功能:PC端发送一个特定的字符:0x0d 0x0a,单片机则返回一句话,如图: >_<!知识: 1.复用功能I/O和调试配置(AFIO) 为了优化外设数目,可以把一些 ...
- WHM使用手册by lin
WebHost Manager 11使用手册(WHM使用手册) 本手册翻译自cpanel官方文档. 本翻译中文版本版权归美国主机侦探所有,未经允许,禁止复制. Overview(概述) 本用户手册主要 ...
- 第10章 使用STM32CubeMX新建工程
STM32Cube是一项意法半导体的原创活动, 通过减少开发工作.时间和成本, 使开发者的开发工作更轻松.STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列.(如,STM32CubeF ...
- java基础——入门篇
整体大纲图 1.认识java 核心知识点:JVM.搭建Java开发环境.java的发展史.java特点.java程序类型.垃圾收集器.J2SE下载和安装.环境变量的配置和测试.以及简单的开发工具的使用 ...
- CC2530的ADC采集外部电压
初窥ZIGBEE 要在zigbee的组网中加入烟雾传感器的模块,所以需要用到cc2530的ADC对传感器输出的模拟信号进行采样.下面是自己对实现用CC2530的ADC采集外部电压的程序过程. 以下是A ...
- STM32学习及应用笔记一:SysTick定时器学习及应用
这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...
- YII 的源码分析(二)
上一篇简单分析了一下yii的流程,从创建一个应用,到屏幕上输出结果.这一次我来一个稍复杂一点的,重点在输出上,不再是简单的一行"hello world",而是要经过view(视图) ...
- C# Socket简单例子(服务器与客户端通信)
这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...
随机推荐
- webdriver中定位元素,报无法找到元素的问题
webdriver中定位元素,报无法找到元素的问题时,需要查看以下几点: 1 用火狐的firebug插件定位元素,确保这个元素的定位正确: 2 在火狐的firebug插件的,在html页签中输入fra ...
- 分馅饼 Pie
Pie 链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C 题目: Problem Description ...
- First day in 阿里
周五上午10点半的飞机,为了便宜选了CA的空客320的飞机,结果体验很差.飞机涂了层风骚的粉紫色,机内较旧,也很小,经过所谓的头等舱简直惨不忍睹.对比起去年飞去北京乘的波音真是没法比,波音上每个人都有 ...
- Hibernate提供的内置标识符生成器
Hibernate提供的内置标识符生成器 Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键来识别或区分同一个表的不同记录.Hibernate使用OID(对象标识符)来统一两者之 ...
- 异常 java.util.regex.PatternSyntaxException:
可变参数是在JDK1.5之后出来的一个行特性,也是一个比较好用的东西 想起好多jfinal还有其他框架的查询方法就有好多用到了可变参数,自己也写了个这样的方法 public class Test{ ...
- 所有设备的CSS像素
mydevice.io Mobile devices, in Responsive Web Design, relate to a core value which is the value of C ...
- Python 脚本 监控数据库状态
打算用这个脚本通过zabbix 监控Mariadb的,无奈要等Mariadb完全上线才行,所以先写一个粗略大致功能的版本. #coding:utf-8 #author:shiyiwen #versio ...
- 管闲事的小明-nyoj51
描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵 ...
- java中hashCode方法与equals方法的用法总结
首先,想要明白hashCode的作用,必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重 ...
- 【iCore3 双核心板_FPGA】例程十一:乘法器实验——乘法器使用
实验指导书及代码包下载: http://pan.baidu.com/s/1dEijBs1 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...