ARM裸机学习一:S3C2440的时钟体系
2022-03-01 来源:elecfans
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;
}
- 松下汽车电子系统与 Arm 携手推进软件定义汽车标准化
- arm处理器中a5 a8 a9,v6 v7,arm7 arm9 arm11都是依据什么来分类的
- ARM处理器架构
- Linux Kernel之flush_cache_all在ARM平台下是如何实现的
- Arm 引领软件定义汽车革新, 共同迈向汽车行业未来
- arm召开2025二季度财报会,V9架构继续大获成功
- ARM、Intel、MIPS处理器啥区别?看完全懂了
- makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解
- ubuntu下使用qemu模拟ARM(六)------驱动程序
- Ubuntu下安装arm-linux-gnueabi-xxx编译器