专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

RealView MDK调试ARM(S3C2440)

作者:佚名   来源:本站原创   点击数:  更新时间:2010年06月03日   【字体:

   始学习ARM,先准备学习ARM来当单片机用。同事拿了块勤研的TQ2440的开发板给我玩,刚开始碰到不少难题。单单想让ARM在RAM里运行,就花了好多天。

  上关于2440的教程很多,可很多都是相对于ADS集成开发环境的。听说ARM公司自从收购了Keil公司,就不再更新ADS了,而是服务Keil了。所以我准备选用keil for ARM。现在网上有关Keil for ARM 的教程太少,我也一直徘徊在门外,今天终于有点喜色了,呵呵,记下。

 

1.RealView MDK介绍
2.Jlink 介绍
3.创建RealView MDK 的led点灯工程
4.调试程序

1.关于RealView MDK
其实RealView MDK也是Keil公司的产品,它是在Keil被ARM公司收购后开发的关于arm的新的开发环境,个人感觉它比ads1.2要好使的多。RealView MDK有很多突出特点:

启动代码生成向导,自动引导
  启动代码和系统硬件结合紧密,必须用汇编语言编写,因而成为许多工程师难以跨越多门槛。RealView MDK的μVision3工具可以帮您自动生成完善的启动代码,并提供图形化的窗口,随您轻松修改。无论对于初学者还是有经验的开发工程师,都能大大节省时间,提高开发效率。

软件模拟器,完全脱离硬件的软件开发过程
  RealView MDK的设备模拟器可以仿真整个目标硬件,包括快速指令集仿真、外部信号和I/O仿真、中断过程仿真、片内所有外围设备仿真等。开发工程师在无硬件的情况下即可开始软件开发和调试,使软硬件开发同步进行,大大缩短开发周期。而一般的ARM开发工具仅提供指令集模拟器,只能支持ARM内核模拟调试。

性能分析器,看得更远、看得更细、看得更清
  RealView MDK的性能分析器好比哈雷望远镜,让您看得更远和更准,它辅助您查看代码覆盖情况,程序运行时间,函数调用次数等高端控制功能,指导您轻松的进行代码优化,成为嵌入式开发高手。通常这些功能只有价值数千美元的昂贵的Trace工具才能提供。

Cortex-M3支持
  RealView MDK支持的Cortex-M3核是ARM公司最新推出的针对微控制器应用的内核,它提供业界领先的高性能和低成本的解决方案,未来几年将成为MCU应用的热点和主流。目前国内只有ARM公司的MDK和RVDS开发工具可以支持Cortex-M3芯片的应用开发。

业界最优秀的ARM编译器——RealView 编译器,代码更小,性能更高
RealView MDK的RealView编译器与ADS 1.2比较:
代码密度:比ADS 1.2编译的代码尺寸小10%;
代码性能:比ADS 1.2编译的代码性能高20%。
可以到KEIL的官方下载RealView MDK 下载的版本是试用版的有32K的代码限制可以在网上找个注册机,好像3.x的注册机就行。

2.关于Jlink
Jlink是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWARM,ADS,KELL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便,简单易学,是学习开发ARM的最实用的开发工具。关于Jlink的特性可以参考SEGGER的官方介绍SEGGER

3.创建跑马灯工程

我的第一个程序就是点灯了,呵呵!
打开 Keil uVision4然后新建一个工程tq2440,然后选择CPU类型,这里选tq2440所使用的s3c2440a

确定后会提示是否添加s3c2440的启动代码到工程(这是RealView MDK 相对是ads1.2的一个特点它会自动生成相应CPU的启动代码,而且配置启动代码也很方便后面会讲到。)这里选是

这时候工程就建好了,启动代码也有了,下面就看一下这个启动代码

启动代码还不少啊,有1000多行,不要害怕其实代码并不多,你可以仔细看一下,有一多半都是注释,而且不用手动更改代码就能实现启动代码的配置,点上图中红色部分的Configuration Wizard就可以图形方式对启动代码进行配置

比如要配置看门狗定时器就可以选中Watchdog Time Setup,点开它左边的加号可以进行详细的设置,这里图省事把所有对钩都点上。好了启动代码也配置好了,下面添加led点灯程序,在工程的目录下新建一个main.c文件然后把它添加到工程的源文件中来然后把下面的代码添加到main.c文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//定义PORTB的控制寄存器地址
#define GPBCON (*(volatile unsigned *) 0x56000010)
#define GPBDAT (*(volatile unsigned *) 0x56000014)
#define GPBUP (*(volatile unsigned *) 0x56000018)
 
 
void delay()
{
	int i, j;
	for(i = 0; i < 10000; i ++)
		for(j = 0; j < 50; j ++);
}
int main()
{
 
	GPBCON = 0x155555;//配置protB的所有引脚为输出
 
	while(1)
	{
		//点亮第一个小灯
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x1C0;
		delay();
 
		//点亮第二个小灯
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x1A0;
		delay();
 
		//点亮第三个小灯	
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x160;
		delay();
 
		//点亮第四个小灯	
		GPBDAT |= 0x1E0;
		GPBDAT &= 0x0E0;
		delay();
	}
 
	return 0;
}

好了,代码都全了,下面配置编译和连接选项,选择工程属性

然后选Target选项按下图设置

在Output选项中选上Create HEX File就行了,其它的选项先不用管,然后按F7试着Build下,查看输出信息,已经成功了只有一个Warning不能管它。

从上图可以看到hex文件已经生成了,还说明了代码大小为920字节,只读数据为16字节,可读写数据为0,ZI数据为1256字节。
好,下面就把它烧到开发板中。还需要配置一下烧写选项还是选择工程属性然后选Utilities选项然后在烧写选项中选J-LINK/J-Trace,然后去掉Update Target before Debugging选项,最后点Settings添加烧写算法,这里没有针对norflash EN29LV160AB的算法,选一个相近是AM29F160DBFlash,但是这个算法只能烧写不能擦除(有兴趣的话可以自己写一个烧写算法)。
好了万事具备只欠JLINK了,不过在烧写之前请确认你已经安装了JLINK的驱动,JLINK的驱动可以到SEGGER官方下载Software and documentation pack V4.14b ,驱动安装好了以后接上开发板,然后在把开发板的启动方式改为从norflash启动,然后启动开发板,最后点Download,如果没有意外的话,你就可以看到led的开始闪了。

4.RAM调试跑马灯程序
光能下载可不行,最主要的是能调试.其实RealView MDK的高度功能要比ads1.2好用的多。打开工程属性先Debug选项然后选择Use J-LINK/J-Trace,然后点Settings,在其中选择JTAG Speed为Auto Selection,先择Reset Strategy为Hardware,halt with BP@0。最后选上Run to main(),这样在调试的时候会自动停到main函数入口。此外不需要一个调试初始化文件,这个文件不用写,可以在RealView MDK的例子中找到它,比如在我机子上是D:\Tool\Electronic\RealViewMdk\ARM\Boards\Samsung\S3C2440\RTX_Blinky下的Ext_ARM.ini,把它拷到工程目录下然后在Initialization File中选择它就OK了。

还有一个地方得改就是程序的内存地址,开始烧写flash的时候用的是起始地址为0大小2M的设置,而这个地址0对应的正好是norflash的地址。而现在调试的时候是直接把代码载入到内存(也就是sdram)中,在s3c2440上它对就的地址是0×30000000所以要把ROM的起始地址改为0×3000000,相应的RAM起始地址改为0×30200000,大小不变。

好了,调试选项都设置好了,开始调试,如果没有意外的话会出现下面所示

可以看到它的调试环境很友好,很像vs之类的,(熟悉51的同志们一定不陌生啦),左边是各个寄存器的值右上是汇编代码,下面是对应源码当前指针停在main中,可以单步调试,还可以下断点。还可以查看内存之类的信息等。
如果没有JLINK还可以用RealView MDK自带的仿真器方法是在Debug选项中选择Use Simulator选项就可以了。如果出现了*** error 65: access violation at 0×53000008 : no ‘write’ permission类似这样的的错误,可以试着去掉启动代码中的看门狗和时钟的设置。

关闭窗口

相关文章