s5pv210——时钟系统

来源:互联网 发布:搜款网服饰网络批发 编辑:程序博客网 时间:2024/05/16 10:17

以下内容源于朱友鹏《物联网大讲坛》课程的学习,以及博客http://www.cnblogs.com/biaohc/p/6349195.html,以及用户手册,如有侵权,请告知删除。


一、s5pv210的时钟域

(1)MSYS Domain

  • 为处理器、3D、intc(中断)、DMC0、DMC1、IRAM、IROM提供时钟;
  • HCLK_MSYS:200MHZ(DM0、DM1使用)
  • PCLK_MSYS:100MHz
  • ARMCLK:1000MHZ(cpu主频)
  • HCLK_IMEM:100MHZ(IROM、IRAM使用)

(2)DSYS Domain

  • 为音视频等设备提供时钟;
  • HCLK_DSYS:166MHZ
  • PCLK_DSYS:83MHz

(3)PSYS Domain

  • 为外设提供时钟,如GPIO、I2C、PWM、UART、WDT等。
  • HCLK_PSYS:133MHZ
  • PCLK_PSYS:66MHz



二、s5pv210的晶振

1、s5pv210有四个晶振

(1)XRTCXTI

  • 提供32.768KHz,RTC 使用;
  • XRTCXTI and XRTCXTO pins

(2)XXTI

  • CMU and PLL使用这个时钟,为APLL、MPLL、VPLL、EPLL提供时钟。
  • 推荐频率24MHz。
  • XXTI and XXTO pins。

(3)XUSBXTI

  • 为APLL、MPLL、VPLL、EPLL、USB PHY提供时钟。
  • 推荐24MHz。
  • XUSBXTI and XUSBXTO pins

(4)XHDMIXTI :

  • 27MHz,VPLL、HDMI PHY为TV解码器提供54MHz时钟。
  • XHDMIXTI and XHDMIXTO pins。



三、s5pv210推荐时钟设置



根据推荐值来设置相应的MUX开关、PLL锁相环倍频、DIV分频器的值来得到相应的时钟。




四、时钟设置的关键性寄存器

1、xPLL_LOCK寄存器

(1)设置锁定周期,一般为默认值。因为PLL倍频需要一定时间才能达到相应的频率。



2、xPLL_CON,xPLL_CON0,xPLL_CON1

(1)用来打开或关闭PLL电路,设置倍频参数,查看PLL锁定状态等。

(2)APLL_CON0/APLL_CON1, R/W, Address =0xE010_0100/0xE010_0104


设置APLL的倍频率:FOUT = MDIV X FIN / (PDIV × 2^(SDIV)-1)

如1000MHZ,则1000=125*24 / (3*2^1-1)

(3)MPLL_CON, R/W, Address = 0xE010_0108



设置MPLL的倍频率:FOUT = MDIV X FIN / (PDIV X 2^(SDIV))

上述的1、2是用来控制锁相环相关的。

3、CLK_SRCn(n=0~6)、CLK_SRC_MASKn(n=0~6)

(1)设置MUX开关;

(2)如CLK_SRC0寄存器。首先要关闭4个PLL的MUX开关,设置好相应寄存器以后再把PLL的MUX开关打开。



4、CLK_DIVn寄存器

(1)主要是设置各个分频器的值

(2)如CLK_DIV0寄存器





五、代码实战

#define _REG_APLL_LOCK            *((unsigned int*)0xE0100000)#define _REG_MPLL_LOCK            *((unsigned int*)0xE0100008)#define _REG_EPLL_LOCK            *((unsigned int*)0xE0100010)#define _REG_VPLL_LOCK            *((unsigned int*)0xE0100020)#define _REG_APLL_CON0            *((unsigned int*)0xE0100100)#define _REG_MPLL_CON            *((unsigned int*)0xE0100108)#define _REG_CLK_SRC0            *((unsigned int*)0xE0100200)#define _REG_CLK_DIV0            *((unsigned int*)0xE0100300)#define APLL_SDIV                (1)#define APLL_PDIV                (3)#define APLL_MDIV                (125)#define APLL_EN                    (1)#define MPLL_SDIV                (1)#define MPLL_PDIV                (12)#define MPLL_MDIV                (667)#define MPLL_EN                    (1)void clock_init(void){    //第一步关闭PLL的MUX开关    _REG_CLK_SRC0 = 0x0;        //第二步设置LOCK时间,设置为默认值0x0FFF    _REG_APLL_LOCK = 0x0FFF;    _REG_MPLL_LOCK = 0x0FFF;    _REG_EPLL_LOCK = 0x0FFF;    _REG_VPLL_LOCK = 0x0FFF;        //第三步设置DIV分频器的值        _REG_CLK_DIV0 = 0x14131400;        //第四步设置APLL、MPLL的倍频值。    _REG_APLL_CON0 = (APLL_EN<<31) | (APLL_MDIV<<16) | (APLL_PDIV<<8) | (APLL_SDIV<<0);    _REG_MPLL_CON  = (MPLL_EN<<31) | (MPLL_MDIV<<16) | (MPLL_PDIV<<8) | (MPLL_SDIV<<0);        //第五步设置MUX开关    _REG_CLK_SRC0 = 0x1111;                }


0 0
原创粉丝点击