ARM裸机学习一:S3C2440的时钟体系

1.时钟的产生

S3C2440的系统时钟图如下:在这里插入图片描述
S3C2440A的主时钟源由外部时钟(EXTCLK)或者外部晶振(XTIPll)提供,输入时钟源由模式控制引脚OM3和OM2控制选择,在复位信号的上升沿参考OM3和OM2的引脚将OM[3:2]的状态在内部锁定
在这里插入图片描述
大致过程是:经过OM3和OM2引脚选择的外部时钟进入MPLL(锁相环)和UPLL进行倍频,经过MPLL得到FCLK直接供给给CPU,除此以外,FCLK还会经过HDIV和PDIV分频得到HCLK和PCLK,分别提供给APB总线和AHB总线。而经过UPLL的会产生UCLK供给USB。如图:
在这里插入图片描述

2.修改时钟频率的过程

在这里插入图片描述
1.上电后,复位芯片(nRESET)等待电源稳定再输出高电平,复位引脚松开后,CPU开始运行,初始的FCLK等于晶振的频率(第一段)
2.在nRESET拉高的时候,CPU开始运行,PLL锁存OM[3:2]引脚的值
3.随后可以设置PLL,并进入LOCK TIME,CPU停止运行,LOCK TIME结束的时候CPU就运行在新的时钟下(第二段FCLK)

3.相关寄存器的配置

例:设置FCLK为200M,HCLK为100M,PCLK为50M,比例也就是1:2:4
在这里插入图片描述

在这里插入图片描述
首先设置CLKDIVN = 0x03; 根据上表可以查到比例设置为1:2:4,接下来设置PLL
公式为:Mpll = ( 2 × m × Fin ) / ( p × 2^s )
其中m =MDIV+8, p=PDIV+2, s=SDIV,FIN为输入时钟源,如果晶振则为12,具体数值的设置查表
如果HDIVN 不为0,CPU 总线模式应该使用以下指令(查看手册)使其从快总线模式改变为异步总线模式(S3C2440不支持同步总线模式)。
代码示例:

/*clock registers*/
#define	MPLLCON		(volatile unsigned long *)0x4c000004
#define	CLKDIVN		(volatile unsigned long *)0x4c000014
#define S3C2440_MPLL_200MHZ     ((0x5c<<12)|(0x01<<4)|(0x02))

void clock_init()
{
	  (*CLKDIVN)  = 0x03;            // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1
        __asm__{
		      mrc    p15, 0, r1, c1, c0, 0      
		      orr    r1, r1, #0xc0000000        
		      mcr    p15, 0, r1, c1, c0, 0     
               }
       (*MPLLCON) = S3C2440_MPLL_200MHZ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值