mini2440----keil for ARM下的调试与下载环境的搭建
扫描二维码
随时随地手机看文章
题外话:编译环境选择推荐
对于刚刚接触ARM裸机编程的各位,我要特别的进行提醒一下,就是关于编译环境的选择问题。目前主流的有ADS+AXD,KEIL FOR ARM,IAR FOR ARM三种,我开始使用的ADS+AXD进行学习,因为光盘里面自带,而且很多资料都是他的,但是个人感觉真心调试十分的不方便,而且各种容易死机,并且现在也已经不更新了,北航一本讲嵌入式的书出了一个第二版,就是把ADS换成了KEIL,而且以后KEIL会是主流,因此我推荐选择KEIL进行学习。IAR听我一个同学说也十分好用,但是在网上找有关方面的资料不是很多。而且我想北航一群教授编书都用KEIL进行,说明KEIL自有他的优势,书上这么说了,那以后会有更多学生用,这样慢慢也会更加流行与主流。闲话就说这些。
正题:Keil for ARM的环境搭建
提醒一下各位就是在keil for ARM进行环境搭建的时候,要注意调试时环境搭建与下载环境的搭建是不同的,因为在下载环境搭建的时候是把程序下载到nor flash里面直接进行运行,而调试环境是把程序下载到RAM里面进行执行。nor flash里面也可以进行调试环境的搭建,但是在nor flash里面只能建立两个端点,而且flash擦写次数有限对寿命有影响。所以不推荐。所以调试的时候推荐在RAM里面进行调试。
配置方法的测试环境:MDK 4.11 JLINK 4.08 开发板是mini2440 其他的环境配置类似,
首先介绍关于程序下载的方法
①建立一个project芯片选择S3C2440(在SAMSUNG里面)并且加入启动代码。
②编辑自己的测试程序。
测试程序如下
#include
voiddelay()
{
inti,j;
for(i=0;i<10000;i++)
{
for(j=0;j<50;j++);
}
}
intmain()
{
GPBCON=0x155555;
while(1)
{
GPBDAT|=0x1E0;
GPBDAT&=0x1C0;
delay();
GPBDAT|=0x1E0;
GPBDAT&=0x1A0;
delay();
GPBDAT|=0x1E0;
delay();
}
}
实现的两个LED循环间歇显示。
③开始进行工程的配置,配置分为以下几步(程序下载的配置)
第一步
也是非常要注意的一点就是:打开S3C3440.S这个文件夹,点击configuration wizard
进入这个界面,把所有选项都勾上。
。
第二步现在进入Target的配置
现在点击中的魔棒,出现配置环境。
第三部配置Target这个选项栏。配置如下
后面我会进行介绍为什么需要这样去配置它。编译器回根据这个环境生成一个.sct的文件与之对应,作为程序加载,执行的一些信息。
第四步:进入output这个选项中勾选Creat HEX file,如下图所示。
第五步:进入Utilities这个选择中,选择如下
因为在此我使用的是JLINK,再点击setting进行设置,设置情况如下图
对于flash算法的选择可以选择一个相近的,对于我的板子,nor flash是AM29LV160DB,因此我选择了这个类型的nor flash,做完以上配置后,点击OK,不断OK就可以配置成功了。就可以编译,没有任何错误再进行下载。就可以看到LED循环点亮了。
下面是关于程序调试的配置方式。我们调试是在RAM里面进行的。
第一步:同样需要对S3C2440.S进行configuration wizard进行勾选。如果开始已经做了,这步略过。
第二步:进入到配置界面的Target选项栏。进行如下配置。
第三步,进入到output选项栏勾选Creat HEX file,如果已经勾选可以略过。
第四步:进入Debug选项栏,进行如下的配置
Ext_RAM.ini(来自事例程序中)文件代码如下并且要进行修改
FUNCvoidSetupForStart(void){
//
ProgramEntryPoint PC=0x30000000;
}
FUNCvoidInit(void){
_WDWORD(0x4A000008,0xFFFFFFFF);//DisableAllInterrupts
_WDWORD(0x53000000,0x00000000);//DisableWatchdogTimer
//ClockSetup
//FCLK=300MHz,HCLK=100MHz,PCLK=50MHz
_WDWORD(0x4C000000,0x0FFF0FFF);//LOCKTIME
_WDWORD(0x4C000014,0x0000000F);//CLKDIVN
_WDWORD(0x4C000004,0x00043011);//MPLLCON
_WDWORD(0x4C000008,0x00038021);//UPLLCON
_WDWORD(0x4C00000C,0x001FFFF0);//CLKCON
//MemoryControllerSetupforSDRAM
_WDWORD(0x48000000,0x22000000);//BWSCON
_WDWORD(0x4800001C,0x00018005);//BANKCON6
_WDWORD(0x48000020,0x00018005);//BANKCON7
_WDWORD(0x48000024,0x008404F3);//REFRESH
_WDWORD(0x48000028,0x00000032);//BANKSIZE
_WDWORD(0x4800002C,0x00000020);//MRSRB6
_WDWORD(0x48000030,0x00000020);//MRSRB7
_WDWORD(0x56000000,0x000003FF);//GPACON:EnableAddresslinesforSDRAM
}
//Resetchipwithwatchdog,becausenRSTlineisroutedonhardwareinaway
//thatitcannotbepulledlowwithULINK
_WDWORD(0x40000000,0xEAFFFFFE);//LoadRAMaddr0withbranchtoitself
CPSR=0x000000D3;//Disableinterrupts
PC=0x40000000;//PositionPCtostartofRAM
_WDWORD(0x53000000,0x00000021);//EnableWatchdog
g,0//WaitforWatchdogtoresetchip
Init();//Initializememory
LOAD.led.axfINCREMENTAL//Downloadprogram
SetupForStart();//SetupforRunning
g, main // Goto Main