ARM菜鸟快速上手
品慧电子讯世界的多元化,造就我们要知识广泛化,可能对于ARM有的人一无所知,还有的人一知半解,本文就一些知识,帮忙大家很快的入门.
我使用的是51eda 的44B0X 豪华板,用jtag 小板调试,编译环境是ADS1.2,调试环境是SDT2.51,程序烧写用FlashP,用其他烧写工具也可以。
1、 电源设定:拿到板,首先检查电源的配置,我使用USB 供电,所以在电源插口附近的跳线要设定成USB 供电,而不是外部供电。
2 、连接接口:关闭主机,连接串口,主机端是COM0 口,开发板这端是靠近LCD口的COM1 口(另一个是COM2 口);连接网口,因为网线可以带电插拔,所以现在不管;连接并口,将jtag小板接上,将一根20芯的排线插在jtag小板的SDT_JTAG 口上,(接在wiggler口上也行,跟开发工具的选择有关),另一段插在开发板的jtag 口上。USB 也可以插上,注意在开发板有点之前把开发板的开关扳到下面,使开发板出于关停的状态。至此,硬件连接结束,开主机时一定要保持开发板是关停状态。
3 、主机打开以后,运行ADS 编译开发环境:
File->New,显示对话框:
建立一个 ARM 可执行映像(ARM Executable Image)。
把左上角的下拉菜单改为 Debug 好了,软件开发前期用这个选项。
新建一个汇编源代码文件,并加入工程,比如命名为44binit.s
输入以下代码:
AREA Init, CODE, READONLY
ENTRY
LABEL
ldr r0, =0x0
ldr r1, =0x20
LABEL_01
add r0,r0,#1
cmp r0,r1
ldreq r0, =0x0
beq LABEL
bne LABEL_01
注意AREA 不要顶格写。这端代码十分简单,大家一看就明白。
保存文件
下面这步比较重要,是程序编译的设定。
点点击该工程上方的按钮,或者选择Edit->DebugSetting…,如图
有几个地方要修改,在这个界面下,在 Post-linker 栏里选择ARM fromELF,这是生成最后目标的可选项目之一,也是比较常用的。
在 Language Settings 里,要修改编译器的设定,对本项目,默认设定已经可以,不需要改动,在实际的工作中,安自己的需要更改之。
下面设定连接器 Linker,这是很重要的一步,由于ARM 开发模式和程序运行的存储器与DSP 不同,通常在Linker 环节的设定对ARM 开发来讲很重要。
在 ARM Linker 的Output 标签里,设定如上图,因为我们的程序是不包含SDRAM 初始化代码的,所以我的代码无法初始化SDRAM,这意味这向SDRAM 写入数据将是不可靠的,所以在SDRAM 初始化代码运行前,不要将代码装入SDRAM 中调试。这就要求我们的代码要运行在0x0 地址,所以我们将RO Base 栏填入0x0,RW Base 不填,表示RW 段紧跟着RO 段。
选择 Layout 标签,如图:
在Place at beginning of image 域里,两个栏分别填入,44binit.o 和Init,表示在初始地址放入44binit.o,这个目标文件就是源文件编译得来的,因为我们只有一个文件要编译,所以即使这里不如此设定,代码一样会定位到0x0 处,只是以后一个项目包含多个文件时,一定要用这种方法指定0x0 开始时的代码源于哪个文件的代码。以后如果用Scatter 文件规定存储器分布就不用这么设定了。
选中左边的 ARM fromELF 项,如图:
在这里选择 Output format,一般选Plain binary,这是比较常用的格式,output 文件后缀是bin。好了,确认设定无误后可以编译,在项目的文件夹里可以找到bin 后缀的文件,这就是我们要烧写的文件。
4、烧写flash,我用“Flash 烧写器2.1”烧写程序,它的可执行文件名是FlashP.exe。网上比较常见,烧写速度较快。运行以后如图:
在左边的三个框里选择 44b0x,SDT JTAG 和并口1。右边4 个按钮分别是:擦除芯片,保存存储内容,空白区检测和烧写。在烧写前将开发板上电,清楚并检测一下 flash 芯片,然后选择刚刚编译的bin 文件烧写。
5、 调试,现在我们仅能在flash 芯片里观察程序运行,因为我们的SDRAM 没有正确初始化。调试前要运行 JTAG2000 的后台程序,如果第一次调试,JTAG2000 要求安装GiveIO 软件,安装就是了。就像龚俊大哥写的入门教程里提到的那样,JTAG2000 将发往网口的调试命令和数据截住,改发给联接jtag 小板的并口,所以在SDT 的debugger 里设定时要设定成网口调试。
调试啦,先运行JTAG2000,显示一个DOS 运行框,不管它了,最小化就好。运行SDT的Debugger,他会问你是否是远程调试,如果不问就是因为原来的设定是ARMulator 软仿真调试。要在Options->Configure Debugger里改成远程调试,如图:
点击该对话框的 Configure 按钮,如图:
按照图中设定,注意把IP 换成你的IP,呵呵,我的是天津大学校园网的IP,你们要填写你的电脑的IP,要保持此处的内容和你的电脑的设定一致。OK,确定,保存你的配置。
这时 JTAG2000 的窗口里应该有输出,先不管,在SDT Debugger 里,选择File->Load Image…,到你的工程目录下选择那个和BIN 同一文件夹下的AXF 文件,这是用来调试的文件,打开,SDT Debugger 的客户区就会显示你的代码,和程序停止的位置,如图:
接下来就是考验你调试的功夫了,当然我的程序太短小,也没有使用价值(其实也有,就是演示的价值),也没有要调试的地方,我编写这个程序仅仅是让大家看看从买来板子到运行第一个哪怕是最弱智的程序的全过程。
好了,我们已经能跑程序了,虽然这个程序太弱智了。但是它毕竟运行了。好像有点慢,对了,他是在flash 里运行,当然要慢。以上面的方法调试程序,而且每发现一个bug 就要重新烧写flash,会伤到芯片。把程序放在SDRAM 里运行就好了。
把程序请进 SDRAM 里,有几个问题,就是SDRAM 要求初始化,未初始化的SDRAM芯片和没有焊在板子上一样。再有就是编译的时候,RO 的地址要设定在SDRAM 里。后者只是重新编译的问题,主要是前者,我在这里不讲,这主要是软件编制的问题,开发板附带的光盘的BIOS 代码示例中有关于SDRAM 初始化的代码,自己去看。