付雪飞,张滔,路婷婷
(株洲南车时代电气股份有限公司,株洲412003)
德州仪器推出具有无与伦比连接选项与定点和浮点功能的全新处理器OMAP-L138,同时这款产品也是业界功耗最低的浮点数字信号处理器,可充分满足高能效、连通性设计对高集成度外设、更低热量耗散以及更长电池使用寿命的需求。
该器件结合了一系列独特的应用优化特性和外设,能显著降低工业、通信、医疗诊断和音频等多种产品的总体系统成本。
此芯片,可通过动态电压与频率缩放及多种省电模式管理片上电源。若配合电源管理软件和配套模拟解决方案,开发人员无需成为节能技术专家即可优化系统,提高性能,降低功耗。
OMAPL138双CPU内核高性能处理器是由德州仪器公司生产的双CPU处理器,内部包含DSP和ARM两个CPU内核。本文介绍了一种基于Flash实现双核启动,并分别加载ARM和DSP程序的方法,介绍了OMAPL138双CPU核的自启动和开发方法,对于OMAPL138的应用有非常强的参考价值。
本文介绍ARM启动后,唤醒DSP自启动系统,这种自启动系统需编写bootloader程序、应用程序段,其中ARM包含bootloader、应用程序,DSP包含应用程序。
所有程序的代码放置在外部NOR Flash内,外部Flash与双核CPU通过EMIF总线连接。程序放置位置的中的地址映射如图1所示,其中,bootloader.bin通过双核CPU出厂自带的搬运程序到共享shareRAM中,shareRAM起始地址为0x80000000,出厂自带的搬运程序不能搬运超过16 KB的二进制文件;ARM应用程序arm.bin放在DDR2,起始地址为0xC0000000和DSP应用程序代码段放在L2,起始地址为0x11800000,最后,ARM中断向量表存放在ARM_LOCAL_RAM地址空间,位于0xFFFF0000处。
图1 内存映射图
首先是所有目标码(*.bin)写入外部NORFlash的程序实现。写入外部NORFlash程序是由用户独立编写,运行在ccs5.4中的一个额外的仿真程序,用于将应用程序写入到外部NORFlash中,当然写入地址除bootloader.bin必须在NOR Flash顶端外[1],其他*bin程序都可以由用户自由定义。
其次bootloader只完成一项工作,就是将ARM程序、DSP程序、中断向量表搬移到分别对应的空间中去。
之后ARM程序按顺序完成的以下事件:
①将ARM设置为super mode,且初始化对应的寄存器和堆栈;
②双核CPU内部寄存器的初始化;
③由ARM通过控制字Wake Up DSP;
④在ARM程序中调用跳转到相应需执行的程序地址。
最后DPS程序被唤醒,则执行应用程序。
Bootloader为自编写的一段代码,主要是用来搬运较大的文件,因为OMAP-L138芯片内部自带的load程序只能搬运不能超过16K大小的BIN文件,如果用户想使用大于这个文件大小的应用程序,则需要自己编写搬运程序,也就是此处介绍的bootloader程序[2]。
Bootloader编写原则上是简单,精炼,只需完成一个搬运功能即可,其他复杂功能都不必实现,像芯片初始化等可由后续应用程序去完成。
首先必须编写一个NorFlashWrite的程序,此程序应能初始化OMAP-L138芯片,并能独立运行,并能操作外部NorFlash。
将bootloader代码、ARM和DSP对应的*.bin二进制文件读取到电脑内存空间且检验文件正确,使用NorFlashWrite(用户自己编写的写入NOR Flash的小程序,根据用户硬件连接不同,写入地址和方式也相应会改变)将*.bin写入到NOR Flash对应地址内[3]。
Bootloader.bin根据手册要求需放置在NorFlash顶端位置处,具体的写入由NorFlashWrite程序完成。
2.3.1 Bootloader载入、执行
首先,OMAP-L138芯片被上电,芯片自动执行内部的loader程序,根据芯片外部跳线,芯片会自动选择外部程序载入方式,本文为NorFlash方式。芯片出厂自带的自启动程序会搬运NOR Flash顶端地址(0x60000000)的16KB大小的二进制代码到双核CPU的共享内存的顶端地址处(0x80000000),双核CPU搬运完成后,双核系统强制将程序运行PC指针指向0x80000004处运行此处地址的指令。
2.3.2 ARM应用程序执行
首先,ARM的初始化函数会更改寄存器CPSR的模式、中断控制位,使ARM核处于super mode下,如果ARM不处于super mode下,很多ARM硬件资源都不能使用,而且不处于super mode下很多寄存器也不能访问;之后,关闭所有中断允许寄存器,将super mode的堆栈初始化[4];在super mode堆栈的所有初始化结束后,双核内部的寄存器也需初始化,最后通过wake up命令来唤醒DSP即可,至此ARM基本工作已经完成。
2.3.3 DSP应用程序执行
DSP应用程序在ARM对其唤醒时已经开始执行了,ARM需将wake up DSP的地址写入到寄存器HOST1CFG中,此地址为DSP即将运行程序的顶端地址。
当DSP应用程序被执行时,OMAP-L138双核的启动已经完成,ARM和DSP核可以分别运行,它们之间可通过配置系统寄存器CHIPSIG中的SYSCFG_CHIPINTx向DSP发送系统中断实现双核通信,或通过ShareRAM等方式交换数据。
本文讲解了一种基于NorFlash自启动开发,实现OMAPL138中ARM和DSP的启动方案,方案简易,代码量少,易于实际应用,并详细分析了OMAPL138双核CPU系统的自启动方式和实现方案,对于OMAPL138双核CPU系统实际运用有很强的参考价值。