【ARM裸板】S3C2440 时钟设置与分析

示例代码下载

在这里插入图片描述

  • 由时钟树分析,时钟源通过选择器接入给MPLL(Main PLL)与UPLL(USB PLL)
  • 经过MPLL得到FCLK提供给CPU[ARM920T]
  • FCLK分别通过HDIVN与PDIVN分频得到HCLKPCLK
  • HCLK接入给AHB总线,再给各种高速设备(Nand Flash、内存控制器、中断控制器…)
  • PCLK接入给APB总线,再给各种低速设别(I2C、PWM、GPIO、UART…)

1.时钟源最大值

在这里插入图片描述

2.时钟源

2.1 两种时钟源

  • 1.晶振
  • 2.外部引脚时钟输入

2.2 选择时钟源

  • 通过改变OM[3:2]引脚来选择时钟源
    在这里插入图片描述

  • JZ2440 OM[3:2]接入GND,则主时钟源与USB时钟源都选择外部晶振
    在这里插入图片描述

3.上电时钟分析

在这里插入图片描述

    1. 复位等待, 等待电源稳定,复位芯片才输出高电平

在这里插入图片描述

  • 2.根据OM[3:2]的值,FCLK=晶振
  • 3.PLL锁存OM[3:2]的值
  • 4.设置PLL(Lock Time中 CPU停止)
  • 5.PLL工作
  • 6.FCLK=PLL输出新的时钟,CPU运行

4.编程控制时钟速度

  • 主要通过设置MPLLCONCLKDIVN两个寄存器来控制时钟速度

  • 外设时钟使能寄存器CLKCON,可以使得功耗更低(低功耗)

  • 编程目标:FCLK=400MHz、HCLK=100MHz、PCLK=50MHz

4.1 时钟计算公式

在这里插入图片描述

4.2 MPLLCON寄存器

  • PDIV=1,SDIV=1,由公式可得MDIV=92
	/* 设置MPLLCON(0x4C000004) = (92<<12) | (1<<4) | (1<<0)
	 * m = MDIV+8 = 92+8 =100
	 * p = PDIV+2 = 1+2 =3
	 * s = SDIV = 1
	 * FLCK = (2*m*Fin)/(p*(2^s)) = (2*100*12M)/(3*2^1) = 400M
 	 */
	ldr r0, =0x4C000004
	ldr r1, =(92<<12) | (1<<4) | (1<<0)
	str r1,[r0]
	
	//一旦设置PLL,就会锁定LOCK TIME直到PLL输出稳定,然后CPU工作

在这里插入图片描述

4.3 CLKDIVN寄存器

  • 目标:FCLK=400M、FCLK=100M、PCLK=50M
  • 则HDIVN设置为10(因为CAMDIVN默认值为0,所以无需关注),PDIVN设置为1
	/* CLKDIVN(0x4C000014) = 0x05,fFCLK:fHCLK:fPCLK = 8:4:1 */
	ldr r0, =0x4C000014
	mov r1, #0x05
	str r1,[r0]

在这里插入图片描述

5.注意事项

  • 设置异步模式
    • 如果HDIVN不是0,需要设置为异步模式,否则CPU会使用HCLK
    • #R1_nF:OR:R1_iA = 0xC0000000
      在这里插入图片描述

5.1 注释

  • MRC指令将协处理器的寄存器中数值传送到ARM处理器的寄存器中
  • MCR指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中
    • c:co-process 协处理器、r:寄存器

  • 汇编版本
mrc p15,0,r0,c1,c0,0   
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0 

  • C版本
__asm{ 
mrc p15, 0, r1, c1, c0, 0         /* 读取CP15 C1寄存器 */ 
orr r1, r1, #0xc0000000         /* 设置CPU总线模式 */ 
mcr p15, 0, r1, c1, c0, 0         /* 写回CP15 C1寄存器 */
} 

6.S3C2440默认时钟频率

  • 由芯片手册可知MPLLCON默认初始值为:
    • MDIV = 0x96 = 150
    • PDIV = 0x03
    • SDIV = 0

即:

  • m = MDIV+8 = 158
  • p = PDIV+2 = 5
  • s = SDIV = 0

可以推出:Fclk = (2 * m * Fin)/(p*(2^s)) = (2 * 158 * 12M)/(5 * 2^0) = 379.2M
在这里插入图片描述

发布了42 篇原创文章 · 获赞 176 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39492932/article/details/103987785