首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM7 TDMI的SoC语音处理系统的设计(2)

基于ARM7 TDMI的SoC语音处理系统的设计(2)

下面主要根据S3C4510B来阐述一下BSP开发步骤。
(1)拷贝BSP
将wrSBCarm7 BSP拷贝一份并命名为4510BSP,接下来的工作就是修改该目录下的文件,从而得到自己的BSP。
(2)修改MakeFile文件
修改4510BSP目录下的makefile文件,修改如下几行:
TARGET_DIR = 4510BSP # changed by caiyang
VENDOR = CAI # changed by caiyang
BOARD = MyarmBoard # changed by caiyang
ROM_TEXT_ADRS = 01000000 # ROM entry address
ROM_WARM_ADRS = 01000004 # ROM warm entry address
ROM_SIZE = 00080000 # number of bytes of ROM space
RAM_LOW_ADRS = 00006000 # RAM text/data address (bootrom)
RAM_HIGH_ADRS = 00486000 # RAM text/data address (bootrom)
MACH_EXTRA =
注解:ROM_TEXT_ADRS:BOOT ROM的入口地址。对大多数板来说,这就是ROM地址区的首地址,然而也有的硬件配置使用ROM起始的一部分地址区作为复位向量,因此需要根据此设置偏移量作为它的地址。这个偏移量因CPU结构而定。
ROM_WARM_ADRS:BOOT ROM热启动入口地址。它通常位于固定的ROM_TEXT_ADRS+4的地方。当需要热启动时,sysLib.c文件中sysToMonitor( )函数代码明确的跳转到ROM_Warm_ADRS地址处开始执行。
ROM_SIZE:ROM实际大小。
RAM_LOW_ADRS:装载Vxworks的地址。
RAM_HIGH_ADRS:将Boot Rom Image拷贝到RAM的目的地址。
注意:RAM_LOW_ADRS 和 RAM_HIGH_ADRS 都是绝对地址,通常位于DRAM起始地址的偏移量处,该偏移量取决于CPU结构,这需要参考VxWorks内存分布。对于arm的内存分布请看图3,从图3可以看出RAM_LOW_ADRS在DRAM+0x1000处。这些地址对于S3C4510B来说都应该是重映射后的地址。
(3)修改config.h文件
主要是修改ROM_BASE_ADRS、ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS和undef掉不需要的部分。注意这些应该和makefile文件中设置的一致。
(4)修改romInit.s文件
CPU一上电就开始执行romInit( )函数,因此在romInit.s代码段中它必须是第一个函数。对于热启动,处理器将会执行romInit( )加上4后的代码(具体参考sysLib.c中的sysToMonitor( )函数)。更多的硬件初始化在sysLib.c中sysHwInit( )函数中,romInit( )的工作就是做较少的初始化并把控制权交给romStart( )(在bootInit.c文件)。
在S3C4510B处理器中,romInit.s文件主要做了以下几个工作:
① 禁止CPU中断并切换到SVC32模式;
② 禁止中断控制器;
③ 初始化SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器,同时初始化了FLASH、SDRAM、DM9008等外围设备;
④ 将FLASH的内容拷贝到SDRAM中;
⑤ 改变FLASH和SDRAM的基地址,将SDRAM基地址改为0;
⑥ 初始化堆栈指针;
⑦ 跳转到C程序romStart( )函数中。
继承事业,薪火相传
返回列表