分析篇(二)-----lowlevel.init.S
分析篇(二)-----lowlevel.init.S
-----------------------------
使用环境
PC: ubuntu 11.04
kernel: 2.6.32-28-generic
corss: arm-linux-gcc 4.3.2
arm: s3c6410
-----------------------------
作者: LvApp
联系方式: 97164811@qq.com
一切版权均有作者所有,欢迎转载,请指明出处,如何修改请与本人联系,谢谢
今天主要分析上次说的lowlevel_init.S 这个文件board/samsung/smdk6400/lowlevel_init.S
这个文件内的lowlevel_init 就是系统初始化的时候被调用的,在这里面完成很多事情,主要为:
1:led设置
2:禁止看门狗
3:禁止所有的中断
4:设置系统时钟
5:设置nand相关的寄存器
6:设置内存blank相关寄存器
等
下面直接看代码:
这里开始就是跟中断相关了/* * NAND Interface init for SMDK6400 */nand_asm_init:ldrr0, =ELFIN_NAND_BASE/* 此处由于是第一次获取,读取到的应该是复位值 0x0000100X * 此处设置了nand时序线上的延时时间,采用最大值 TACLS TWRPH0 TWRPH1 均为7 * * TACLS = HCLK * TACLS * TWRPH0 = HCLK * (TWRPH0 + 1) * TWRPH1 = HCLK * (TWRPH1 + 1) */ldrr1, [r0, #NFCONF_OFFSET]orrr1, r1, #0x70orrr1, r1, #0x7700strr1, [r0, #NFCONF_OFFSET]/* 开始nand控制器,禁止2个NAND芯片,未使能 */ldrr1, [r0, #NFCONT_OFFSET]orrr1, r1, #0x07strr1, [r0, #NFCONT_OFFSET]movpc, lr/** NAND Interface init for SMDK6400*/nand_asm_init:ldrr0, =ELFIN_NAND_BASE/* 此处由于是第一次获取,读取到的应该是复位值 0x0000100X * 此处设置了nand时序线上的延时时间,采用最大值 TACLS TWRPH0 TWRPH1 均为7 * * TACLS = HCLK * TACLS * TWRPH0 = HCLK * (TWRPH0 + 1) * TWRPH1 = HCLK * (TWRPH1 + 1) */ldrr1, [r0, #NFCONF_OFFSET]orrr1, r1, #0x70orrr1, r1, #0x7700strr1, [r0, #NFCONF_OFFSET]/* 开始nand控制器,禁止2个NAND芯片,未使能 */ldrr1, [r0, #NFCONT_OFFSET]orrr1, r1, #0x07strr1, [r0, #NFCONT_OFFSET]movpc, lr对于nand的详细介绍,会在移植帖中讲解..这里只需要简单的知道下就好了..第一阶段对nand的操作,只有copy了...
我们把复杂的处理,都放到第二阶段,到时候会跟大家讲解mtd管理的流程...
Finish!
Thanks a lot;