Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1951439
  • 博文数量: 261
  • 博客积分: 8073
  • 博客等级: 中将
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-10 15:23
文章分类

全部博文(261)

文章存档

2013年(1)

2012年(1)

2011年(50)

2010年(34)

2009年(4)

2008年(17)

2007年(55)

2006年(99)

分类:

2006-04-26 22:26:43






E398使用的CPU就是ARM芯片ARM7TDMI,编程不是很复杂.

一、        安装SDT2.51
点击SDT2.51安装程序中的setup.exe,出现如下安装界面:


: [1] image001.png (2006-3-29 22:31, 35.71 K)


一路点击next继续,一般默认设置就行了,不需作任何修改了,最后完成安装,我是安装在C:\ARM251下面;
二、        启动SDT2.51
安装完毕,点击程序组中的ARM Project Manager启动主程序:


: [3] image004.jpg (2006-3-29 22:38, 40.79 K)


之后出现主程序界面如下:


三、        利用模板创建自己的项目

很多初学者会遇到这样一个问题:自己写了程序,编译也通过了,结果怎么也生成不了二进制格式的目标代码(*.bin)。如何生成目标代码需要参考SDT2.51安装文件夹pdf中的userguide.pdf,在它的392页有详细说明,教你怎么Converting ARM linker ELF output to binary ROM formats。

为了减少大家的麻烦,我提供一个模板Project,你打开我这个Project,然后点击菜单File下的Save As Template:



: [5] image005.png (2006-3-29 22:40, 22.58 K)


       然后在弹出的窗口中随意选择一个目录下,新建一个自己的文件夹,随便取一个Project名称,确认即可在主程序上出现新Project界面。现在可以在刚才建立的文件夹下面编辑代码,包括汇编代码和C程序代码。注意汇编代码必不可少,它是用来进行系统初始化和C程序入口的,这些范例代码可以在三星网站去下载,网上也有很多相关资源,如果找不到也可以找我要。

四、        添加自己的源码

点击菜单Project下的Add File To Project……,在弹出的窗口中,浏览自己的Project文件夹下面的程序代码,将代码添加到创建的项目。这时依次点击rom、debug、Sources前面的十字架,就会看到自己刚才添加成功的代码,双击任何一个代码文件就可以打开它进行编辑:


: [7] image008.jpg (2006-3-29 22:46, 27.04 K)



五、        修改SDT2.51设置以生成Flash代码

过来刚才一关,还有一只拦路虎,很多朋友是在这里没设置对,导致屡屡失败,信心大失!SDT2.51代码生成是有一个代码定位的,以我设计的S3C44B0X板为例,启动Flash片选引脚是接在nGCS0的,它的地址空间是从0X00000000开始的。如果你要将代码烧写到这片Flash,那么必须正确设置SDT2.51,使它将目标代码定位在0X00000000,设置过程如下:

先单击一下主程序窗口ROM下的Debug,然后点击如下菜单中的set:


       弹出如下窗口:


: [8] image010.jpg (2006-3-29 22:46, 35.4 K)



点击Entry And Base,在Read-only下面的框里面输入0X00000000,确认即可:


六、        编译项目生成初始化目标代码(放在Flash中)

现在选择菜单build或者点击快捷图标就可以编译代码,点击Force build之后就生成了二进制目标代码(*.bin),这可以在项目文件夹下面找到。在主程序窗口下面的信息框可以看到编译的情况,包括警告和错误信息,最终代码生成的情况等等;


七、        ARM板硬件准备

下面以我自己的S3C44B0X板为例,说明初次写目标代码到Flash中的准备工作。首先当然是板子加电,电源指示灯亮了;内部一对一、一头公一头母的并口延长线分别连接PC机并行口和JTAG下载板,JTAG下载板通过扁平排线连接ARM板。

这里面要注意一个复位问题,S3C44B0X有两个复位引脚,其中nRESET是CPU复位引脚,nTRST是JTAG单元复位引脚,一般的S3C44B0X系统都有一个跳线,用短路块将两个复位端连在一起,这样一按复位按键,两个复位引脚都复位了。而JTAG下载板上面也有一个跳线,这个跳线是JTAG单元复位引脚。

在烧写Flash的时候,PC机会通过JTAG下载板上的那个跳线来复位ARM板的JTAG单元,所以应该用短路块将JTAG下载板上的跳线短路,而ARM板上的跳线(连接nRESET和nTRST)的则不应该短路;

如果你是自己设计ARM板,第一次烧写Flash,那么你可以检查一下系统:首先看看CPU的电压是否正常,主要芯片是否发烫?如果有怪味、冒烟可就要急刹车了!CPU的IO电压是3.3V,内核电压是2.5V。可以看看系统时钟输入的波形,32768晶体的一个引脚上应该能看到32768的正弦波。如果是刚焊新的Flash,那么一般Flash里面数据都是0Xff,用示波器可以看到数据线都是高电平,地址线上面有规则的方波信号。你一按复位按键,方波立马消失变成低电平。

八、        将初始化目标代码写入Flash

准备妥当,现在可以烧写代码了!网上有一个叫Fluted.exe的程序,使用它就可以完成Flash烧写。这里面针对不同的CPU还需要不同的Bsd文件,不同的Flash芯片需要对Fcd文件进行相应的修改。S3C44B0X的BSD文件S3C44B0X.bsd可以在三星公司网站找到,适用于SST39VF160的fcd文件在网上搜索得到。经过艰苦努力,我也搞定了AT49BV1614的Fcd文件。

特别说明:这个烧写Flash的程序只能在Windows98系统下才能运行!不支持Windows2000、WindowsNT和WindowsXP,所有你需要切换到Windows98下面才能进行这项工作!

对于我的板子,使用SST39VF160,需要的S3C44B0X.bsd、default.fcd和Fluted.exe,将自己的目标代码model.bin与上面的三个文件放在同一个目录下面,运行Fluted.exe就可以进行Flash烧写了。

由于Fluted.exe要输入相应的配置参数,所以我干脆做了一个批处理文件f.bat:

FluteD a -f model.bin -v -s 0

这样运行这个批处理文件就可以开始烧写了,烧写界面如下:


这个程序首先打开fcd文件和bin文件,然后检查设备ID,如果ID错误的话程序会停止运行。这意味着你的硬件系统有问题,或者JTAG接线有错误等等。然后开始擦除FLASH里面的数据,根据Flash的大小擦除时间有长有短;擦除完毕就开始对Flash编程,将目标代码写进去。编程完毕开始校验,如果出错会给出提示信息的,告诉你在哪个地址区域出错,写进去的数据是什么,读出来的数据又是什么,只有校验完全成功才是烧写OK!

有些朋友将目标代码定位在0X0C000000,结果烧写后校验也完全成功了,但复位之后板子却没有任何反应!这是因为写到SDRAM之后校验肯定也是对的,但复位之后程序是从0X00000000开始执行的,而不是从0X0C000000开始的,所有板子肯定没有反应了!

九、        复位运行初始化程序

现在按一下复位按键,就我上面的程序而言,可以看到LED灯在来回闪烁。在我这个程序中,是完成系统初始化,包括禁止看门狗、禁止所有中断、初始化存储器(包括SDRAM)、设定锁相环倍频、使能所有单元模块时钟、初始化堆栈、设置中断等等,这些都在汇编程序中完成。主程序完成 IO端口功能、方向设定,实现一个最简单的LED闪烁程序。

十、        修改SDT2.51设置以生成SDRAM代码

走到这一步,你已经成功了一大半!不过还要实现硬件Debug,才能说是完全掌握了ARM开发的基本软件操作。一般硬件Debug都要在SDRAM中运行,所以需要定位生成的目标代码在SDRAM地址空间。

就我的板子而言,SDRAM的片选引脚接在nSCS0上面,它的地址从0X0C000000开始,所有要把目标程序定位在这里。

如前面所说步骤,先单击一下主程序窗口ROM下的Debug,然后点击菜单中的set,在弹出的窗口中选择点击Entry And Base,在Read-only下面的框里面输入0X0c000000(程序空间),在Read-write下面的框里面输入0X0c5f0000(这是数据空间),确认即可:


十一、            编译项目生成调试目标代码(放在SDRAM中)

如前所述,点击菜单或者快捷图标即可,这里不再重复。

十二、            开启JTAG.exe后台运行

这里面需要说一下:SDT2.51支持软件仿真和硬件debug,默认是软件仿真,这个很简单,大家一看就会。关键的是硬件debug,它支持串口、并口和以太网仿真,串口和并口我不知道怎么玩。

我的板子是通过并口JTAG进行硬件调试的,但实际上却是通过以太网的。这里面有一个转换软件——JTAG.exe,它把发送到以太网的数据拦截下来,遵从JTAG协议,转换到并口上面,然后通过JTAG接口板,控制ARM板上面的CPU,进行硬件Debug。

JTAG.exe在王云飞的网页上面有下载,包括并口JTAG接口板的电路图,我就是照他的图纸做的板子。

需要说明一下:JTAG.exe只能在Win98下运行,Win2000下不行,所以如果你要进行硬件仿真的话,必须切换到Win98系统下面。这很不爽,哪位朋友找到能在Win2000下面跑的JTAG.exe的话,麻烦告诉我一声!当然如果只是进行程序编写、编译、软件仿真,SDT2.51在Win98、Win2000和WinXP都没有问题的!

双击JTAG.exe,它就在后台运行了。

十三、            Debug设置

使用这种方式仿真,还要进行一些设置才行。点击Debug菜单或者快捷图标,出现ARM Debugger程序窗口:


然后选择菜单Options下面的Config Debugger:


弹出如下窗口:


在Target Environment下面选择Remote_A,然后点击Configure:


       在Heartbeat前面打勾,在Ethernet后面输入你的计算机IP地址并确认。这里面肯定要你机子上面装有网卡,而且IP地址要指定了,如果是自动分配IP的话,就不太方便了,每次都要查找自己机子的IP。

十四、            装载目标代码到ARM板

如果是第一次设置Debugger,确认以后,系统就会自动装载代码到ARM板上,你也可以点击Reload图标重新转载代码。如果代码很大的话,时间会稍长一点,可能要几十秒,一般几秒就搞定,出现如下窗口:


出现了上面的这个画面才说明你装载成功了,如果出现与此完全不同的东西,或者莫名其妙的代码,你就要检查硬件了!

现在按F8就可以单步仿真了,你可以看到绿色的图标一步一步向下走。如果程序一单步就跑飞,可能就是硬件问题了,检查时钟电路,电源滤波是否良好?刚开始学习ARM时,建议时钟倍频不用太高,这样有时候可能会出问题,经验不足往往找不到问题所在,费时费力打击了自己。如果时钟输入是8MHz的话,二倍频将主频定在16MHz,这样调试起来可能麻烦少一点。

汇编程序走完,就要进入C代码了,下面是从汇编到C的入口:


       按F8就进入C代码仿真了,界面如下:


十五、            其他调试手段

其他运行到某条语句、设置断点、全速运行、观察变量、观察寄存器、观察存储器空间,这些东西大家一看就会,不需要我来教,就不再细述了,大家自己研究。

附带提一下,如果你单步仿真的话,是可以看到JTAG.exe程序窗口上面的数据通讯过程,每一步都有相应的输出信息,一个典型的信息窗口如下:



现在随着摩尔定律的延续,ARM的价格越来越低,很多低端ARM芯片价格与一些51单片机价格相差无几,而性能则要强很多!虽然ARM的最小系统价格比51单片机贵,但它集成度高。如果用51单片机扩展众多外设来实现同样的功能的话,系统会变得很庞大,总体成本反而比用ARM要高,而且开发手段、编写代码等远不如用ARM方便!ARM资源丰富,可以用操作系统加快开发进程,这也是它的一大优势。

所以我希望更多的朋友来学习ARM,共同学习,共同提高!欢迎你与我交流!

[ 本帖最后由 chen8366 于 2006-3-30 10:10 编辑 ]


: [6] image006.jpg (2006-3-29 22:40, 20.45 K)



: [2] image014.jpg (2006-3-29 22:50, 40.6 K)



: [3] image024.jpg (2006-3-29 22:50, 45.5 K)



: [3] image030.jpg (2006-3-29 22:52, 43.75 K)



: [4] image038.jpg (2006-3-29 22:52, 43.01 K)

 
阅读(1268) | 评论(0) | 转发(0) |
0

上一篇:E398 CPU ARM7 简介及编程

下一篇:ARM BOOT SRC

给主人留下些什么吧!~~