BootLoader的设计与实现_第1页
BootLoader的设计与实现_第2页
BootLoader的设计与实现_第3页
BootLoader的设计与实现_第4页
BootLoader的设计与实现_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-1-嵌入式系统嵌入式系统BootLoaderBootLoader的设计与实现的设计与实现S3C44B0XS3C44B0X的的BootLoaderBootLoader-2-课件总目录课件总目录 2.移植前规划 3.Bootloader 1.绪论 -3-章节目录章节目录1.1.绪论绪论 1.1 1.1 BootLoaderBootLoader简介简介 u 内容提要内容提要 返返 回回 1下一页下一页上一页上一页-4-1.1.绪论绪论 内容提要内容提要 本章首先介绍了本章首先介绍了BootloaderBootloader的定义、特点、的定义、特点、安装媒介、下载方式、和启动过程等方面的内安装媒介、

2、下载方式、和启动过程等方面的内容。容。返返 回回 1下一页下一页上一页上一页-5-1.1 BootLoader1.1 BootLoader简介简介 (1)(1)uBIOSBIOSu定义:定义:BIOS BIOS (Basic Input/Output SystemBasic Input/Output System)是一组固化)是一组固化到计算机内主板上一个到计算机内主板上一个ROMROM芯片上的程序,它保存着计算机芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序;检程序和系统自启动程序; u主

3、要功能主要功能: :是为计算机提供最底层的、最直接的硬件设置和是为计算机提供最底层的、最直接的硬件设置和控制。控制。 返返 回回 1下一页下一页上一页上一页-6-1.1 BootLoader1.1 BootLoader简介简介 (2)(2)u嵌入式系统引导加载程序嵌入式系统引导加载程序u对于对于PCPC机来说,其开机后操作系统启动前的硬件初始化操机来说,其开机后操作系统启动前的硬件初始化操作是由作是由BIOSBIOS完成的;完成的;u对于嵌入式系统来说,出于通用性、价格等方面的考虑,对于嵌入式系统来说,出于通用性、价格等方面的考虑,通常并没有像通常并没有像BIOSBIOS那样的固件程序;那样的

4、固件程序;u启动时用于完成初始化操作的引导加载程序必须自行编写,启动时用于完成初始化操作的引导加载程序必须自行编写,这段程序一般被称为这段程序一般被称为BootloaderBootloader程序。程序。uBootLoaderBootLoaderuBootLoaderBootLoader程序是系统加电(或复位)后运行的第一段软程序是系统加电(或复位)后运行的第一段软件代码。件代码。u主要作用:通过这段代码,可以初始化系统硬件设备主要作用:通过这段代码,可以初始化系统硬件设备、建、建立内存空间的映立内存空间的映射射图,从而将系统的软硬件环境带到一个图,从而将系统的软硬件环境带到一个合适的状态,以

5、便最终调用操作系统内核合适的状态,以便最终调用操作系统内核。返返 回回 1下一页下一页上一页上一页-7-1.1 BootLoader1.1 BootLoader简介简介 (3)(3)uBootLoaderBootLoader特点特点uBootLoaderBootLoader除了依赖除了依赖CPUCPU的体系结构外,还依赖于具体的嵌的体系结构外,还依赖于具体的嵌入式板级设备的配置;入式板级设备的配置;u对于两块不同的嵌入式开发板,即使它们是基于同一种对于两块不同的嵌入式开发板,即使它们是基于同一种CPUCPU而构建的,如果他们的硬件资源和配置不一致,要想让运而构建的,如果他们的硬件资源和配置不一

6、致,要想让运行在一块板子上的行在一块板子上的BootLoaderBootLoader程序也能运行在另一块板子程序也能运行在另一块板子上,也还是需要作一些必要的修改。上,也还是需要作一些必要的修改。u通用通用BootLoaderBootLoaderu综上所述,为嵌入式系统建立一个通用的综上所述,为嵌入式系统建立一个通用的BootLoaderBootLoader是很是很困难的;困难的;u尽管如此,我们仍然可以对尽管如此,我们仍然可以对BootLoaderBootLoader(尤其是基于同种(尤其是基于同种CoreCore的微处理器)归纳出一些通用的概念和设计思路,用的微处理器)归纳出一些通用的概念

7、和设计思路,用来指导用户特定来指导用户特定BootLoaderBootLoader的设计与实现。的设计与实现。返返 回回 1下一页下一页上一页上一页-8-1.1 BootLoader1.1 BootLoader简介简介 (4)(4)uBootLoaderBootLoader安装媒介安装媒介u系统加电或复位后,所有的系统加电或复位后,所有的CPUCPU通常都从通常都从CPUCPU制造商预先安制造商预先安排的地址上取指令。排的地址上取指令。u举例说明举例说明u基于基于ARM7TDMI CoreARM7TDMI Core的嵌入式系统中,系统在上电或复位时的嵌入式系统中,系统在上电或复位时是从是从0

8、x000000000 x00000000地址开始取第一条指令执行,而在这个地地址开始取第一条指令执行,而在这个地址安排的通常就是系统的址安排的通常就是系统的BootLoaderBootLoader程序。程序。u嵌入式系统通常都有某种类型的固态存储设备嵌入式系统通常都有某种类型的固态存储设备( (比如比如ROMROM、EPROMEPROM或或FLASHFLASH等等) )被安排这个起始地址上用来存放被安排这个起始地址上用来存放BootLoaderBootLoader程序。程序。返返 回回 1下一页下一页上一页上一页-9-1.1 BootLoader1.1 BootLoader简介简介 (5)(5

9、)uBootLoaderBootLoader下载方式下载方式目标机目标机串口串口网口网口JTAGJTAGMPUMPURAMRAMBOOT ROMBOOT ROM下载工具下载工具宿主机宿主机u 通过编程器将可执行目标文件烧写到通过编程器将可执行目标文件烧写到 BootROMBootROM中。中。u 通常通过串行口、网口或通常通过串行口、网口或JTAGJTAG等接口等接口下载。下载。返返 回回 1下一页下一页上一页上一页-10-1.1 BootLoader1.1 BootLoader简介简介 (6)(6)uBootLoaderBootLoader启动过程启动过程u为了增加为了增加BootLoade

10、rBootLoader的通用性和可移植性,本文把启动过的通用性和可移植性,本文把启动过程分为程分为stagelstagel和和stage2stage2两个阶段。两个阶段。ustage1stage1阶段:执行的是用汇编语言来实现的依赖阶段:执行的是用汇编语言来实现的依赖CPUCPU体系结体系结构的代码,这样可以提高系统的启动速度。构的代码,这样可以提高系统的启动速度。ustage2stage2阶段:完成的是阶段:完成的是OSOS内核启动前的准备工作,多采用内核启动前的准备工作,多采用处理能力强、可移植性好的处理能力强、可移植性好的C C语言来实现。语言来实现。 u最小启动代码最小启动代码usta

11、ge1stage1阶段执行的代码,我们称之为最小启动代码。所谓阶段执行的代码,我们称之为最小启动代码。所谓最小启动代码最小启动代码是指为了完成系统(是指为了完成系统(OSOS或用户应用程序)启或用户应用程序)启动所必须的最少硬件的初始化程序。动所必须的最少硬件的初始化程序。返返 回回 1下一页下一页上一页上一页-11-1.3 1.3 C/OS-IIC/OS-II移植流程移植流程Phase 1 Phase 1 Phase 2 Phase 2 1.1.移植的硬件条件移植的硬件条件2.2.编译器的选择编译器的选择3.3.工作状态的选择工作状态的选择4.4.工作模式的选择工作模式的选择5.BootLo

12、ader5.BootLoader框架框架6.6.初始化流程初始化流程7.7.编写最小启动代码编写最小启动代码移植前规划阶段移植前规划阶段操作系统移植阶段操作系统移植阶段 -12-章节目录章节目录2.2.移植前规划移植前规划 2.1 2.1 移植的硬件条件移植的硬件条件 2.2 2.2 编译器的选择编译器的选择 2.3 2.3 工作状态工作状态的的选择选择 2.4 2.4 工作模式工作模式的的选择选择 u 内容提要内容提要 返返 回回 2下一页下一页上一页上一页-13-2.2 2.2 编译器的选择编译器的选择 (2)(2)u常用的常用的ARMARM编译器编译器u目前,比较流行的编译器有目前,比较

13、流行的编译器有SDTSDT、ADSADS、IARIAR、KEILKEIL和和GCCGCC等,等,其中其中SDTSDT和和ADSADS均为均为ARMARM公司开发,公司开发,ADSADS为为SDTSDT的升级版。的升级版。 u本移植采用的编译器本移植采用的编译器uADS1.2ADS1.2(ARM Developer Suite ARM Developer Suite )集成开发环境。)集成开发环境。返返 回回 2下一页下一页上一页上一页-14-2.3 2.3 工作状态的选择工作状态的选择uARMARM处理器工作状态处理器工作状态u自从自从ARM7TDMI CoreARM7TDMI Core以后,

14、体系结构中具有以后,体系结构中具有T T变种的变种的ARMARM处处 理器核可以工作在以下两种状态。理器核可以工作在以下两种状态。uARMARM状态状态nARMARM状态下执行字对准的状态下执行字对准的3232位位ARMARM指令;指令;uThumbThumb状态状态nThumbThumb状态下执行半字对准的状态下执行半字对准的1616位位ThumbThumb指令。指令。两种工作状态可以进行相互切换。两种工作状态可以进行相互切换。u本移植采用的工作状态本移植采用的工作状态u本移植只实现本移植只实现 COS-IICOS-II在在ARMARM状态下工作。状态下工作。返返 回回 2下一页下一页上一页

15、上一页-15-2.4 2.4 工作模式的选择工作模式的选择 (1)(1)uARMARM处理器工作模式处理器工作模式与用户模式类似,但具有可以直与用户模式类似,但具有可以直接切换到其它模式等特权接切换到其它模式等特权支持操作系统的特权任务支持操作系统的特权任务 系统系统 ( (sys)sys)未定义指令异常时进入此模式未定义指令异常时进入此模式支持硬件协处理器的软件支持硬件协处理器的软件仿真仿真 未定义未定义( (und)und)在在ARM7TDMIARM7TDMI没有大用处没有大用处用于支持虚拟内存和存储用于支持虚拟内存和存储器保护器保护 中止中止 ( (abtabt) )复位和软件中断时进入

16、此模式复位和软件中断时进入此模式操作系统保护代码操作系统保护代码 管理管理 ( (svc)svc)IRQIRQ异常响应时进入此模式异常响应时进入此模式用于通用中断处理用于通用中断处理 中断中断 ( (irqirq) )FIQFIQ异常响应时进入此模式异常响应时进入此模式支持高速数据传输及通道支持高速数据传输及通道处理处理 快中断快中断( (fiqfiq) )不能直接切换到其它模式不能直接切换到其它模式正常程序工作模式正常程序工作模式 用户用户 ( (usrusr) )备注备注说明说明处理器模式处理器模式返返 回回 2下一页下一页上一页上一页-16-2.4 2.4 工作模式的选择工作模式的选择

17、(2)(2)u特权模式特权模式与用户模式类似,但具有可以直与用户模式类似,但具有可以直接切换到其它模式等特权接切换到其它模式等特权支持操作系统的特权任务支持操作系统的特权任务 系统系统 ( (sys)sys)未定义指令异常时进入此模式未定义指令异常时进入此模式支持硬件协处理器的软件支持硬件协处理器的软件仿真仿真 未定义未定义( (und)und)在在ARM7TDMIARM7TDMI没有大用处没有大用处用于支持虚拟内存和存储用于支持虚拟内存和存储器保护器保护 中止中止 ( (abtabt) )复位和软件中断时进入此模式复位和软件中断时进入此模式操作系统保护代码操作系统保护代码 管理管理 ( (s

18、vc)svc)IRQIRQ异常响应时进入此模式异常响应时进入此模式用于通用中断处理用于通用中断处理 中断中断 ( (irqirq) )FIQFIQ异常响应时进入此模式异常响应时进入此模式支持高速数据传输及通道支持高速数据传输及通道处理处理 快中断快中断( (fiqfiq) )不能直接切换到其它模式不能直接切换到其它模式正常程序工作模式正常程序工作模式 用户用户 ( (usrusr) )备注备注说明说明处理器模式处理器模式u 说明说明 1.1.除用户模式外,其它模式称为除用户模式外,其它模式称为特权模式特权模式; 2.ARM2.ARM内部寄存器和一些片内外设在硬件设计内部寄存器和一些片内外设在硬

19、件设计 上只允许(或可选为只允许)特权模式下访问;上只允许(或可选为只允许)特权模式下访问; 3.3.特权模式可以自由的切换处理器模式,而用户特权模式可以自由的切换处理器模式,而用户 模式不能直接切换到别的模式。模式不能直接切换到别的模式。返返 回回 2下一页下一页上一页上一页-17-2.4 2.4 工作模式的选择工作模式的选择 (3)(3)u异常模式异常模式与用户模式类似,但具有可以直与用户模式类似,但具有可以直接切换到其它模式等特权接切换到其它模式等特权支持操作系统的特权任务支持操作系统的特权任务 系统系统 ( (sys)sys)未定义指令异常时进入此模式未定义指令异常时进入此模式支持硬件

20、协处理器的软件支持硬件协处理器的软件仿真仿真 未定义未定义( (und)und)在在ARM7TDMIARM7TDMI没有大用处没有大用处用于支持虚拟内存和存储用于支持虚拟内存和存储器保护器保护 中止中止 ( (abtabt) )复位和软件中断时进入此模式复位和软件中断时进入此模式操作系统保护代码操作系统保护代码 管理管理 ( (svc)svc)IRQIRQ异常响应时进入此模式异常响应时进入此模式用于通用中断处理用于通用中断处理 中断中断 ( (irqirq) )FIQFIQ异常响应时进入此模式异常响应时进入此模式支持高速数据传输及通道支持高速数据传输及通道处理处理 快中断快中断( (fiqfi

21、q) )不能直接切换到其它模式不能直接切换到其它模式正常程序工作模式正常程序工作模式 用户用户 ( (usrusr) )备注备注说明说明处理器模式处理器模式u 说明说明 1.1.这五种模式称为这五种模式称为异常模式异常模式; 2.2.可以通过程序切换进入外,也可由特定的异常进入;可以通过程序切换进入外,也可由特定的异常进入; 3.3.当特定的异常出现时,处理器进入相应的模式;当特定的异常出现时,处理器进入相应的模式; 4.4.每种异常模式都有一些独立的寄存器;每种异常模式都有一些独立的寄存器; 5.5.系统上电或复位后自动进入系统上电或复位后自动进入管理管理(SVC)(SVC)模式,模式,本移

22、植本移植 COS-IICOS-II的任务正常是运行在的任务正常是运行在管理模式管理模式。-18-章节目录章节目录3.3.操作系统移植操作系统移植 3.1 3.1 BootLoaderBootLoader总体流程图总体流程图 3.2 3.2 BootLoader初始化初始化步骤步骤 3.3 3.3 编写编写最小启动代码最小启动代码 u 内容提要内容提要 返返 回回 3下一页下一页上一页上一页-19-3.3.操作系统移植操作系统移植内容提要内容提要 本章首先介绍了本章首先介绍了BootLoader BootLoader 所必需实现所必需实现的功能;然后采用流程图方式介绍了的功能;然后采用流程图方式

23、介绍了BootLoaderBootLoader编写的步骤;接着用图示的方法介编写的步骤;接着用图示的方法介绍了最小启动代码的编写。绍了最小启动代码的编写。返返 回回 3下一页下一页上一页上一页-20-3.1 BootLoader3.1 BootLoader总体流程图总体流程图 3.1.1 3.1.1 总体流程图总体流程图硬件初始化stage1123设置中断向量表最小硬件初始化最小启动代码RTOS运行环境初始化RTOS初始化stage2456RTOS初始化启动RTOS硬件抽象层初始化软件初始化用户程序7用户程序初始化返返 回回 3下一页下一页上一页上一页-21-3.2 BootLoader3.2

24、 BootLoader初始化初始化步骤步骤 (1)(1)3.2.1 3.2.1 硬件初始化阶段硬件初始化阶段123最小硬件初始化最小启动代码stage1设置中断向量表RTOS运行环境初始化u 中断向量表放在上电后映射在从0 x00000000开始的8*4个字节的连续存储空间中;u 其作用是指定了各种异常中断处理程序的入口地址。 设置中断向量表 返返 回回 3下一页下一页上一页上一页-22-3.2 BootLoader3.2 BootLoader初始化初始化步骤步骤 (2)(2)3.2.1 3.2.1 硬件初始化阶段硬件初始化阶段23最小硬件初始化最小启动代码设置中断向量表RTOS运行环境初始化

25、stage11u 禁用看门狗定时器;u 屏蔽所有中断;u 设定CPU的时钟频率;u 初始化存储器;u 分配各种模式下的栈空间。 最小硬件初始化 返返 回回 3下一页下一页上一页上一页-23-3.2 BootLoader3.2 BootLoader初始化初始化步骤步骤 (3)(3)3.2.1 3.2.1 硬件初始化阶段硬件初始化阶段123最小硬件初始化最小启动代码设置中断向量表RTOS运行环境初始化stage1u 为RTOS运行准备合适的RAM;u 呼叫RTOS主(Main)程序。 RTOS运行环境初始化 返返 回回 3下一页下一页上一页上一页-24-3.2 BootLoader3.2 Boot

26、Loader初始化初始化步骤步骤 (4)(4)3.2.2 RTOS3.2.2 RTOS初始化阶段初始化阶段456硬件抽象层初始化RTOS初始化启动RTOSstage2u 系统cache、总线设置;u 中断及中断处理程序初始化;u I/O端口配置;u 初始化定时器;u 对RTOS所需的其它设备初始化。 硬件抽象层初始化 返返 回回 3下一页下一页上一页上一页-25-3.2 BootLoader3.2 BootLoader初始化初始化步骤步骤 (5)(5)456硬件抽象层初始化RTOS初始化启动RTOSstage2u RTOS内核启动参数初始化;u RTOS扩展部件初始化。 RTOS初始化 3.2

27、.2 RTOS3.2.2 RTOS初始化阶段初始化阶段返返 回回 3下一页下一页上一页上一页-26-3.2 BootLoader3.2 BootLoader初始化初始化步骤步骤 (6)(6)3.2.2 RTOS3.2.2 RTOS初始化阶段初始化阶段456硬件抽象层初始化RTOS初始化启动RTOSstage2u 运行优先级最高的就绪任务;u 启动RTOS时钟中断。 启动RTOS 返返 回回 3下一页下一页上一页上一页-27-3.2 BootLoader3.2 BootLoader初始化初始化步骤步骤 (7)(7)3.2.3 3.2.3 用户程序初始化阶段用户程序初始化阶段7用户程序用户程序初始

28、化u 用户程序正常运行所进行的初始化。 用户程序初始化 返返 回回 3下一页下一页上一页上一页-28-3.3 3.3 编写最小启动代码编写最小启动代码3.3.1 3.3.1 设置中断向量表设置中断向量表向量地址向量地址异常中断类型异常中断类型转移指令转移指令0 x0000001CFIQLDR PC,=FIQHandler0 x00000018IRQLDR PC,=IRQHandler0 x00000014ReservedNOP0 x00000010Data AbortLDR PC,=DabortHandler0 x0000000CPrefech AbortLDR PC,=PabortHandl

29、er0 x00000008SWILDR PC,=SWIHandler0 x00000004Undefined InstructionLDR PC,=UndefHandler0 x00000000ResetB ResetHandleru知识点讲解知识点讲解u中断向量表结构特点中断向量表结构特点n中断向量表中每种异常只分配中断向量表中每种异常只分配4 4个字节,所以不能放下个字节,所以不能放下整个异常中断处理程序,只能放一条跳转指令,用以跳整个异常中断处理程序,只能放一条跳转指令,用以跳转到相应的异常中断处理程序。转到相应的异常中断处理程序。u设置中断向量表示意代码分析设置中断向量表示意代码分析返

30、返 回回 3下一页下一页上一页上一页-29-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u禁用看门狗定时器和屏蔽所有中断禁用看门狗定时器和屏蔽所有中断n为了避免初始化过程被打断,需要禁用看门狗定时器和为了避免初始化过程被打断,需要禁用看门狗定时器和屏蔽所有中断。屏蔽所有中断。u禁用看门狗定时器和屏蔽所有中断示意代码分析禁用看门狗定时器和屏蔽所有中断示意代码分析3.3.2 3.3.2 最小硬件初始化最小硬件初始化 WTCON EQU 0 x01d30000 ;看门狗定时器控制寄存器LDR r0,=WTCON LDR r1,=0 x00000000 ;禁用看门狗定时器ST

31、R r1,r0INTMSK EQU 0 x01e0000c ;中断屏蔽寄存器 LDR r0,=INTMSKLDR r1,=0 x07ffffff ;屏蔽所用外部中断STR r1,r0返返 回回 3下一页下一页上一页上一页-30-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解uS3C44B0XS3C44B0X时钟发生器组成时钟发生器组成n主时钟源有两个:一个是主时钟源有两个:一个是XTAL0XTAL0和和EXTAL0EXTAL0连接的外部晶连接的外部晶振,另一个是振,另一个是EXTCLKEXTCLK连接的外部时钟;连接的外部时钟;nPLLPLL的功能是以低频振荡器的输出作

32、为输入,产生的功能是以低频振荡器的输出作为输入,产生S3C44B0XS3C44B0X需要的高频信号;需要的高频信号;n还有一个时钟控制逻辑部件来可产生稳定的时钟频率。还有一个时钟控制逻辑部件来可产生稳定的时钟频率。u时钟源的选择时钟源的选择nOM3:2=00OM3:2=00时钟源为晶振;时钟源为晶振;nOM3:2=01OM3:2=01时钟源为外部时钟。时钟源为外部时钟。3.3.2 3.3.2 最小硬件初始化最小硬件初始化 返返 回回 3下一页下一页上一页上一页-31-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u时钟发生器原理框图时钟发生器原理框图M注意事项注意事项u

33、本移植时钟源的选择本移植时钟源的选择n采用晶振,其中晶振频率为采用晶振,其中晶振频率为6MHz,6MHz,即即Fin=6MHzFin=6MHz。3.3.2 3.3.2 最小硬件初始化最小硬件初始化 返返 回回 3下一页下一页上一页上一页-32-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解uPLLPLL分频器分频器 nPLLPLL输出时钟频率输出时钟频率FplloFpllo和输入的时钟频率和输入的时钟频率FinFin的关系:的关系: Fpllo = (mFpllo = (m* *Fin)/(pFin)/(p* *2s)2s)其中,其中, m = MDIV (m = MD

34、IV (分频器分频器M M的分频值的分频值)+8)+8, p = PDIV (p = PDIV (分频器分频器P P的分频值的分频值)+2)+2, s = SDIV (s = SDIV (分频器分频器S S的分频值的分频值) )。uPLLPLL值的选择向导值的选择向导 nFplloFpllo必须大于必须大于20Mhz20Mhz,小于,小于66MHz66MHz; nFplloFpllo* *2s2s必须小于必须小于170MHz170MHz。3.3.2 3.3.2 最小硬件初始化最小硬件初始化 返返 回回 3下一页下一页上一页上一页-33-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲

35、解知识点讲解uPLLPLL锁相环原理框图锁相环原理框图3.3.2 3.3.2 最小硬件初始化最小硬件初始化 返返 回回 3下一页下一页上一页上一页-34-3.3 3.3 编写最小启动代码编写最小启动代码u主时钟频率及各功能模块时钟频率设定示意代码分析主时钟频率及各功能模块时钟频率设定示意代码分析3.3.2 3.3.2 最小硬件初始化最小硬件初始化 PLLCON EQU 0 x01d80000;PLL控制寄存器 CLKCON EQU 0 x01d80004;时钟控制寄存器 LOCKTIME EQU 0 x01d8000c;锁时计数寄存器M_DIV EQU 0 x48P_DIV EQU 0 x02

36、S_DIV EQU 0 x01 ;Fin=6MHz,Fout=60MHLDR r0,=LOCKTIMELDR r1,=0 x00000fff ;Tlock=(1/Fin)*LTIMECNTSTR r1,r0 LDR r0,=PLLCON LDR r1,=(M_DIV12)+(P_DIV4)+S_DIV) STR r1,r0LDR r0,=CLKCONLDR r1,=0 x00007ff8 ;All unit block CLK enableSTR r1,r0返返 回回 3下一页下一页上一页上一页-35-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u存储器初始化存储器初

37、始化n是指对是指对FlashFlash、RAMRAM存等储器的地址范围、数据总线宽度存等储器的地址范围、数据总线宽度以及以及DRAMDRAM的刷新频率等进行设置。设置对象是存储器控的刷新频率等进行设置。设置对象是存储器控制寄存器,芯片不同设置不同,具体需要参考芯片手册制寄存器,芯片不同设置不同,具体需要参考芯片手册【S3C44b0XS3C44b0X数据手册数据手册.pdf.pdf】。 u存储器控制寄存器存储器控制寄存器nS3C44B0XS3C44B0X的存储器控制寄存器是以的存储器控制寄存器是以0 x01C800000 x01C80000为起始地为起始地址的址的1313个连续的个连续的3232

38、位寄存器。可以一次将预先配置好的位寄存器。可以一次将预先配置好的初始化数据存入与存储器控制器相关的初始化数据存入与存储器控制器相关的1313个寄存器。个寄存器。M注意事项注意事项uS3C44B0XS3C44B0X不支持存储器不支持存储器地址重映射地址重映射(Memory RemapMemory Remap)。)。3.3.2 3.3.2 最小硬件初始化最小硬件初始化 返返 回回 3下一页下一页上一页上一页-36-3.3 3.3 编写最小启动代码编写最小启动代码u存储器初始化示意代码分析存储器初始化示意代码分析3.3.2 3.3.2 最小硬件初始化最小硬件初始化 LDR r0,=SMRDATALD

39、MIA r0,r1-r13LDR r0,=0 x01c80000 ;BWSCON AddressSTMIA r0,r1-r13SMRDATA DATA DCD cBWSCON DCD cBANKCON0 ;GCS0 DCD cBANKCON1 ;GCS1 DCD cBANKCON2 ;GCS2 DCD cBANKCON3 ;GCS3 DCD cBANKCON4 ;GCS4 DCD cBANKCON5 ;GCS5 DCD cBANKCON6 ;GCS6 DCD cBANKCON7 ;GCS7 DCD cREFRESH ;REFRESH DCD cBANKSIZE ;BANKSIZE DCD cM

40、RSRB6 ;MRSR6 DCD cMRSRB7 ;MRSR7返返 回回 3下一页下一页上一页上一页-37-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u工作模式与栈空间工作模式与栈空间n基于基于ARM7TDMI CoreARM7TDMI Core的微处理器有用户、系统、的微处理器有用户、系统、FIQFIQ、IRQIRQ、管理、中止和未定义共、管理、中止和未定义共7 7种模式,程序根据不同需种模式,程序根据不同需求可能需要切换到不同的工作模式下运行。因为每种模求可能需要切换到不同的工作模式下运行。因为每种模式下都有各自的堆栈指针(式下都有各自的堆栈指针(SPSP),所

41、以需要为每种模式),所以需要为每种模式分配栈空间。分配栈空间。3.3.2 3.3.2 最小硬件初始化最小硬件初始化 返返 回回 3下一页下一页上一页上一页-38-3.3 3.3 编写最小启动代码编写最小启动代码3.3.2 3.3.2 最小硬件初始化最小硬件初始化 寄存器类别寄存器类别寄存器在汇编中的寄存器在汇编中的名称名称各模式下实际访问的寄存器各模式下实际访问的寄存器用户用户系统系统管理管理中止中止未定义未定义中断中断快中断快中断通用寄存器通用寄存器程序计数器程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)

42、R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器状态寄存器CPSRCPSRSPSR无无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqSPSR_fiqSPSR_fiqSPSR_irqSPSR_irqSPSR_undSPSR_u

43、ndSPSR_abtSPSR_abtSPSR_svcSPSR_svcCPSRCPSRR15R15R14_fiqR14_fiqR14_irqR14_irqR14_undR14_undR14_abtR14_abtR14_svcR14_svcR14R14R13_fiqR13_fiqR13_irqR13_irqR13_undR13_undR13_abtR13_abtR13_svcR13_svcR13R13R12_fiqR12_fiqR12R12R11_fiqR11_fiqR11R11R10_fiqR10_fiqR10R10R9_fiqR9_fiqR9R9R8_fiqR8_fiqR8R8R7R7R6R6

44、R5R5R4R4R3R3R2R2R1R1R0R0返返 回回 3下一页下一页上一页上一页-39-3.3 3.3 编写最小启动代码编写最小启动代码3.3.2 3.3.2 最小硬件初始化最小硬件初始化 向量地址向量地址异常中断类型异常中断类型 进入的工作模式进入的工作模式0 x0000001CFIQ快速中断模式(FIR)0 x00000018IRQ普通中断模式(IRQ)0 x00000014Reserved保留0 x00000010Data Abort中止模式(Abort)0 x0000000CPrefech Abort中止模式(Abort)0 x00000008SWI管理模式(Supervisor

45、)0 x00000004Undefined Instruction未定义模式(Undefined)0 x00000000Reset管理模式(Supervisor)u知识点讲解知识点讲解u不同异常中断发生进入不同工作模式不同异常中断发生进入不同工作模式M注意事项注意事项u系统上电或复位后从地址系统上电或复位后从地址0 x000000000 x00000000开始取第一条复开始取第一条复位异常指令位异常指令B ResetHandlerB ResetHandler执行,并自动切换到管理执行,并自动切换到管理模式。模式。返返 回回 3下一页下一页上一页上一页-40-3.3 3.3 编写最小启动代码编写

46、最小启动代码u分配各种工作模式下的栈空间示意代码分析分配各种工作模式下的栈空间示意代码分析3.3.2 3.3.2 最小硬件初始化最小硬件初始化 LDR sp, =SVCStack BL InitStacks InitStacks MRS r0,cpsr BIC r0,r0,#MODEMASK ORR r1,r0,#UNDEFMODE|NOINT ;Undef Mode MSR cpsr_cxsf,r1 LDR sp,=UndefStack ;Abort Mode ;IRQ Mode ;FIQ Mode ;SVC Mode ;USR Mode is not initialized. 返返 回回

47、3下一页下一页上一页上一页-41-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u映像文件的组成映像文件的组成nARMARM链接器把编译(或汇编)生成的目标文件和所需要链接器把编译(或汇编)生成的目标文件和所需要的库文件链接在一起生成可执行的的库文件链接在一起生成可执行的ELFELF(Executable Executable Linkable FormatLinkable Format)格式的)格式的映像文件映像文件;nARMARM编译器生成的文件为目标文件,其只对单个文件工编译器生成的文件为目标文件,其只对单个文件工作,每次只能编译一个源文件,输出一个目标文件;作,

48、每次只能编译一个源文件,输出一个目标文件;n链接器每次可以链接多个目标文件,把这些文件链接成链接器每次可以链接多个目标文件,把这些文件链接成一个可执行的映像文件;一个可执行的映像文件;n文件是编译器操作的基本单位,而段则是链接器操作的文件是编译器操作的基本单位,而段则是链接器操作的基本单位,链接器不关心有多少个输入文件,只关心有基本单位,链接器不关心有多少个输入文件,只关心有多少个和何种属性的输入段。多少个和何种属性的输入段。3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化返返 回回 3下一页下一页上一页上一页-42-3.3 3.3 编写最小启动代码编写最小启动代码u知识点

49、讲解知识点讲解u输入段来源输入段来源n一种是来自源文件中的段;一种是来自源文件中的段;n一种是来自系统库文件中的段。一种是来自系统库文件中的段。u输入段输入段3 3种属性种属性n只读(只读(RORO)段;)段;n可读写(可读写(RWRW)段;)段;n初始化为初始化为0 0(ZIZI)段。)段。3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化返返 回回 3下一页下一页上一页上一页-43-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u输出段输出段n链接器输出的可执行的映像文件也包含一个或多个段,链接器输出的可执行的映像文件也包含一个或多个段,称为输出段

50、;称为输出段;n输出段也有输出段也有3 3种属性:只读段、可读写段和初始化为种属性:只读段、可读写段和初始化为0 0段。段。u输出段的组织输出段的组织n程序代码和常量存放在程序代码和常量存放在RORO段;段;n可读写的全局变量和静态变量存放在可读写的全局变量和静态变量存放在RWRW段;段;nRWRW段中要被初始化为零的变量被称为段中要被初始化为零的变量被称为ZIZI段;段;n链接器把属性相同的输入段按照顺序组织,形成输出段链接器把属性相同的输入段按照顺序组织,形成输出段。3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化返返 回回 3下一页下一页上一页上一页-44-3.3 3

51、.3 编写最小启动代码编写最小启动代码u举例说明举例说明3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化输入段输入段文件文件1 RO RW ZI 1 RO RW ZI 文件文件2 RO ZI2 RO ZI文件文件3 RO RW ZI3 RO RW ZI链链接接器器输出段输出段RO RO RO RORO RO RO RO输出段输出段RW RW RWRW RW RW输出段输出段ZI ZI ZI ZIZI ZI ZI ZI输出段输出段返返 回回 3下一页下一页上一页上一页-45-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u加载地址和执行地址加载地址和执

52、行地址n映像文件可以有两种地址:加载地址和执行地址;映像文件可以有两种地址:加载地址和执行地址;n加载地址加载地址:就是文件在存储器中的存储地址;:就是文件在存储器中的存储地址;n执行地址执行地址:就是文件在运行时的地址。:就是文件在运行时的地址。u举例说明举例说明u简单的系统与复杂的系统简单的系统与复杂的系统n简单的系统中,加载地址和执行地址通常是同一地址;简单的系统中,加载地址和执行地址通常是同一地址;n复杂的系统中,常常需要把程序的一部分或全部从加载复杂的系统中,常常需要把程序的一部分或全部从加载地址转移到执行地址。地址转移到执行地址。3.3.3 RTOS3.3.3 RTOS运行环境初始

53、化运行环境初始化返返 回回 3下一页下一页上一页上一页-46-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u存储器选型存储器选型n在嵌入式系统中,在嵌入式系统中,Nor FlashNor Flash是常见的一种存储芯片,是常见的一种存储芯片,其特点是系统掉电数据不会丢失,因此很适合作为其特点是系统掉电数据不会丢失,因此很适合作为BootLoaderBootLoader的存储介质;的存储介质; nNor FlashNor Flash的读取和的读取和RAMRAM类似,支持类似,支持Execute On ChipExecute On Chip,即程序可以直接在即程序可以直接

54、在FLASHFLASH片内执行片内执行, ,但不可以直接进行写但不可以直接进行写操作;操作;n根据根据Nor FlashNor Flash的特点,我们经过连接器链接生成的映的特点,我们经过连接器链接生成的映像文件的加载地址一般在像文件的加载地址一般在Nor FlashNor Flash中。中。M注意事项注意事项u只读(只读(RORO)段的存储地址就是其执行地址,而可读写)段的存储地址就是其执行地址,而可读写(RWRW)段和初始化为)段和初始化为0 0(ZIZI)段必须被复制到)段必须被复制到RAMRAM存储存储器进行,即后两者的存储地址和执行地址不同。器进行,即后两者的存储地址和执行地址不同。

55、3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化返返 回回 3下一页下一页上一页上一页-47-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解uADS1.2ADS1.2链接器的链接类型链接器的链接类型nPartiaPartia方式方式:表示链接器只进行部分链接,经过部分链:表示链接器只进行部分链接,经过部分链接生成的目标文件,可为以后进一步链接的输入文件;接生成的目标文件,可为以后进一步链接的输入文件;nSimpleSimple方式方式:默认链接方式,它使用链接器选项中指定:默认链接方式,它使用链接器选项中指定的地址映射方式,生成简单的的地址映射方式,

56、生成简单的ELFELF格式的映像文件;格式的映像文件;nScatteredScattered方式方式:使得链接器要根据:使得链接器要根据scatterscatter描述文件中描述文件中指定的地址映射,生成复杂的指定的地址映射,生成复杂的ELFELF格式的映像文件。格式的映像文件。M注意事项注意事项u本移植采用默认的【本移植采用默认的【SimpleSimple】链接方式】链接方式nRO BaseRO Base:这个文本框设置包含有:这个文本框设置包含有RORO段的加载地址,同段的加载地址,同时又是时又是RORO段的运行地址;段的运行地址;nRW BaseRW Base:这个文本框设置包含:这个文

57、本框设置包含RWRW和和ZIZI段的执行地址。段的执行地址。3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化返返 回回 3下一页下一页上一页上一页-48-3.3 3.3 编写最小启动代码编写最小启动代码u知识点讲解知识点讲解u链接器产生的地址映射过程链接器产生的地址映射过程n在默认情况下,链接器生成的映像文件包括在默认情况下,链接器生成的映像文件包括RORO、RWRW和和ZIZI三种属性的输出段,并按照下列顺序组织输入段。三种属性的输出段,并按照下列顺序组织输入段。3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化 零初始化的数据段零初始化的数据段 非零初

58、始化的数据段非零初始化的数据段 可读写代码段可读写代码段 只读数据段只读数据段只读代码段只读代码段高地址高地址低地址低地址输出映像文件的组成输出映像文件的组成uImageImage文件只包含了文件只包含了RORO段、段、RWRW段和段和ZIZI段的大小;段的大小;u这是因为这是因为ZIZI段中的数据都是段中的数据都是0 0,没必要包含;,没必要包含;u只要程序运行之前将只要程序运行之前将ZIZI数据数据所在的区域一律清零即可所在的区域一律清零即可。 说明说明返返 回回 3下一页下一页上一页上一页-49-3.3 3.3 编写最小启动代码编写最小启动代码u举例说明举例说明u已知已知RO BaseR

59、O Base为为0 x000000 x00000,RW BaseRW Base为为0 x080000 x08000,在加载,在加载地址为地址为0 x060000 x06000位置存储了位置存储了RWRW属性的存储段,试描述加属性的存储段,试描述加载域与执行域。载域与执行域。3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化返返 回回 3下一页下一页上一页上一页-50-3.3 3.3 编写最小启动代码编写最小启动代码u举例说明举例说明u已知已知RO BaseRO Base为为0 x000000 x00000,RW BaseRW Base为为0 x080000 x08000,在加

60、载,在加载地址为地址为0 x060000 x06000位置存储了位置存储了RWRW属性的存储段,试描述加属性的存储段,试描述加载域与执行域。载域与执行域。3.3.3 RTOS3.3.3 RTOS运行环境初始化运行环境初始化0 x08000RW SectionRO SectionRW SectionRO SectionZI Section0 x000000 x060000 x0A000Load ViewExcution View返返 回回 3下一页下一页上一页上一页-51-3.3 3.3 编写最小启动代码编写最小启动代码uRTOSRTOS运行环境初始化示意代码分析运行环境初始化示意代码分析3.3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论