简单分析.S 文件理解开机过程
/***********************************************************************************************************************************************************************/ .globl _start _start:
/*硬件相关设置*/
/* Peri port setup */
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff)
/*关看门狗*/
ldr r0, =0x7E004000
mov r1, #0
str r1, [r0]
/***********************************************************************************************************************************************************************/上面这些都是套路,设置硬件告诉CPU 外部RAM在哪,关闭看门狗。 #define OTHERS 0x7e00f900
ldr r0,=OTHERS
ldr r1,[r0]
bic r1,r1, #0xc0
str r1,[r0]
loop1:
ldr r0,=OTHERS
ldr r1,[r0]
and r1,r1,#0xf00
cmp r1,#0
bne loop1
0: Asynchronous mode, MPLL作为HCLK PCLK等的时钟源 1: Synchronous mode APLL作为HCLK PCLK等的时钟源 ![]() ![]() /***********************************************************************************************************************************************************************/ #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]
CLK_DIV0 0x7E00_F020 读/写 选择时钟分频器的比例。 ![]() ![]() 上面这些是设置 选择时钟分频器的比例 ,就是时钟框图中右面那些DIVDE /***********************************************************************************************************************************************************************/ /*设置ARMCLK*/
ldr r0, =0x7E00F00C /*FOUT_APLL = 533 APLL_EN = 1<<31, MDIV = 266<<16, PDIV = 3<<8, SDIV = 1*/
ldr r1, =0x810a0301
str r1, [r0]
#define MPLL_CON_VAL ((1<<31)|(266<<16)|(3<<8)|(1))
ldr r0,=0x7E00F010
ldr r1,=MPLL_CON_VAL
str r1,[r0]
![]() ![]() 上面这些是设置MPLL 和APLL 的倍频,就是把12M晶振提供的时钟进行倍频,经过后期分频提供给片上系统 /***********************************************************************************************************************************************************************/ ldr r0,=0x7E00F01C
ldr r1,=0x03
str r1,[r0]
时钟发生器框图中说有选择门都是由这个寄存器控制的 CLK_SRC 0x7E00_F01C ![]() ![]() 上面是时钟选择,框图上绝大多数的选择门都是通过这个寄存器控制的 /***********************************************************************************************************************************************************************/ ldr sp, =8*1024
bl main
halt:
b halt
程序结束。 |
S3C6410时钟分析(蜗牛我的原创)
最新推荐文章于 2017-10-18 19:45:31 发布