微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > Keil ARM RVMDK软件仿真及SDRAM中调试S3C2410程序

Keil ARM RVMDK软件仿真及SDRAM中调试S3C2410程序

时间:10-02 整理:3721RD 点击:

弄了几天,终于吧ADS原来的一个LED小程序移植到KEIL ARM里面,并且搞掂可以在SDRAM中调试了。首先说说硬件平台,ARM是三星的S3C2410,SDRAM是HY57V561620BT*2,64M容量,标准的SDRAM片选接在nGSC6,故地址空间在0x30000000~0x33ffffff。软件平台是Keil ARM就是Realview MDK V3.40中国评估版,另外我也试过V3.20,但是不直接用wiggler JTAG来调试,所以就直接上3.40版本的RVMDK了,JTAG用H-JTAGV9.1,很快H-JTAG就可以支持NAND FLASH的烧写了,twentyone加油!下面详细介绍如何设置RVMDK。
       安装RVMDK后,我这里用了本来ADS工程带的start.s启动代码,下次再试试用keil向导带的S3C2410.s启动代码,把其它C程序文件添加到keil工程中,设置工程属性option for target,在target页中,Xtal设置的晶振频率只在软件仿真中有用,实际硬件调试,还是要设置MPLLCON寄存器实现,关键是设置Read/Only Memory Areas与Read/Write Memory Areas,如下图设置,这里是跟SDRAM的地址对应才行。如果是软件仿真,就在下面on-chip的IROM1与IRAM1前打钩,Startup钩上。




        另外是Linker页的设置,把Use Memory Layout form Target Dialog的小钩去掉,在R/O base与R/W base设置,另外我这里使用了分散加载文件Scatter,在Scatter file中添加,misc controls中要设置--entry入口地址0x30000000与SDRAM地址对应,输入
--info totals --entry 0x30000000 --scatter .\output\start.sct --info sizes
.\output\start.sct 注意替换自己编写的scatter文件的目录路径。如果是软件仿真,则
R/O base与R/W base设置为0x00000000 与0x00002000,misc control内容改为
--info totals --entry 0x00000000 --scatter .\output\start.sct --info sizes
加载的scatter文件内容也要做修改,下面有介绍。


        另外   重新编写.sct加载文件,不然会出现
   Error: L6218E: Undefined symbol Image$$RW$$Limit 这样的错误,说没定义RW段,
重新编写的.sct加载文件
LR_IROM1 0x30000000 0x00002000 {    ; load region size_region
RO +0   { ; load address = execution address
   *.o (RESET, +First) ;(RESET, +First)的含义是把RESET段的内容编译后放在0x00000000位置
   ;*(InRoot$$Sections)
   .ANY (+RO)
}
RW 0x30002000 0x00002000 { ; RW data
   .ANY (+RW +ZI)
}
ZI +0   { ; ZI data
   .ANY (+ZI)
}
}

    如果是软件仿真,则改为如下,在0x0地址开始调试
LR_IROM1 0x00000000 0x00002000 {    ; load region size_region
RO +0   { ; load address = execution address
   *.o (RESET, +First) ;(RESET, +First)的含义是把RESET段的内容编译后放在0x00000000位置
   ;*(InRoot$$Sections)
   .ANY (+RO)
}
RW 0x00002000 0x00002000 { ; RW data
   .ANY (+RW +ZI)
}
ZI +0   { ; ZI data
   .ANY (+ZI)
}
}

        还有Debug页的设置,选Use Simulator是软件仿真,右边选择RDI Interface Driver,用wiggler JTAG,再点Settings,选择H-JTAG.DLL的路径,这些设置不懂可以装了H-JTAG后看它的帮助文档有介绍。
Load Application at Startup前的小钩钩去掉,在Initialization File中,添加初始化脚步文件.ini,编辑内容如下,关键是定义上电后PC指针地址,我的RAM.ini文件如下,另外提醒RVMDK区分大小写,Main函数要注意大小写一致
FUNC void Setup (void) {
// <o> Program Entry Point
PC = 0x30000000;
}
LOAD output\start.axf INCREMENTAL      // Download

Setup();                             // Setup for Running

g, Main




       RVMDK中的新版本编译工具会重新生成满足堆栈8byte对齐要求的目标文件,避免由于堆栈不对齐引起的连接错误,因此在每个汇编文件的开头,添加“PRESERVE8”指令,如
PRESERVE8
AREA    RESET, CODE, READONLY   ;下面定义了一个只读的名字为SelfBoot的代码端

    如果是在SDRAM中调试,还要打开start.s的option选项,在Asm页Define输入RAM_MODE REMAP


        设置基本完成,编译Build工程,通过后,打开运行H-JTAG,点Debug就可以了,   看到开始Debug时候PC已经不是在0x00000000地址,而是到到0x30000280了,直接到了Mail函数了。 SDRAM调试成功,但是曾经出现程序跑飞的情况,有地方说是SDRAM初始化问题,以后再跟进,解决这个问题。 上面程序跑飞的问题,实际是由于本来我的板子NAND FLASH里面有程序,有VIVi跟wince,VIVI把wince的镜像释放到SDRAM中,使我的程序跑飞了,解决办法是把nand flash清空,或在VIVI释放镜像前进入DEBUG。




小编 你好,看到这个 如获至宝,我最近也在学2410上裸机开发,用KEIL,  能再提供一点具体的指导么,非常感谢呀
或者,小编讲解一下,我现在应该做的具体流程,也可以,谢谢
QQ: 963450691
email: qinglanyu_jun@foxmail.com

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top