S3C2440A 时钟系统

发布者:火箭飞人最新更新时间:2020-06-13 来源: eefocus关键字:S3C2440A  时钟系统 手机看文章 扫描二维码
随时随地手机看文章

时钟系统

S3C2440A_UserManual_Rev13.pdf


OVERVIEW

The Clock & Power management block consists of three parts: Clock control, USB control, and Power control.

The Clock control logic in S3C2440A can generate the required clock signals including FCLK for CPU, HCLK for the AHB bus peripherals, and PCLK for the APB bus peripherals.


2440A 可以产生3个时钟:


CPU的 FCLK

AHB总线(Advanced High performance Bus)的 HCLK

APB总线(Advanced Peripheral Bus)的 PCLK

The S3C2440A has two Phase Locked Loops (PLLs): one for FCLK, HCLK, and PCLK, and the other dedicated for USB block (48Mhz). The clock control logic can make slow clocks without PLL and connect/disconnect the clock to each peripheral block by software, which will reduce the power consumption.


2440A有2两锁相环(PLL),一个用于FCLK,HCLK和PCLK,另一个用于USB模块(48Mhz)。

Clock Source Selection at Boot-Up

上图就表示了怎么选择时钟源,然而默认选择OM[3:2] 都是是第一个,因为在硬件原理图,这两个引脚都是接地的。


NOTES:


Although the MPLL starts just after a reset, the MPLL output (Mpll) is not used as the system clock until the software writes valid settings to the MPLLCON register. Before this valid setting, the clock from external crystal or EXTCLK source will be used as the system clock directly. Even if the user does not want to change the default value of MPLLCON register, the user should write the same value into MPLLCON register.

OM[3:2] is used to determine a test mode when OM[1:0] is 11.

这里第一段最后一句我们得到了一个很重要的信息:不管用户想不想改变默认配置,都需要为MPLLCON register写进数据。我们得到了第一个关键的线索:MPLLCON register必须配置。


文档接下来就是对锁相环的介绍,先跳过。


再往下翻,翻到了时钟控制逻辑,这个重要。


The Clock Control Logic determines the clock source to be used, i.e., the PLL clock (Mpll) or the direct external clock (XTIpll or EXTCLK). When PLL is configured to a new frequency value, the clock control logic disables the

FCLK until the PLL output is stabilized using the PLL locking time. The clock control logic is also activated at power-on reset and wakeup from power-down mode.


当PLL配置的时候,FLCK会停止,直到配置而且稳定。


Power-On Reset (XTIpll)

Figure 7-4 shows the clock behavior during the power-on reset sequence. The crystal oscillator begins oscillation within several milliseconds. When nRESET is released after the stabilization of OSC (XTIpll) clock, the PLL starts to operate according to the default PLL configuration. However, PLL is commonly known to be unstable after power-on reset, so Fin is fed directly to FCLK instead of the Mpll (PLL output) before the software newly configures the PLLCON. Even if the user does not want to change the default value of PLLCON register after reset, the user should write the same value into PLLCON register by software.


这里又说到了一个很重要的信息。当nRESET复位被释放稳定后,PLL一开始是默认配置。


但是!!


PLL在刚上电时是很不稳定的,所以在软件重新配置PLLCON时,Fin信号都是直接送给FCLK的,也就是说不配置就没有PLL。


所以不管用户想不想改变默认配置,都需要为PLLCON register写进数据。这里和第一条线索相呼应。


The PLL restarts the lockup sequence toward the new frequency only after the software configures the PLL with a new frequency. FCLK can be configured as PLL output (Mpll) immediately after lock time.


这里当PLL配置的时候,会有一个锁定时间。


再往下翻,USB总线的先跳过。


FCLK is used by ARM920T.

HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block.

PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface, ADC, UART, GPIO, RTC and SPI.


The S3C2440A supports selection of Dividing Ratio between FCLK, HLCK and PCLK. This ratio is determined by HDIVN and PDIVN of CLKDIVN control register.


在FCLK,HCLK, PCLK之间有一个分频比,这个分频比由CLKDIVN 里的 HDIVN 和 PDIVN 决定。


NOTES


CLKDIVN should be set carefully not to exceed the limit of HCLK and PCLK.

If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous bus mode using following instructions(S3C2440 does not support synchronous bus mode).

MMU_SetAsyncBusMode

mrc p15,0,r0,c1,c0,0

orr r0,r0,#R1_nF:OR:R1_iA

mcr p15,0,r0,c1,c0,0

If HDIVN is not 0 and the CPU bus mode is the fast bus mode, the CPU will operate by the HCLK.

This feature can be used to change the CPU frequency as a half or more without affecting the HCLK and PCLK.

这里又有一个重要的信息:如果HDIVN不为0,则必须使用以下指令将CPU总线模式从快速总线模式更改为异步总线模式(S3C2440不支持同步总线模式)。


现在我们来整理一下


我们想要时钟系统正常的运行起来,第一:MPLLCON的配置,第二:HDIVN 和 PDIVN设置分频比,第三:设置为异步总线模式。


看回文档的图7-1

在这里插入图片描述

OSC晶振或者外部晶振产生信号源,通过OM[3:2]的设置决定信号源。

配置MPLL,设置FCLK的频率

配置HDIVN,设置HCLK的频率

配置PDIVN,设置PCLK的频率

配置2440A的三个时钟,就是这样而已,再看看时序图

在这里插入图片描述

寄存器

那如果要配置这样的参数应该怎么配置呢


FCLK 400MHz

HCLK 100MHz

PCLK 50MHz

其实也简单,需要配置的都已经在上文字体标粗。而MPLLCON的配置,文档给出了公式:


MPLL Control Register

Mpll = (2 * m * Fin) / (p * 2 S )

m = (MDIV + 8), p = (PDIV + 2), s = SDIV


这个是FCLK的频率计算方法,但是由于太过复杂,文档也给出了参考参数。

在这里插入图片描述

也就是说,把 MDIV 设置为92(0X5C), PDIV SDIV 设置为1 就可以了。

在这里插入图片描述

来看这个PLLCON寄存器

PLLCON寄存器 地址 : 0x4C000004

MDIV [19:12] : 0x5C

PDIV [9:4] : 1

SDIV [1:0] : 1

即:[0x4C000004] = 0b101 1100 0000 0001 0001‬ = 0x5C011


再看CLKDIVN寄存器

在这里插入图片描述

要使得 FCLK:HCLK:PCLK = 1:4:8


看图可知

CLKDIVN寄存器 地址:0x4C000014

HDIVN [2:1] : 0b10

PDIVN [0] : 0b1

即:[0x4C000014] = 0b101 = 0x5


至此,两个寄存器设置完毕,最后设置为异步模式便大功告成。


在上一课流水灯的基础上修改代码led.S


.text

.global _start


_start:


/* 关闭看门狗 */

ldr r0, =0x53000000

ldr r1, =0

str r1, [r0]  /* 把WTCON第零位设置为0,关看门狗 */


/* 设置为异步模式 */

mrc p15,0,r0,c1,c0,0

orr r0,r0,#0xC0000000 //R1_nF:OR:R1_iA

mcr p15,0,r0,c1,c0,0


/* 设置CLKDIVN寄存器使得 FCLK:HCLK:PCLK = 1:4:8

* CLKDIVN寄存器 地址:0x4C000014

* HDIVN [2:1] : 0b10

* PDIVN [0] : 0b1

* 即:[0x4C000014] = 0b101 = 0x5

*/

ldr r0, =0x4C000014

ldr r1, =0x5

str r1, [r0]

/* 设置PLLCON使FLCK = 400MHz

* PLLCON寄存器 地址 :  0x4C000004

* MDIV  [19:12] : 0x5C = 92

* PDIV [9:4] : 1

* SDIV [1:0]    : 1

* 即:[0x4C000004] = 0b101 1100 0000 0001 0001‬ = 0x5C011

*/

ldr r0, =0x4C000004

ldr r1, =0x5C011

str r1, [r0]


/* 设置sp栈,自动识别nor启动还是nand启动

* nor启动时对应nor flash,nand启动时对应片内内存

* 在nor flash 写数据时必须有一定格式

* 把0写入0地址,再读出来看有没有修改,有修改就是nand启动,没修改就是nor启动

*/

mov r1, #0

ldr r0, [r1] /* 先把[0]地址的值备份到r0 */

str r1, [r1] /* 把0写入[0]地址 */

ldr r2, [r1] /* 再把[0]地址的值读出来 */

cmp r1,r2    /* 比较 */

ldr sp, =0x40000000+4096 /* nor启动 */

moveq sp , #4096 /*nand 启动*/

streq r0, [r1] /* 恢复数据 */

bl main

halt:

b halt

关键字:S3C2440A  时钟系统 引用地址:S3C2440A 时钟系统

上一篇:Micro2440 Nboot ADS 移植到Keil5编译通过
下一篇:ARM S3C2440 时钟初始化流程

推荐阅读最新更新时间:2024-11-12 06:57

1、STM32学习笔记——系统时钟初始化函数
STM32有三种不同的时钟源可被用来驱动系统时钟(SYSCLK): 1:HSI振荡器时钟(内部时钟) 2:HSE振荡器时钟 (外部时钟,即晶振所提供) 3:PLL时钟(锁相环时钟) 这些设备有以下2种二级时钟源: (1)40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。 (2)32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。 当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。 1:常用配置如下 使用HSE作为PLL的输入源,将PLL的输出配置为72MHZ,然后将PLL作为系统时钟,最后将其他时钟配置为
[单片机]
1、STM32学习笔记——<font color='red'>系统</font><font color='red'>时钟</font>初始化函数
STM32F407ZGT6芯片时钟系统模块介绍
STM32F4时钟系统的知识在《STM32F4中文参考手册》第六章复位和时钟控制章节有非常详细的讲解,网上关于时钟系统的讲解也有很多,讲不出啥特色,时钟模块是芯片非常重要的组成部分,我们必然要提到时钟系统的知识。这些知识也不是什么原创,纯粹根据官方提供的中文参考手册和自己的应用心得来总结的,如有不合理之处望大家谅解。 STM32F4时钟树概述 众所周知,时钟系统是CPU的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。STM32F4的时钟系统比较复杂,不像简单的51单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是很简单吗?为什么STM32要有多个时钟源呢?因为首先STM32本身非常复杂,外设非常的
[单片机]
STM32F407ZGT6芯片<font color='red'>时钟</font><font color='red'>系统</font>模块介绍
关于AT89C51系统时钟中断的应用
功能强大的时钟中断 在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。 下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。 定时器初值与中断周期时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位
[单片机]
STM32F407系统时钟解析
STM32F4时钟系统初始化是在system_stm32f4xx.c中的SystemInit()函数中完成的。对于系统时钟关键寄存器设置主要是在SystemInit函数中调用SetSysClock()函数来设置的。我们可以先看看SystemInit()函数体: //@brief Setup the microcontroller system // Initialize the Embedded Flash Interface, the PLL and update the // SystemFrequency variable. //@param None //@retval None void System
[单片机]
STM32F407<font color='red'>系统</font><font color='red'>时钟</font>解析
s3c2440A操作24C08
我这里实现的是非中断模式下的IIC操作 数据手册和代码对照着很容易看懂,尤其是数据手册上IIC那一章的几张程序流程图,一目了然。 下面是代码: //这里没有用精确延时 void delay1() { int i = 0; int j = 0; for(i = 0; i 100; i++) { for(j = 0; j 100; j++); } } /************************************************************* Function name: IIC_Init Description: Initialize IIC registers Pa
[单片机]
STM32查看系统时钟
调用库函数RCC_GetClocksFreq,该函数可以返回片上的各种时钟的频率 函数原形 void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) RCC_ClocksTypeDef定义于文件 stm32f10x_rcc.h : typedef struct { uint32_t SYSCLK_Frequency; /*! SYSCLK clock frequency expressed in Hz */ uint32_t HCLK_Frequency; /*! HCLK clock frequency expressed in Hz */ uint32_t PC
[单片机]
stm32系统时钟配置函数
/**************************************************************************** * * 名称: RCC_Configuration * * 描述: 设置系统时钟 * * 返回: 无 * ****************************************************************************/ void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); //RCC复位 RCC_HSECon
[单片机]
STM32学习笔记一一时钟系统
一、系统架构: 二、时钟树: STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。   ③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。 ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。 倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 2. 系统时钟SYSCLK可来源于
[单片机]
STM32学习笔记一一<font color='red'>时钟</font><font color='red'>系统</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved