今天编写sys_time程序,预期的实验结果是,在S5PV210开发板上实现将系统主频设置为1GHZ,检测用led闪烁的快慢表示。
三. 常用概念
1. S5PV210一共有3个时钟域,MSYS,DSYS,PSYS。时钟域代表的是一个区域的频率。一个区域的频率数据之间有对应关系。
2. 确定3个时钟域频率有3个因素(通过查看芯片手册系统时钟图可知):
1)时钟源:每一块开发板都有外接晶振,本开发板外接的是24MHZ的晶振。
2)PLL锁相环:S5PV210有四个倍频器,(A,M,E,V)PLL,APLL决定MSYS的频率,(M,E)PLL决定DSYS和PSYS的频率,VPLL决定外设的时钟域。
3)DIV分频器(除法器):分频作用。
4)MUX选择器:决定频率选择通道。
四.编程思路(主要是看芯片手册中sys_clock图):
1.查看芯片手册S5PV210Clock Generation Circuit,确定我们需要提升的系统主频是通过那些时钟源,MUX,PLL连接到达的。
2. 查看芯片手册sys clock章节寄存器,对应上面的连接,查看需要配置那些寄存器。
APLL_LOCK,APLL_CON0,CLK_SRC0,CLK_DIV0,
3.查看每个寄存器的功能,设置参数,将时钟源24MHZ提升到1GHZ。
五.相关寄存器
CLK_SRC0 :对应芯片手册中sys_clock图中的MUX选择器。
APLL_LOCK,MPLL_LOCK:用于调整系统时钟,时钟的转化之间。
APLL_CON0 ,MPLL_CON ::对应芯片手册中sys_clock图中的A,M,E,V)PLL倍频器。
CLK_DIV0::对应芯片手册中sys_clock图中的DIV分频器,也称除法器。
六.主程序和相关函数
int xmain()
{
close_buzzer();
// init_sysclock();
led_flash(10000);
while(1);
return 0;
}
void init_sysclock()
{
//关闭APLL输出
*CLK_SRC0 = (0<<0)|(0<<4)|(0<<8)|(0<<12)|(0<<16)|(0<<20)|(0<<24);
//设置升平时间
*APLL_LOCK = 0xFFFF;
*MPLL_LOCK = 0XFFFF;
//设置(P,M,S)APLL输出频率1GHZ(3,125,1)
*APLL_CON0 = (1<<31)|(125<<16)|(3<<8)|(1<<0);
*MPLL_CON = (1<<31)|(667<<16)|(12<<8)|(1<<0);
//设置DIV
*CLK_DIV0 = (0<<0)|(4<<8)|(1<<12)|(3<<16)|(1<<20)|(4<<24)|(1<<28);
//打开APLL输出
*CLK_SRC0 = (1<<0)|(1<<4)|(1<<8)|(1<<12)|(0<<16)|(0<<20)|(0<<24);
}