(1)_start(arch/arm/lib/vector.S)b reset //关闭fiq irq中断, 设置为管理模式svc
(2)reset(arch/arm/cpu/armv7/start.S)
bl cpu_init_cp15 //禁止虚拟地址与物理地址间转换,关闭指令cache,关闭分支预取,关闭MMU
bl cpu_init_crit //setup pll,mux,memory
bl _main
(3)_main(arch\arm\lib\crt0.S)
board_init_f (common\Board_f.c)
b relocate_code
ldr lr, =board_init_r(common/Board_r.c)
run_main_loop()
main_loop()
(4)main_loop()
例如uboot中LCD的初始化流程:
LCD的初始化流程:ENTRY(_main)-》board_init_f-》init_sequence_f-》board_init_r-》init_sequence_r-》stdio_add_devices-》 board_video_skip-》drv_video_init-》
一、arm处理器的异常和中断总共有7种: 按照响应优先级高到低依次是:reset复位、_data_abort数据中止、FIQ、IRQ、_prefetch_abort预取指令中止、_undefined_instruction未定义指令、SWI 中断向量表顺序:reset复位、_undefined_instruction未定义指令、SWI、_prefetch_abort预取指令中止、_data_abort数据中止、IRQ、FIQ 二、启动方式有2种: 1、Nor flash启动 Nor Flash的地址范围为:0x0000.0000—0x0800.0000 (2M Nor Flash) 片内的BootSRAM地址被置为:0x4000.0000—0x4000.DFFF (4K BootSRAM) 由于可以在Nor Flash直接运行代码,因此BootSRAM被映射到别的地址上去,可作为其他用途。 程序映像直接存放到NOR FLASH里面,中断向量表存放在0x0000.0000开始的8×4大小的空间中。 中断产生时,PC被置为相对应的向量地址。如上电或者按Reset键时,PC直接置为0x00,从NOR FLASH的0x00处开始执行。 2、nandflash启动 片内的BootSRAM地址被置为:0x0000.0000—0x0800.0000 (4K BootSRAM) NAND Flash地址接NFCE 由于NAND Flash中不能运行代码,因此必须复制到内存之中再运行。 程序映像存放在NAND FLASH中,中断向量表位置在程序映像的最前面。由于NAND FLASH不能运行代码,系统上电或者Reset的时候,内置的NAND FLASH 将访问控制接口,并将中断向量表和引导代码自动加载到内部SRAM(此时该SRAM 定位于起始地址空间0x00000000,容量为4KB),并且置PC值为0x00运行程序(这一切是有芯片内部的硬件逻辑完成的)。之后,SRAM 中的引导程序将操作系统镜像加载到SDRAM 中,操作系统就能够在SDRAM 中运行。启动完毕,4KB 的启动SRAM 就可以用于其他用途。 三、ARM处理器的7中工作模式和2种工作状态 1、2中工作状态 1) ARM状态:32位,ARM状态执行字对齐的32位ARM指令。 2)Thumb状态:16位,执行半字对齐的16位指令。 3)用Bx Rn指令来进行两种状态的切换 注:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令 2、7种工作模式 1)用户模式(USR):正常程序执行模式,不能直接切换到其他模式 2)系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权 3)快速中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式 4) 一般中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式 5)管理模式(SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发) 6)中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处 7)未定义指令中止模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式
|