【OK210试用体验】 S5PV210芯片资源小计 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】 S5PV210芯片资源小计

马猛 ( 楼主 ) 2015-8-21 18:52:28  只看该作者 倒序浏览
`

一直忙公司项目,闲来玩一下开发板。S5PV210系统框图


S5PV210的memory map 寻址空间是4GB,前512是Boot area。接下是512M的DRAM0通道和512M的DRAM1通道,是存储器的地址,用于DDR2 RAM寻址的,共1GB。

后面是5个128M的SROM (Bank0~Bank1),用于总线型设备寻址的。接着256M的Nand和OneNand控制器寄存器和256M的MP3_SRAM输出缓存,包含64KB IROM 128KB IRAM做为internal memory,一般是启动时用到的。后面的128M DMZ RO。最后面512M就是SFR了(特殊功能寄存器)



接下来谈谈时钟

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等
Mini210S外接的晶振频率(简称Fin)为24MHz,通过时钟控制逻辑PLL可以提高系统时钟。S5PV210共有4个倍频器,即PLL,包括APLL(供MSYS使用),MPLL(供DSYS使用),EPLL(供PSYS使用),VPLL(供video相关的时钟使用)。3大类时钟domain中,可以使用不同的分频,使其给不同部件输出所需要的时钟,各类时钟的关系如下图:

[/url]

S5PV210时钟分类图

如何确定各类时钟的值,[url=http://www.haogongju.net/tag/%E8%8A%AF%E7%89%87]芯片手册上给出了参考值,我们按照参考值设置即可,各类时钟的参考值如下图:

[/url]

                S5PV210时钟设置参考值图

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

[url=http://images.cnitblog.com/blog/442176/201306/23145306-edf67773495a4219861631456421e11a.png]

S5PV210时钟设置参考图

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

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
根据时钟设置图,下面是放大图:

[/url]

首先我们需要选择使用外接24MHz晶振,由上图可知,APLL和MPLL的时钟源由“FIN_PLL”决定,在芯片手册中[url=http://www.haogongju.net/tag/%E6%90%9C%E7%B4%A2]搜索“FIN_PLL”,可知相关寄存器为CLK_SRC0,见下图:

[/url]

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

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

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

[url=http://images.cnitblog.com/blog/442176/201306/23145311-6ea3e30cc1444951a67a1c9e23280e7f.png]

现在我们来根中给出的时钟设置参考值来设置该寄存器。

[/url]

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

[url=http://images.cnitblog.com/blog/442176/201306/23145314-add1552786cf401481846ee8bbfeb17c.png]

APLL_CON0

[/url]

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,任意搭配都是可以的。

[url=http://images.cnitblog.com/blog/442176/201306/23145317-f41729c5778e4917a12867306004b737.png]

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,任意搭配都是可以的。

第五步 设置各种时钟开关

[/url]

S5PV210时钟设置参考图

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

[url=http://images.cnitblog.com/blog/442176/201306/23145321-08ce6ee72b634f43811140ba67b6149b.png]

参考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闪烁的功


`

0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-11-28 00:28 , Processed in 0.587862 second(s), Total 60, Slave 41 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表