首页 > 代码库 > PLL锁相环

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 loopdelay:    ldr r2, =0xF4240delay_loop:    sub r2, r2, #1    cmp r2, #0    bne delay_loop    mov pc, lrhalt:     b halt

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

 

 

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

PLL锁相环