基于NORFlash的OMAPL138双核系统自举引导启动实现
OMAP-L138的新历程之boot引导(3)

OMAP-L138的新历程之boot引导(3)上一篇文章讲到了omap双核分开跑各自的应用程序,这儿再提醒大家一下:由于arm和dsp的指令集不一样,因此他们各自执行的二进制代码也不相同,大家在做开发的时候一定要把两个核的各自工程编译环境分开!只不过由于C语言不涉及指令集的问题,因此大家可能发现我使用的程序是一样的,但其编译环境是不一样的。
这样CCS就可以根据你选择的芯片的不同类型编译出不同内核可以执行的二进制代码已达到应用的目的。
今天我实现了arm的boot引导。
就是把arm可执行程序烧写到nandflash中,然后选择启动nandflash 启动模式。
由于l138中有ro m空间已经固化了boot的程序,也是我们在flash中开头设置可供boot程序使用的识别码就可以实现boot 程序的引导。
大家可以看看TI的boot说明书《Using the OMAP-L1x8 Bootlo ader》,这里应用的是“Applicatio n Image Script (AIS) Boot”。
但是HPI和no r flash boot不能应用这种模式。
这里的Magic Wo rd为0×41504954,如果flash的头一块为坏的flash,那么o map的root程序就会一块一块的向下查找,直到找到正确的魔幻数。
然后执行第二个三十二bit的代码,第二个一般是Functio n Execute Co mmand (0x5853590D)可以在boot之前实现对一些特殊资源的配置,例如:PLL0、PLL1和DDR控制器。
当然这个得在自己制作AIS选择一些配置寄存器来实现配置。
http://www-s.ti.co m/sc/techlit/sprab41.zip.这是TI提供给大家制作AIS boot的windo ws程序。
在制作AIS镜像之前应该查看一下自己芯片的rom ID号。
现在l138有三种版本:d800k002 、d800k004 和d800k006。
基于NOR Flash的OMAPL138双核系统自举引导启动实现

A d e s i g n f o r OMAP L 1 3 8 d u a l -c o r e s y s t e m b o o t b a s e d o n NOR F l a s h
De n g Gu o r o n g, Li u Ho uq i n
F l a s h 实 现 OMA P L 1 3 8双 核 系 统 二 次 引 导 自举 启 动 的 方 法 。 在 该 方 案 中 , 分 析 了 O MAP L 1 3 8双 核 系 统
基于A R M 系统 自举 引导 启 动 的 b o o t l o a d e r实现 流 程 , 解决 了 A R M 系统 初 始 化 问题 , 并基于 A R M 系统 完成 了 O MA P L 1 3 8系统硬 件 的初 始 化 和 应 用 程 序 的 复 制 。 最后 , 通过 A R M 系统 唤 醒 了 D S P 系统 , 并在 b o o t l o a d e r最 后 跳 转 到 AR M 应 用程 序 中执 行 , 最终 实现 了 O MA P L 1 3 8双 核 系统 的 运 行 。实 验 结 果 表 明 , 该 方案 能 够 实现 O M A P L 1 3 8双核 系统 的 引导启 动 , 较之 于传 统 A I S和 串口启 动 方式更 简单 , 更 易于 实现 。
( I n s t i t u t e o f I n f o r m a t i o n T e c h n o l o g y ,J i n a n U n i v e r s i t y , G u a n g z h o u 5 1 0 0 7 5, C h i n a )
关 键 词 :OMA P L 1 3 8; AR M; D S P; b o o t l o a d e r
双核处理器接口的研究和启动引导的实现的开题报告

双核处理器接口的研究和启动引导的实现的开题报告一、选题背景随着计算机处理速度的不断提升和应用需求的不断增加,多核处理器已被广泛应用于计算机领域。
但是,在双核处理器中实现并行处理需要考虑许多方面,如线程调度、共享资源、任务划分等问题,这给双核处理器的设计和应用带来了新的挑战。
此外,在计算机系统启动阶段,启动引导程序对系统的稳定性和性能有着重要的影响。
因此,对于双核处理器的接口研究和启动引导程序的实现都具有重要意义。
二、研究目的与意义本研究旨在探究双核处理器接口的设计原理和实现方法,以及启动引导程序的条件与要求,并实现一个基于双核处理器的启动引导程序,旨在实现对双核处理器的管理与调度,提高计算机系统的性能和稳定性。
三、研究内容1. 双核处理器接口设计与实现原理(1) 双核处理器处理器架构及其特点(2) 双核处理器的调度与管理(3) 双核处理器热插拔设计(4) 双核处理器的缓存一致性2. 启动引导程序条件与要求(1) 启动引导程序的特点(2) 启动引导程序的条件与要求(3) 启动引导程序和系统的关系3. 双核处理器启动引导程序的实现(1) 启动引导程序设计原理(2) 启动引导程序自动检测与配置(3) 双核处理器启动引导程序的调试和优化四、预期研究成果1. 完成对于双核处理器接口的研究,撰写论文,获得相关发表。
2. 完成对于双核处理器启动引导程序的设计与实现,验证其可行性,提高计算机系统的性能和稳定性。
五、研究计划与进度安排1. 第一周:完成双核处理器处理器架构及其特点的调研分析,并输出阶段性报告2. 第二周:完成双核处理器的调度与管理、热插拔设计和缓存一致性的研究,并输出阶段性报告。
3. 第三周:完成启动引导程序的特点、条件与要求的研究,并输出阶段性报告。
4. 第四周:完成启动引导程序的设计原理的研究,并输出阶段性报告。
5. 第五周:完成启动引导程序自动检测与配置的设计与实现,并进行阶段性测试。
6. 第六周:完成双核处理器启动引导程序的调试和优化,并进行全面测试,输出论文。
OMAPL138的启动顺序[未完待续]
![OMAPL138的启动顺序[未完待续]](https://img.taocdn.com/s3/m/bf9dec1dde80d4d8d15a4fe9.png)
OMAPL138的启动顺序[未完待续]BootloaderBootloader为存储在ROM中的启动代码(一些程序),由TI 在芯片出厂时以掩膜方式固化内容。
TI使用ROM空间的一部分,还有一部分剩余空间,用户可以委托TI写入(掩模)所需代码。
版本OMAPL138的Bootloader保存在ROM中,检查内存地址0xFFFD0000,在memory window中选择Character,在偏移地址0x08可以读到版本号:版本号为类似于d800k008。
启动模式启动模式分为两种- Master从各种内存启动- Slave从外部Master启动除了HPI (Host Port Interface)和2种NOR (Parallel Flash) boot 模式,其他模式均使用AIS(Application Image Script)格式。
管脚配置详见Using the OMAP-L132/L138 Bootloader Appendix A Boot Mode Selection Table启动顺序OMAP-L138 SOC 的启动详解OMAP-L138 的ROM内有DSP 与ARM两份启动代码,芯片上电解复位后,DSP Bootloader 先运行,通过PRU 加载ARM初始化代码,因为DSP 不能访问ARM的片上RAM 空间,所以这一步通过PRU 完成,然后DSP 通过PSC 使能ARM,运行ARM的Bootloader,ARM再将DSP 置于复位态,并关闭其时钟。
这个过程由芯片内部ROM 代码自动完成,所以从用户的角度,芯片就是从ARM 开始启动的。
ARM Bootloader 读取BOOTCFG 寄存器,获取用户设定的启动模式,然后从相应的外设搬移用户代码到相应的地址,跳转到用户代码的入口地址,完成SOC 的启动过程。
下面这段话未找到出处文档When the device is powered on, it starts execution from DSP ROM. ARM is in in the disable state at this moment.The DSP ROM code will Read certain registers to know that ARM is present. (Otherwise it will be a DSP-only boot) Program PDSP0 to prepare for ARM reset vector.Bring ARM out of reset and let ARM starts execution from its ROM. (Yes, that’s the main difference from OMAPL137 silicon 1.x. ARM has its own ROM and will master the boot process afterwards)DSP stills in the idle loop.ARM starts execution from its ROM. It will Put DSP into disable state (probably local reset).Initialize HW, i.e. PSC, PLL, external memory etc. Read bootcfg registers to decide what boot mode it will be and load and run ARM UBL from appropriate boot media, i.e. SPI flash, NAND, NOR etc.ARM UBL starts running. Its behavior is totally defined by the SW. For example, TI provided ARM UBL will load and run UBOOT which will further load and run Linux. The Linux application can load and run DSP.out via DSPLINK. This model is the same as DaVinci model.Industrial customers can choose to load and run a DSP AIS image in certain boot media. Meanwhile ARM UBL also starts booting UBOOT and Linux. In that way, DSP can start processing data before Linux finishing boot.主要内存地址的Memory MapARM可以访问全部地址空间,DSP不能访问ARM的内存空间。
基于NandFlash存储器的嵌入式系统启动引导程序设计

=> =" 1’2(3&’45 存储器及其驱动设计 本系统中采用的 1’2(3&’45 存储器是三星公司生产
图 5 存储器空间分配示意图 6,375 8%914: *;"0% "**,3’9%’. 9";
的 NB3!=@O-@6, 工作电压 ?> ? P, O 位数据总线, 提供 H. 8’O /Q% 的存储空间, 由 .@BH 个 #&$LI 组成。每个 #&$LI 包含 ?= 个页面, 每页有一个 0!= 字节的基本数据区和一个 !H 字节的备用数据区, 该备用数据区存放 R++ 校验数据, 坏块标记等辅助信息。第一个 #&$LI ( 地址为 @@5) 由厂家保证数据读写的准确性, !@@@ 次编
[ <, =] 可以参考 7 8 9--.、 :;:; 等程序来扩展设计 。
J-;/ 5#6/>(0$0.AJ-;/B J-;/ 5!=>46;.AJ-;/B ;6. 5!=>(0#/3#K0A7<+ 9"-FGL 7<+ M#K0L7= N9OPP01B ;6. 5!=>4$,#/,"-FGA7<+ 9"-FGB
依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使基于同一种 +,- 构 建,要想让运行在一块板子上的 /$$%&$’()* 程序也能运行在另一块板子上,通常也都需要修改 /$$%&$’()* 的
[ 0] 源程序以适应不同的外设芯片 。
现在, 嵌入式系统对存储器容量和价格上的要求越来越高, 1’2(3&’45 存储器相对于 1$*3&’45 具有更高
OMAPL138的双核通信设计

OMAPL138的双核通信设计林淦;刘建群;许东伟;李嘉健【期刊名称】《机床与液压》【年(卷),期】2014(42)22【摘要】以OMAPL138作为硬件平台,利用DSPLINK驱动模块设计了一种可在ARM和DSP之间进行双核通信的机制。
一方面,ARM端运行LINUX操作系统,进行人机交互方面的处理;另一方面,DSP端建立两级循环缓存区,存储从ARM 端传来的数据,以确保缓存区一直有数据可供DSP进行实时运算。
并且对于大数据量的传输,采用ARM直接读写DSP RAM的方式,从而提高了双核之间的通信速度。
测试结果表明:该双核通信设计传输数据速度快、运行稳定。
%Taking OMAPL138 as the hardware platform,using DSPLINK driver module,a mechanism that could be used to com-municate between ARM and DSP was designed. On one hand,in ARM side,LINUX operating system was runto deal with human-computer interaction. On the other hand,in DSP side,two levels cache was built to circularly store data coming from the ARM side and to ensure that the cache had data available for DSP to acquire and calculate. Moreover,for the large amount of transmission data, the mode that ARM directly read from and wrote to DSP RAM was selected,which would improve the communication speed between the two cores. The design has been proved to run stably and reliably.【总页数】5页(P146-149,193)【作者】林淦;刘建群;许东伟;李嘉健【作者单位】广东工业大学机电工程学院,广东广州510006;广东工业大学机电工程学院,广东广州510006;广东工业大学机电工程学院,广东广州510006;广东工业大学机电工程学院,广东广州510006【正文语种】中文【中图分类】TN92【相关文献】1.基于OMAPL138双核通信的测试与实现 [J], 俞静;袁三男2.基于NOR Flash的OMAPL138双核系统自举引导启动实现 [J], 邓国荣;刘厚钦3.基于共享内存的OMAPL138双核通信设计 [J], 杜江;张辛;胡昂4.一种基于OMAPL138的双核通信设计 [J], 王燕;张福洪5.基于OMAPL138的双核通信研究及应用 [J], 郭盟;尹志辉;钱世俊因版权原因,仅展示原文概要,查看原文内容请购买。
OMAP-L138_FlashAndBootUtils使用及编译指导
摘要本文介绍OMAP-L138_FlashAndBootUtils工具包基本框架和串口烧写工具sfh_OMAP-L138.exe工作原理,使用方法,以及针对客户的硬件如何修改代码,搭建编译环境并重新编译,并总结了使用该工具的常见问题。
关键字:OMAPL138, 串口烧写, UBL简介OMAP-L138支持多种启动模式,包括 SPI,NAND,NOR等。
TI为用户提供了两套 flash烧写工具:(1) 使用 TI 在 PSP 包或 OMAP-L138_FlashAndBootUtils 包中提供的 flash writer 的CCS工程,通过仿真器连接硬件板,按照提示步骤烧写 flash。
(2) 使用 OMAP-L138_FlashAndBootUtils工具包中的串口烧写工具(如sfh_OMAP-L138.exe),通过串口连接,进行命令行烧写。
本文接下来将针对第二种方式进行详细介绍。
用户可以从开源网站上下载最新的 OMAP-L138_FlashAndBootUtils版本[1]。
最新的版本为MAPL138_FlashAndBootUtils_2_40,本文以此版本展开讨论。
OMAP-L138_FlashAndBootUtils_2_40工具包支持 TI公司的多种芯片平台的 flash烧写,包括 OMAPL138,AM1808,C6748等。
工具包内的代码是对应 LogicPD的 OMAL138/AM1808 EVM 板的。
如果用于用户自己的硬件板,可能需要修改工具包中相应代码并重新编译。
该工具包中包括多种 flash工具及代码。
主要目录如表 1所示。
表 1 OMAP-L138_FlashAndBootUtils_2_40工具包目录结构1. 串口烧写工具 sfh_OMAP-L138.exe的工作原理sfh_OMAP-L138是 OMAP-L138_FlashAndBootUtils包中用于实现串口烧写 flash的应用程序。
OMAPL138双核系统的调试方案设计
OMAPL138双核系统的调试方案设计栾小飞【摘要】OMAPL138高性能、低功耗双核处理器为手持式移动设备提供强有力的支持。
对双核通信模块DSPLink的软件架构和在Linux嵌入式操作系统下的编译加载进行了分析和介绍,以消息队列组件为例分析了ARM和DSP双核通信时通道的建立和连接的方式。
通过DSP/BIOS和Linux端DSPLink的MSGQ接口和多线程技术,建立ARM和DSP消息传递通道,提供了在双核开发中对DSP端暗箱调试的解决方法。
%OMAPL138 high-performance low-power dual-core processor provides strong support for handheld mobile devices. The paper provides the analysis for the software architecture of dual-core module DSPLink and the introduction of the methods of compiling and loading the module DSPLink based on the embeded operating system Linux. The process of installation and connection when ARM and DSP communicate with each other by the example of MSGQ is analyzed. Through theDSP/BIOS and Linux side DSPLink of MSGQ in terrace and multi-threading technology, a messaging channel is built between ARM and DSP, providing the solution of DSP side of the black-box debugging in dual-core development.【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2012(012)001【总页数】4页(P16-19)【关键词】OMAPL138;双核处理器;DSPLink;消息队列;调试【作者】栾小飞【作者单位】电子科技大学自动化工程学院,成都611731【正文语种】中文【中图分类】TB511 双核调试困难双核芯片的推出为兼顾强大的数据处理能力和良好的用户体验提供了解决方案,将双CPU集成在一个芯片上也简化了硬件电路设计的难度。
基于TIDavinci架构的双核嵌入式应用处理器OMAPL138开发入门ourdev
基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门V1.0LastRittersuperyongzhe@2011年4月4日一、简介TI的达芬奇架构嵌入式应用处理器使用DSP与ARM结合的非对称多核结构,当然现在也有管脚全兼容的单核。
本文要介绍的就是其中的一款低功耗处理器OMAP L138。
OMAP L138包括一个主频300M的ARM9处理器内核和一个300M的C6748DSP内核(均是32位处理器)。
此外还有大量外设在此不做说明,与通用的ARM与DSP内核相比有如下一些不同点:1.内存映射,该处理器的外设与内存统一编址,DSP与ARM共享4G内存空间。
但其中有一部分DSP仅可见(如DSP的数据指令缓存),一部分ARM仅可见(如ARM的内部RAM),其余的两者都可以访问,具体的请参考其芯片资料。
2.中断,与通用的DSP与ARM相比,达芬奇架构并没有在这两个核中增加用于双核通信及相互控制的指令(也许是本人没发现吧!如果你发现相关的说明,请发个email告诉我,谢谢!),然而却增加两个核之间的中断,共计7个。
当双核需要进行通信时,首先把数据放在双方可以访问的内存上,然后给对方一个中断,对方在中断中接收传递过来的数据,以此实现双方的通信,个人认为这就是DSP Link实现的基本原理吧:)3.能源与休眠配置模块(PSC),这个模块主要负责整个系统的能源管理,可以使能或者休眠ARM核,DSP核以及大部分外设ARM核与DSP核的相互控制主要就依赖这个模块。
对于OMAPL138,上电时默认的是ARM核被禁止,DSP核被使能。
说以开机时是DSP 核先启动,然后是DSP的ROM Bootloader做一些初始化后使能ARM核后,ARM核才开始运行。
不同的达芬奇处理器是不同的,比如OMAPL137就是反过来的,网上资料鱼龙混杂,弄不清楚的话就去看PSC模块中的ARM和DSP核的默认值就可以了。
OMAPL138的启动顺序[未完待续]
OMAPL138的启动顺序[未完待续]BootloaderBootloader为存储在ROM中的启动代码(一些程序),由TI在芯片出厂时以掩膜方式固化内容。
TI使用ROM空间的一部分,还有一部分剩余空间,用户可以委托TI写入(掩模)所需代码。
版本OMAPL138的Bootloader保存在ROM中,检查内存地址0xFFFD0000,在memory window中选择Character,在偏移地址0x08可以读到版本号:版本号为类似于d800k008。
启动模式启动模式分为两种- Master从各种内存启动- Slave从外部Master启动除了HPI (Host Port Interface)和2种NOR (Parallel Flash) boot模式,其他模式均使用AIS(Application Image Script)格式。
管脚配置详见Using the OMAP-L132/L138 Bootloader Appendix A Boot Mode Selection Table启动顺序OMAP-L138 SOC 的启动详解OMAP-L138 的ROM内有DSP 与ARM两份启动代码,芯片上电解复位后,DSPBootloader 先运行,通过PRU 加载ARM初始化代码,因为DSP 不能访问ARM的片上RAM空间,所以这一步通过PRU 完成,然后DSP 通过PSC 使能ARM,运行ARM的Bootloader,ARM再将DSP 置于复位态,并关闭其时钟。
这个过程由芯片内部ROM 代码自动完成,所以从用户的角度,芯片就是从ARM 开始启动的。
ARM Bootloader 读取BOOTCFG 寄存器,获取用户设定的启动模式,然后从相应的外设搬移用户代码到相应的地址,跳转到用户代码的入口地址,完成SOC 的启动过程。
下面这段话未找到出处文档When the device is powered on, it starts execution from DSP ROM. ARM is inin the disable state at this moment.The DSP ROM code will Read certain registers to know that ARM is present.(Otherwise it will be a DSP-only boot)Program PDSP0 to prepare for ARM resetvector.Bring ARM out of reset and let ARM starts execution from its ROM. (Yes,that’s the main difference fromOMAPL137 silicon 1.x. ARM has its ownROM and will master the boot processafterwards)DSP stills in the idle loop.ARM starts execution from its ROM. It will Put DSP into disable state (probablylocal reset).Initialize HW, i.e. PSC, PLL, externalmemory etc. Read bootcfg registers todecide what boot mode it will be and loadand run ARM UBL from appropriate bootmedia, i.e. SPI flash, NAND, NOR etc.ARM UBL starts running. Its behavioris totally defined by the SW. For example,TI provided ARM UBL will load and runUBOOT which will further load and runLinux. The Linux application can load andrun DSP.out via DSPLINK. This model is thesame as DaVinci model.Industrial customers can choose toload and run a DSP AIS image in certainboot media. Meanwhile ARM UBL alsostarts booting UBOOT and Linux. In thatway, DSP can start processing data beforeLinux finishing boot.主要内存地址的Memory MapARM可以访问全部地址空间,DSP不能访问ARM的内存空间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OMAPL138双核处理器是由TI推出的双核处理器,内部包含ARM和DSP两个内核,已经广泛应用于对讲机等低功耗产品中。
目前,OMAPL138双核处理器的自启动通常采用AIS转换器和串口下载程序的方式实现,这种实现方式需要实现串口接收并烧写AIS转换器转换出来的应用程序二进制文件,整个实现比较复杂。
本文介绍了一种基于NOR Flash自举引导启动实现OMAPL138自启动的方案,实现简单,易于掌握。
详细分析了OMAPL138双核系统的启动流程和实现方法,对于OMAPL138系统应用具有很强的参考价值。
1OMAPL138双核系统NOR Flash自举启动原理OMAPL138内部包含ARM和DSP双核,要实现OMA-PL138双核系统的自举启动,就需要实现ARM和DSP 双核启动。
本设计采用ARM唤醒DSP的引导启动OMAPL138双核系统,这种方式需要实现ARM核bootloader引导程序和ARM、DSP应用程序段的烧写程序的编写。
OMAPL138程序代码段在NOR Flash中的地址映射如图1所示,其中,bootloader代码段存放在OMAPL138的共享内存空间,共享内存空间位于0x80000000起始地址处,而且bootloader程序代码段不能超过16KB,16KB 是NOR Flash引导启动方式自动拷贝程序代码段的最大范围;ARM应用程序代码段和DSP应用程序代码段首先都存放在OMAPL138的DDR RAM空间中,DDR的基于NOR Flash的OMAPL138双核系统自举引导启动实现邓国荣,刘厚钦(暨南大学信息技术研究所,广东广州510075)摘要:针对传统基于AIS和串口引导启动OMAPL138相对复杂的问题,提出了一种基于NOR Flash实现OMAPL138双核系统二次引导自举启动的方法。
在该方案中,分析了OMAPL138双核系统基于ARM系统自举引导启动的bootloader实现流程,解决了ARM系统初始化问题,并基于ARM系统完成了OMAPL138系统硬件的初始化和应用程序的复制。
最后,通过ARM系统唤醒了DSP系统,并在bootloader最后跳转到ARM应用程序中执行,最终实现了OMAPL138双核系统的运行。
实验结果表明,该方案能够实现OMAPL138双核系统的引导启动,较之于传统AIS和串口启动方式更简单,更易于实现。
关键词:OMAPL138;ARM;DSP;bootloader中图分类号:TP368文献标识码:A文章编号:0258-7998(2014)02-0019-04A design for OMAPL138dual-core system boot based on NOR FlashDeng Guorong,Liu Houqin(Institute of Information Technology,Jinan University,Guangzhou510075,China)Abstract:For the problem of the complexity of OMAPL138boot based on AIS and serial,a new mothed based on NOR Flash to achieve OMAPL138dual-core system boot is introduced.In this scenario,the process of bootloader of OMAPL138dual-core sys-tem is analyzed.Firstly,the ARM system initialization problems is solved.Then OMAPL138system hardware initialization and copy of the ARM and DSP applications code are completed based on ARM system.Finally,DSP system is waked up by ARM system,and bootloader jumps to the ARM application at the last of bootloader,and OMAPL138dual-core system boot is implemented finally. Experimental results show that the program can achieve OMAPL138dual-core system boot,and it is more simple and easy to im-plement compared to traditional AIS and serial start-up mode.Key words:OMAPL138;ARM;DSP;bootloader图2bootloader 启动流程图开始更改CPSR 模式控制位,进入超级模式更改CPSR 模式控制位,关闭FIQ 和IRQ 中断初始化ARM9超级中断堆栈_OMAPL138_CPU_Init 从NOR Flash 中复制ARM9和DSP 应用程序到DDR 中,复制中断向量表到ARM_LOCAL_RAM 中Wakeup_DSP Call ARM9_CodeStartAddr 图1OMAPL138程序空间与NOR Flash 烧写地址映射起始地址为0xC0000000,ARM 应用程序和DSP 应用程序必须存放在DDR 中的不同地址空间;最后,ARM 中断向量表存放在ARM_LOCAL_RAM 地址空间,位于0xFFFF0000处。
基于ARM 初始化OMAPL138的bootloader 主要完成以下几项工作:(1)初始化ARM 超级模式下的堆栈;(2)OMAPL138的初始化;(3)从NOR Flash 中拷贝ARM 和DSP 的应用程序到对应的DDR 地址空间;(4)唤醒DSP ;(5)在main 函数中调用跳转到ARM 应用程序入口地址执行程序。
首先,bootloader 初始化ARM 超级模式下的堆栈,因为在超级模式下可以访问OMAPL138的所有寄存器,包括特权模式下才能访问的寄存器,使得ARM 系统具备初始化OMAPL138系统条件;其次,OMAPL138的初始化主要包含PSC 电源管理模块初始化、PLL 时钟管理模块初始化、DDR 的初始化和EMIFA 初始化等,这些主要是OMAPL138的gel 文件中的初始化工作;接下来就是初始化ARM 超级模式下的堆栈起始地址和大小,然后就是拷贝ARM 和DSP 的应用程序到对应的DDR 地址空间,这时DSP 已经具备了所有启动的环境,可以直接唤醒DSP ;最后,在main 函数中直接放一个跳转指令(*(void (*)(void))0xC0000000)(),实现由bootloader 到ARM 应用程序的切换。
至此,ARM 和DSP 应用程序都实现启动运行了。
最后就是所有程序烧写的实现。
程序烧写是独立于bootloader 、ARM 和DSP 应用程序的一个应用程序,主要功能是将bootloader 程序、ARM 应用程序和DSP 应用程序烧写到NOR Flash 对应的地址空间中去。
烧写程序代码主要是NOR Flash 读写程序,代码量不大,可以直接放在OMAPL138共享内存中,但是不能与bootloader 代码空间重叠。
2系统设计2.1bootloader 设计2.1.1bootloader 启动流程首先,bootloader 被烧写到NOR Flash 中起始地址位置处,OMAPL138内部固化的一段代码在上电之后运行,会自动将16KB 的NOR Flash 起始地址(0x60000000)处代码复制到OMAPL138的share RAM 共享内存起始地址处(0x80000000),其中,0x60000000~0x60000004这32bit 存放的是系统固化代码配置字,可以配置拷贝数据大小、boot 启动方式和访问数据宽度,这里boot 启动选择拷贝数据大小为16bit 宽、Legacy NOR boot 模式和16KB 数据复制宽度,在拷贝完数据之后,系统会自动跳转到0x80000004处执行。
在0x80000004地址处存放的是一个跳转指令BL_bootload_init ,使得系统固化的启动代码在跳转到0x80000004地址处开始执行的第一个指令就是跳转到bootloader 初始化地址处执行。
bootloader 启动流程如图2所示。
bootloader 起始地址存放的是_bootload_init 。
首先,该函数更改CPSR 的模式控制位和中断控制位,使ARM 处于超级模式下工作,这是因为超级模式可以直接访问ARM 的硬件资源,而且拥有与用户模式一样的寄存器,而用户模式不能直接访问特权模式下的寄存器;其次,关闭FIQ 和IRQ 中断使能,初始化超级模式的堆栈;在超级模式堆栈初始化完成之后,通过BL _OMAPL138_CPU_Init 指令跳转到OMAPL138的系统初始化函数中去处理,由于在超级模式下调用该函数,所以OMAPL138_CPU_Init()可以直接访问OMAPL138所有的系统配置寄存器SYS_CFG_Reg ,OMAPL138_CPU_Init ()需要完成PSC 电源管理模块初始化、PLL 时钟管理模块初始化、DDR 的初始化和EMIFA 初始化等,这些初始化工作是为ARM 和DSP 应用程序运行提供基本的最小化系统;在OMAPL138初始化完成之后,DDR 和EMIFA 都已初始化,可以将NORFlash 中的ARM 和DSP 应用程序拷贝到DDR 中,至此,DSP 应用程序已经存放在DDR 中,并且已经具备了DSP 运行的所有环境。
接下来即可唤醒DSP 。
唤醒时需要往系统寄存器HOST1CFG 中写入DSP 唤醒初始地址,即DSP 应用程序的起始地址。
DSP 唤醒就相当于对DSP 做了一次软复位,DSP 在唤醒之后直接跳到复位异常地址处运行,DSP 复位异常地址存放的是_c_int00函数,该函数是DSP 的系统库函数,由该函数初始化DSP 运行的C 语言环境,并跳转到DSP 主函数中运行。
至此bootloader 基本工作已经完成,可以直接通过调用函数(*(void (*)(void))0xC0000000)()跳转到ARM 应用程序对应的起始地址处开始运行ARM 应用程序[1-3]。
图3ARM 初始化流程开始初始化ARM9各个异常的堆栈LDR PC ,_c_intOO 执行ARM9应用程序2.1.2ARM 应用程序的初始化ARM 初始化流程如图3所示。