CPU 的初始化(ARM & u-boot)

来源:互联网 发布:淘宝网纯棉免熨短裤 编辑:程序博客网 时间:2024/05/18 01:31

1. 设定 CPU 内部寄存器, 包括状态寄存器和SP等.

start_code:/* * set the cpu to SVC32 mode */mrsr0, cpsrbicr0, r0, #0x1forrr0, r0, #0xd3msrcpsr, r0

2. 关闭看门狗.

ldrr0, =pWTCONmovr1, #0x0strr1, [r0]

3. 设定中断向量表.

/* * mask all IRQs by setting all bits in the INTMR - default */movr1, #0xffffffffldrr0, =INTMSKstrr1, [r0]# if defined(CONFIG_S3C2410)ldrr1, =0x3ffldrr0, =INTSUBMSKstrr1, [r0]# endif

4. 设定 CPU 内部各单元(包括 CPU 核与内置的其他设备如定时器, 电源管理, SDRAM控制器, LCD控制器, 时钟等)的 Clock 时钟.

/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz ! */ldrr0, =CLKDIVNmovr1, #3strr1, [r0]

Bus设置------设置各个外部内存的特性, 包括要插入几个 waiting cycle, 操作该内存的基本单位宽度(8/16/32bit)等.

// 见 MMU 设置.

5. 设置 CPU 各个 PIN 引脚的用途使其符合系统或应用程序的要求. 一般都是设置选择输入输出或者其他第二功能的寄存器.

6. 设置 CPU 的工作模式, 刚开始一般都为 Full run mode.

// 如上面

7. 设置 MMU等存储相关的设备.

/* ************************************************************************* * * CPU_init_critical registers * * setup important registers * setup memory timing * ************************************************************************* */#ifndef CONFIG_SKIP_LOWLEVEL_INITcpu_init_crit:/* * flush v4 I/D caches */movr0, #0mcrp15, 0, r0, c7, c7, 0/* flush v3/v4 cache */mcrp15, 0, r0, c8, c7, 0/* flush v4 TLB *//* * disable MMU stuff and caches */mrcp15, 0, r0, c1, c0, 0bicr0, r0, #0x00002300@ clear bits 13, 9:8 (--V- --RS)bicr0, r0, #0x00000087@ clear bits 7, 2:0 (B--- -CAM)orrr0, r0, #0x00000002@ set bit 2 (A) Alignorrr0, r0, #0x00001000@ set bit 12 (I) I-Cachemcrp15, 0, r0, c1, c0, 0/* * before relocating, we have to setup RAM timing * because memory timing is board-dependend, you will * find a lowlevel_init.S in your board directory. */movip, lrbllowlevel_initmovlr, ipmovpc, lr#endif /* CONFIG_SKIP_LOWLEVEL_INIT */

8. 其他内部设备的初始化.

=============================================================================================================================