单片机
返回首页

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;

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章