Tlelechips 8925的时钟系统配置
来源:互联网 发布:苍穹不动产测绘软件 编辑:程序博客网 时间:2024/06/05 17:29
这几天仔细研究了下ARM的时钟设置,现以Telechips 8925(cotex A5)为例简单记录下:
8925总共有16个时钟源,一个XIN,XTIN,外加6个PLL,同时每个XIN,XTIN和PLL还可以经过一个分频器产生一个时钟。
因此在设置时钟之前,我们要先选择要用哪个时钟源,8925的BSP在“SRC/Boot/”的main.c文件中,main函数调用了init_clock()函数来初始化时钟系统,init_clock()函数的实现如下:
void init_clock(void)
{
PCKC lCKC = (CKC *)HwCKC_BASE;//设置时钟的基地址
........
tca_ckc_init(); //初始化时钟设置的基地址
tca_ckc_setpll(6240000,1); //设置PLL1为312MHz
........
lCKC->CLKDIVC0 = 0x01010101;//设置分频因子(就会产生新的时钟源)
.......
tca_ckc_setswreset(RESET_DDIBUS, OFF);//开启或关闭总线复位(DDIBUS,GRAPBUS等)
........
tca_ckc_setfbusctrl(CLKDDIBUS,ENABLE,0,3120000,DIRECTPLL1);//设置总线的时钟频率,就是上图中后面那部分时钟源选择
.......
}
这些设置对应的数据结构是一个CKC的结构体:
typedef struct _CKC
{
volatile unsigned intCLK0CTRL;//0x000RW0x14000000 CPU clock control register
........
volatile unsigned intCLK8CTRL;//0x020RW0x14000000 SMU clock control register
这组寄存器(有8个)主要设置总线时钟的使能,配置,以及选哪个时钟源做为自己的时钟。
volatile unsigned intPLL0CFG;//0x030RW0x14000000
volatile unsigned intPLL1CFG;//0x034RW0x14000000
volatile unsigned intPLL2CFG;//0x038RW0x14000000
volatile unsigned intPLL3CFG;//0x03CRW0x14000000
volatile unsigned intPLL4CFG;//0x040RW0x14000000
volatile unsigned intPLL5CFG;//0x044RW0x14000000
这组寄存器主要是设置PLL的时钟,有个对应的P,S,M,Vel表用于查询对应设置,如果设置的时钟频率不在表里面,可以联系厂商进行修改。关于PLL时钟设置有一个计算公式:
FVCO = (m * FIN ) / ( p ) : 1000 MHz ~ 2000 MHz ( FIN is XIN oscillator)
FPLL = FVCO / ( 2 ^ s ) : FPLL should be less than 1GHz.
volatile unsigned intCLKDIVC0;//0x050RW0x14000000 PLL0/1/2/3 Divider Configuration Register
volatile unsigned intCLKDIVC1;//0x054RW0x14000000 PLL4/5/XI N/XTIN Divider Configuration Reg.
volatile unsigned intCLKDIVC2;//0x058RW0x14000000 Reserved for Future Use
volatile unsigned intCLKDIVC3;//0x05CRW0x14000000 Reserved for Future Use
这组寄存器主要是设置时钟源的分频,公式:FP0DIV = FPLL0 / (P0DIV + 1)计算分频频率的,在复位情况下P0DIV=0x01,就是分出来的频率是原PLL的1/2。
volatile unsigned intPLKCTRL0;// 0x080 R/W 0x24000000 Timer X Clock
........
volatile unsigned intPLKCTRL51;// 0x14C R/W 0xA4000000 Clock for GPSB Controller 5
这组寄存器设置的是上图后面那部分,也就是硬件的时钟输出,这个设置决定了最终的时钟设置。
}
其实归纳起来,时钟的设置主要就两步:
1.设置时钟源,看清楚系统有多少个时钟源,时钟是怎么设置的,如果有分频器看它是怎么分频的;
2.时钟源的选择(这个很关键),你要设置(CPU,总线等)用的是哪个时钟源,有没有经过分频器。
搞清楚这两步,基本时钟的设置就搞定了,不同CPU的时钟系统不一样,具体设置参考数据手册,这只是本人对8925时钟的一些理解,如果不对的,请大家指正,同时如果有在搞8925的同行,可以回复我,共同学习!
- Tlelechips 8925的时钟系统配置
- stm32时钟系统配置
- Debian的系统配置
- ubuntu 的系统配置文件
- Gconf系统配置的介绍。
- Gconf系统配置的介绍。
- SystemParametersinfo系统配置的获取
- 我的linux系统配置
- 系统配置
- 系统配置
- 系统配置
- 系统配置
- 系统配置
- 系统配置msconfig 打不开的解决方法
- Debian推荐的最低系统配置
- 【C#】系统配置文件的读写
- Linux环境的系统配置文件
- mac下的一些系统配置
- linux的目录配置
- JM18.4 MVC 报告二
- 在tomcat下直接访问Html报错,说找不到资源(404)
- php写日报功能追加
- html5的canvas写一个简单的画板程序
- Tlelechips 8925的时钟系统配置
- Oracle to_char格式化函数
- 搭建一个maven工程
- 生成文件夹程序
- ASP.NET和ASP中使用OLEDB产生的错误:'0x80004005' 未指定的错误
- Java:对象的强、软、弱和虚引用
- android中的dp,px深度解析
- How SKB's work?
- 哪些程序占用了swap脚本的监控