转载请注明原文出处,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
时间: 2024-10-17 13:50:16