arm时钟体系设置

//基于韦东山老师时钟体系课程第一课

时钟框架简介

  1. 时钟源
    EXTCLK引脚 可以外部输入时钟频率
    OSC 晶振
  2. PLL
  3. 锁相环 MPLL UPLL
  4. AHB总线
  5. APB总线

流程(仅指MPLL)

外部时钟晶振----OM[3:2]----被选择为时钟源(此时FCLK=时钟晶振)

 ----->时钟源--->通过MPLL锁相环--产生新FCLK-->
 
 1 ----->  通过   HDIVN   ---->产生 HCLK   ---->  用于AHP BUS

 2 -----> 通过  PDIVN   ---->产生 PCLK     --->    用于APB  BUS

原理过程:

arm时钟体系设置_第1张图片
原理解释

  1. 上电后,为等待电源稳定,复位芯片控制复位引脚维持一段低电平,CPU未启动
  2. 同时通过OM[3:2] FCLK=晶振频率12M,当复位引脚松开后CPU以FCLK=12运行。
  3. 设置新的FCLK ,lock time锁定,CPU停止运行
  4. locktime(PLL工作产生新的FCLK)
  5. lock time结束CPU使用新的FCLK

编程设置:

  • OM[3:2] 选择时钟源
  • OM[3:2]引脚接地,初始时为选择时钟晶振
  • locktime 设置锁定时间
    arm时钟体系设置_第2张图片
  • MPLLCON UPLLCON 设置MPLLCON UPLLCON中的P M S 确定FCLK值
  • 例如:在这里插入图片描述
  • CLKCON 控制关闭一些用不到的设备
  • CLKDIVN 设置HDIVN PDIVN 设置HCLK PCLK
    在这里插入图片描述
    arm时钟体系设置_第3张图片

为什么要设置CPU为异步模式

  1. 如果HDIVN不为0,则必须将CPU总线模式从快速总线模式更改为异步总线模式
  2. 如果HDIVN不是0,并且CPU总线模式是快速总线模式,那么CPU将由HCLK操作。此特性可用于将CPU频率更改一半或更多,而不影响HCLK和PCLK。
 /*
 *    时钟体系
 *     2020.03.30
 */

.text
.global _start
_start:

	 ldr r0=0x53000000   //关闭看门狗
	 mov r1,#0
	 str r1,[r0]
      
     ldr r0,=0x4c000000//设置locktime  (0x4c000000)=0xFFFFFFFF
     ldr r1,=0xFFFFFFFF
     str r1,[r0]

     /* 设置 FCLK=400  HCLK=100 PCLK=50
      *clkdivn-->fclk-->hdivn  pdivn-->hclk pclk
      * CLKDIVN(0x4c000014)  PDIVN  [0]  1  HCLK/2
      *                      HDIVN  [2:1]  10 : HCLK = FCLK/4 when CAMDIVN[9] = 0. 
	  */
      ldr r0,=0x4c000014
      ldr r1,=0x5
      str r1,[r0]
	 
	 mrc p15,0,r0,c1,c0,0   //设置CPU为异步模式
	 orr r0,r0,#0xc0000000   // #R1_nF:OR:R1_iA 
	 mcr p15,0,r0,c1,c0,0
	 
     /*设置mpll--hclk   pllcon--->m p s
      *  m=MDIV+8
      *  p=PDIV+2
      *  s=SDIV
      *  MPLL=(2*m*Fin)/(p*2^s)
      *  MPLLCON(0x4c000004)  MDIV  [19:12] PDIV[9:4]  SDIV [1:0]
      */
	 ldr r0, =0x4C000004
	 ldr r1, =(92<<12) | (1 << 4) | (1 << 0)
	 str r1, [r0]


	 mov r0,#0             //选择nor nand 设置栈
     ldr  r1,[r0]
	 str  r0,[r0]
	 ldr  r2,[r0]
	 cmp r0 ,r2
     ldr sp,= 0x40000000+4096 
     moveq sp,#4096
     streq r1,[r0]

     bl main

  halt:

	 b halt

你可能感兴趣的:(arm时钟体系设置)