PLL锁相环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PLL锁相环相关的知识,希望对你有一定的参考价值。

转载请注明原文出处,http://www.cnblogs.com/flyingcloude/p/6992482.html

  S3C6410芯片有3路PLL, APLL用于ARM时钟操作,MPLL用于主时钟操作(用于操作AXI、AHB、APB总线操作),EPLL用于特殊用途。当OM[0]=0,表示使用晶振,CLK_SRC[0]=1表示选择APLL。

  时钟设置的过程根据6410芯片手册的说明,可以总结为如下过程:

     (1)设置锁定时间,对0x7E00F000,0x7E00F004,0x7E00F008进行操作。

     (2)设置异步模式,对0x7E00F900进行操作,使用bic清除功能。

  (3)循环等待,读取0x7E00F900。

  (4)设置PLL, 0x7E00F020

  (5)设置APLL,0x7E00F00C

  (6)设置MPLL,0x7E00F010

  (7)切换时钟源(0x7E00F01C)

具体的代码如下:

  

.globl _start
_start:

/*硬件相关的设置-该设置是ARM11中特有的,告诉CPU外围设备的基地址*/
    ldr r0, =0x70000000
    orr r0, r0,  #0x13
/*设置协寄存器,在ARM11内核手册中有说明*/
/*r0 = 0x70000013 表示 长度为256M*/
    mcr p15, 0, r0, c15, c2, 4

/*关看门狗*/
/*WTCON(0X7E004000) = 0*/
    ldr r0, =0x7E004000
    mov r1, #0
    str r1, [r0]

/*设置PLL*/
/*设置APLL_LOCK MPLL_LOCK S3C6410手册的在139页*/
    ldr r0, =0x7E00F000
    ldr r1, =0x0000FFFF
    str r1, [r0]

    ldr r0, =0x7E00F004
    ldr r1, =0x0000FFFF
    str r1, [r0]

/*设置异步模式 OTHERS s3c6410手册169页*/
    ldr r0, =0x7E00F900
    ldr r1, [r0]
    bic r1, r1, #0xc0
    str r1, [r0]

/*循环等待 syncack [11:8] SYNC mode acknowledge(Read Only) 0x0*/
loop1:
    ldr r0, =0x7E00F900
    ldr r1, [r0]
    and r1, r1, #0xf00
    cmp r1, #0
    bne loop1

/*设置CLK_DIV0 参考手册125页*/
#define ARM_RATIO        0
#define HCLKX2_RATIO     1
#define HCLK_RATIO       1
#define PCLK_RATIO       3
#define MPLL_RATIO       0

    ldr r0, =0x7E00F020
    ldr r1, =(ARM_RATIO) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12)
    str r1, [r0]

/*设置APLL 参考手册142页*/
#define APLL_ENABLE    1
#define MDIV        266
#define PDIV        3
#define SDIV        1
    ldr r0, =0x7E00F00C
    ldr r1, =(APLL_ENABLE << 31) | (MDIV << 16) | (PDIV << 8) | (SDIV)
    str r1, [r0]

/*设置MPLL 参考手册*/
    ldr r0, =0x7E00F010
    ldr r1, =(APLL_ENABLE << 31) | (MDIV << 16) | (PDIV << 8) | (SDIV)
    str r1, [r0]

/*时钟源选择*/
    ldr r0, =0x7E00F01C
    ldr r1, =0x03
    str r1, [r0]

/*设置GPKCON0让 GPK4,GPK5,GPK6,GPK7作为输出引脚*/
    ldr r0, =0x7F008800
    ldr r1, =0x11110000
    str r1, [r0]

/*设置GPKDAT让 GPK4 = 0, GPK5 = 1, GPK6 = 0, GPK7 = 1*/
/*即LED1亮,LED2暗,LED3亮,LED4暗*/
    ldr r0, =0x7F008808
    mov r1, #0x00A0
    str r1, [r0]

loop:
    mov r1, #0x00A0
    str r1, [r0]
    bl delay
    mov r1, #0x0080
    str r1, [r0]
    bl delay
    b loop

delay:
    ldr r2, =0xF4240

delay_loop:
    sub r2, r2, #1
    cmp r2, #0
    bne delay_loop
    mov pc, lr

halt: 
    b halt

通过编译,将bin文件焼入之后,会发现LED灯的闪烁速度明显比http://www.cnblogs.com/flyingcloude/p/3172654.html的要快很多

 

 

转载请注明原文出处,http://www.cnblogs.com/flyingcloude/p/6992482.html

以上是关于PLL锁相环的主要内容,如果未能解决你的问题,请参考以下文章

fpga实操训练(锁相环pll)

锁相环倍频原理简要分析

[从零开始学习FPGA编程-53]:高阶篇 - 基于IP核的FPGA开发-PLL锁相环IP核的原理与配置(Xilinx)

硬方案——锁相环PLL技术实战总结(基本原理集成芯片CD4046参数设计避坑经验总结及实测验证)

ADIsimPLL锁相环设计过程

xilinx fpga 上电配置后 pll的锁相状态