S5PV210初始化系统时钟

发布者:superstar11最新更新时间:2024-12-04 来源: cnblogs关键字:S5PV210  初始化  系统时钟 手机看文章 扫描二维码
随时随地手机看文章

S5PV210时钟体系
S5PV210中包含3大类时钟domain,分别是主系统时钟domain (简称MSYS,下面将使用简称来进行相关讲解)、显示相关的时钟domain (DSYS)、外围设备的时钟domain (PSYS)。
1) MSYS:用来给cortex a8处理器,dram控制器,3D,IRAM,IROM,中断控制器等提供时钟;
2) DSYS:用来给显示相关的部件提供时钟,包括FIMC, FIMD, JPEG, and multimedia IPs;
3) PSYS:用来给外围设备提供时钟,如i2s, spi,i2c,uart等
S5PV210外接的晶振频率(简称Fin)为24MHz,通过时钟控制逻辑PLL可以提高系统时钟。S5PV210共有4个倍频器,即PLL,包括APLL(供MSYS使用),MPLL(供DSYS使用),EPLL(供PSYS使用),VPLL(供video相关的时钟使用)。3大类时钟domain中,可以使用不同的分频,使其给不同部件输出所需要的时钟,各类时钟的关系如下图:

image

S5PV210时钟分类图

如何确定各类时钟的值,芯片手册上给出了参考值,我们按照参考值设置即可,各类时钟的参考值如下图:

image

                S5PV210时钟设置参考值图

具体如何设置上述各种各样的时钟,可参考下图:

image

S5PV210时钟设置参考图

该图十分重要,依据上图我们就可以设置好所有硬件部件所需的工作时钟(实际上我们并不需要设置好所有部件的工作时钟,我们只需设置好我们需要使用的硬件部件的工作时钟即可),在本章第二节中,我们将以上图为基础,通过设置时钟相关的寄存器,达到初始化时钟的目的。

程序例子:

分别用了汇编语言和C语言来编写,详细代码见链接。下面以C语言代码来讲解:

1. start.S
在调用main函数之前,调用了时钟初始化函数clock_init,进行时钟相关的设置。
2. clock.c
clock_init()在clock.c中定义,具体代码如下:
void clock_init()
{
    // 1 设置各种时钟开关,暂时不使用PLL
    CLK_SRC0 = 0x0;
    // 2 设置锁定时间,使用默认值即可
    APLL_LOCK = 0x0000FFFF;
    MPLL_LOCK = 0x0000FFFF;
    // 3 设置分频
    CLK_DIV0 = 0x14131440;
    // 4 设置PLL
    APLL_CON0 = APLL_VAL;
    MPLL_CON = MPLL_VAL;
    // 5 设置各种时钟开关,使用PLL
    CLK_SRC0 = 0x10001111;
}
上述代码共有5个步骤,下面我们一一讲解每一个步骤:
第一步 、设置各种时钟开关,暂时不使用PLL
根据时钟设置图,下面是放大图:

image

首先我们需要选择使用外接24MHz晶振,由上图可知,APLL和MPLL的时钟源由“FIN_PLL”决定,在芯片手册中搜索“FIN_PLL”,可知相关寄存器为CLK_SRC0,见下图:

image

在未设置PLL和各种分频系数之前,我们不能使用PLL,为了保险起见,暂时直接使用频率较低的外接的24MHz晶振,待设置好PLL和分频系数后再重新设置各种时钟开关。

第二步 、设置锁定时间
设置PLL后,时钟从Fin提升到目标频率时,需要一定的时间,即锁定时间。

第三步 、设置分频
与分频相关的寄存器是CLK_DIV0,见下图:

image

现在我们来根据本章第一节中给出的时钟设置参考值来设置该寄存器。

image

  • ARMCLK = 1000MHz = MOUT_MSYS / (APLL_RATIO + 1),经过在第四和第五步的设置后,MOUT_MSYS会被设置为1000MHz,所以 APLL_RATIO=0即可

  • SCLKA2M=200MHz=SCLKAPLL / (A2M_RATIO + 1),由于SCLKAPLL=1000MHz,所以A2M_RATIO=4。

  • HCLK_MSYS=200MHz=ARMCLK / (HCLK_MSYS_RATIO + 1),所以HCLK_MSYS_RATIO=4

  • PCLK_MSYS=100MHz=HCLK_MSYS / (PCLK_MSYS_RATIO + 1),所以PCLK_MSYS_RATIO=1

  • HCLK_DSYS=166MHz=MOUT_DSYS / (HCLK_DSYS_RATIO + 1), 经过在第四和第五步的设置后,MOUT_DSYS =667MHz,所以HCLK_DSYS_RATIO=3

  • PCLK_DSYS=83MHz=HCLK_DSYS / (PCLK_DSYS_RATIO + 1),所以PCLK_DSYS_RATIO=1

  • HCLK_PSYS=133Mhz=MOUT_PSYS / (HCLK_PSYS_RATIO + 1),经过在第四和第五步的设置后,MOUT_PSYS =667MHz所以HCLK_PSYS_RATIO=4

  • PCLK_PSYS=66Mhz=HCLK_PSYS / (PCLK_PSYS_RATIO + 1),所以HCLK_PSYS_RATIO=1
    所以CLK_DIV0 = 0x14131440;

第四步 、设置PLL
PLL即倍频器,用来放大运行频率。设置好分频后,我们就需要设置PLL了。APLL/MPLL的启动是通过设置APLL_CON0/MPLL_CON寄存器,我们逐个来设置。

image

APLL_CON0

image

ALPP_CON0负责设置APLL,FINPLL=24MHz,经过APLL后,我们将输 出FOUT=1000Mhz的时钟频率,FOUT的计算公式如下: FOUT=MDIV*FIN/(PDIV*2^(SDIV-1)) = 1000 MHz
由于FIN=24MHz,FOUT=1000MHz,我们可以这样取值: MDIV= 0x7d,PDIV= 0x3,SDIV=1。这3个值并不是固定死的,只要能使FOUT=1000Mhz,任意搭配都是可以的。

MPLL_CON

image

MPLL_CON寄存器负责设置MPLL,经过MPLL后,我们将输出FOUT=667Mhz的时钟频率,FOUT的计算公式如下: FOUT=MDIV*FIN/(PDIV*2^SDIV) = 667 MHz
由于FIN=24MHz,FOUT=667MHz,我们可以这样取值: MDIV=0x29B, PDIV= 0xC,SDIV=1。这3个值并不是固定死的,只要能使FOUT=667Mhz,任意搭配都是可以的。

第五步 设置各种时钟开关

image

S5PV210时钟设置参考图

在上图中,所有的MUX都是用来选择时钟的,相关寄存器是CLK_SRC0, 见下图:

image

参考S5PV210时钟设置参考图,设置各种时钟开关:
APLL_SEL=1,使用FOUTAPLL
MPLL_SEL=1,使用FOUTMPLL
EPLL_SEL=1,使用FOUTEPLL
VPLL_SEL=1,使用FOUTVPLL
MUX_MSYS_SEL=0,使用SCLKAPLL
MUX_DSYS_SEL=0,使用SCLKMPLL
MUX_PSYS_SEL=0,使用SCLKMPLL
ONENAND_SEL=1,使用HCLK_DSYS
所以CLK_SRC0=0x10001111;

3. main.c
在main函数中实现LED闪烁的功能,与前面的代码大同小异。


关键字:S5PV210  初始化  系统时钟 引用地址:S5PV210初始化系统时钟

上一篇:S5PV210 ADC转换
下一篇:S5PV210 LCD显示

推荐阅读最新更新时间:2026-03-25 11:46

S5PV210初始化系统时钟
S5PV210时钟体系 S5PV210中包含3大类时钟domain,分别是主系统时钟domain (简称MSYS,下面将使用简称来进行相关讲解)、显示相关的时钟domain (DSYS)、外围设备的时钟domain (PSYS)。 1) MSYS:用来给cortex a8处理器,dram控制器,3D,IRAM,IROM,中断控制器等提供时钟; 2) DSYS:用来给显示相关的部件提供时钟,包括FIMC, FIMD, JPEG, and multimedia IPs; 3) PSYS:用来给外围设备提供时钟,如i2s, spi,i2c,uart等 S5PV210外接的晶振频率(简称Fin)为24MHz,通过时钟控制逻辑PLL可以提高
[单片机]
<font color='red'>S5PV210</font><font color='red'>初始化</font><font color='red'>系统</font><font color='red'>时钟</font>
s5pv210——初始化时钟
1:s5pv210的时钟域 MSYS Domain:为处理器、3D、intc(中断)、DMC0、DMC1、IRAM、IROM提供时钟,HCLK_MSYS:200MHZ、PCLK_MSYS:100MHz DSYS Domain:为音视频等设备提供时钟,HCLK_DSYS:166MHZ、PCLK_DSYS:83MHz PSYS Domain:为外设提供时钟,如GPIO、I2C、PWM、UART、WDT等。HCLK_PSYS:133MHZ、PCLK_PSYS:66MHz 2:s5pv210的晶振 s5pv210有4个晶振时钟, XRTCXTI:提供32.768KHz,RTC 使用;XRTCXTI and XRTCXTO pins
[单片机]
<font color='red'>s5pv210</font>——<font color='red'>初始化</font><font color='red'>时钟</font>
基于LinkedInSTM32F4时钟系统初始化设置
LinkedInSTM32F4 时钟系统初始化是在system_stm32f4xx.c中的 SystemInit()函数中完成的。 对于系统时钟关键寄存器设置主要是在 SystemInit 函数中调用 SetSysClock()函数来设置的。我们可以先看看 SystemInit ()函数体: void SystemInit(void) { #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB-》CPACR |= ((3UL 《《 10*2)|(3UL 《《 11*2)); #endif RCC-》CR |= (uint32_t)0x00000001; RCC-》CFGR = 0x
[单片机]
基于LinkedInSTM32F4<font color='red'>时钟</font><font color='red'>系统</font><font color='red'>初始化</font>设置
Systemlnit时钟系统初始化函数剖析
在工程文件的system_stm32f10x.c中有如下代码: 这里将为大家逐个注释,让大家了解。 void SystemInit (void) { RCC- CR |= (uint32_t)0x00000001;//把HSI时钟打开 //HSION:内部高速时钟使能 (Internal high-speed clock enable) 由软件置’1’或清零。 //当从待机和停止模式返回或用作系统时钟的外部4-16MHz振荡器发生故障时,该位由硬件置’1’ 来启动内部8MHz的RC振荡器。 //当内部8MHz振荡器被直接或间接地用作或被选择将要作为系 统时钟时,该位不能被清零。 //0:内部8MHz振荡器
[单片机]
STM32F4 (7) Systemlinit时钟系统初始化函数剖析
开始我们今天的内容,今天主要讲解systeminit , 参考《STM32中文参考手册》、STM32库函数开发 回顾一下上一讲有五个的时钟来源 1.LSI 低速的内部时钟 2.LSE 低速的外部时钟 3HSI 高速的内部时钟 4PLLCLK 通过锁相环 5 HSE高速的外部时钟 SYSCLK 系统时钟,他的主要来源有1HSI 2HSE 3PLLCLK,大部分情况都是用PLLCLK,应为F4芯片可以跑到168Mhz,PLLCLK主要来自主PLLCLK的锁相环,时钟 法人计算方法 之前已经说过,主PLLCLK的锁相环可以选择HSI、HSE作为时钟输入,在我们系统初始化的时候(正点原子)使用的是H
[单片机]
STM32F4 (7) Systemlinit<font color='red'>时钟</font><font color='red'>系统</font><font color='red'>初始化</font>函数剖析
STM32F30X时钟初始化为HSI 64Mhz,并使用PLLCLK作为系统时钟
void SYSCLK_Config_HSI_64Mhz(void) { __IO uint32_t StartUpCounter = 0, HSIStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ /* Enable HSI */ RCC- CR |= ((uint32_t)RCC_CR_HSION); /* Wait till HSI is ready and if Time out is reached exit */ do {
[单片机]
LPC1788系统时钟初始化
#ifndef __SYS_H_ #define __SYS_H_ #include common.h #define SystemCoreClock 120000000 //cpu时钟频率,计算时有用 #define ApbClock 120000000 //120M #define EmcClock 60000000 //60M #define UsbClock 48000000 //48M void SystemInit(void);//系统时钟初始化,启动代码调用 #endif #include sys.h #define XTAL_FREQ 12000
[单片机]
系统时钟初始化需要注意的问题
MSP430的基本时钟源有3个:  LFXT1CLK,  XT2CLK,   DCOCLK ; 其中: LFXT1CLK:可以用低频钟表晶体、标准晶体、陶瓷谐振器或外接时钟源工作。     XT2CLK:可以用标准晶体、陶瓷谐振器或外接450khz~8mhz的时钟源工作。     DCOCLK:它是内部数字控制RC振荡器,可以调节。 MSP430的3种时钟信号是:  ACLK,  MCLK,  SMCLK; 其中: ACLK(辅助系统时钟):可选时钟源LFXT1CLK(只能是外部时钟源),且一般为32768hz手表晶体)。 MCLK(主时钟):可选LFXT1CLK,XT
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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