mini2440----keil for ARM下的調(diào)試與下載環(huán)境的搭建
題外話:編譯環(huán)境選擇推薦
對(duì)于剛剛接觸ARM裸機(jī)編程的各位,我要特別的進(jìn)行提醒一下,就是關(guān)于編譯環(huán)境的選擇問(wèn)題。目前主流的有ADS+AXD,KEIL FOR ARM,IAR FOR ARM三種,我開(kāi)始使用的ADS+AXD進(jìn)行學(xué)習(xí),因?yàn)楣獗P(pán)里面自帶,而且很多資料都是他的,但是個(gè)人感覺(jué)真心調(diào)試十分的不方便,而且各種容易死機(jī),并且現(xiàn)在也已經(jīng)不更新了,北航一本講嵌入式的書(shū)出了一個(gè)第二版,就是把ADS換成了KEIL,而且以后KEIL會(huì)是主流,因此我推薦選擇KEIL進(jìn)行學(xué)習(xí)。IAR聽(tīng)我一個(gè)同學(xué)說(shuō)也十分好用,但是在網(wǎng)上找有關(guān)方面的資料不是很多。而且我想北航一群教授編書(shū)都用KEIL進(jìn)行,說(shuō)明KEIL自有他的優(yōu)勢(shì),書(shū)上這么說(shuō)了,那以后會(huì)有更多學(xué)生用,這樣慢慢也會(huì)更加流行與主流。閑話就說(shuō)這些。
正題:Keil for ARM的環(huán)境搭建
提醒一下各位就是在keil for ARM進(jìn)行環(huán)境搭建的時(shí)候,要注意調(diào)試時(shí)環(huán)境搭建與下載環(huán)境的搭建是不同的,因?yàn)樵谙螺d環(huán)境搭建的時(shí)候是把程序下載到nor flash里面直接進(jìn)行運(yùn)行,而調(diào)試環(huán)境是把程序下載到RAM里面進(jìn)行執(zhí)行。nor flash里面也可以進(jìn)行調(diào)試環(huán)境的搭建,但是在nor flash里面只能建立兩個(gè)端點(diǎn),而且flash擦寫(xiě)次數(shù)有限對(duì)壽命有影響。所以不推薦。所以調(diào)試的時(shí)候推薦在RAM里面進(jìn)行調(diào)試。
配置方法的測(cè)試環(huán)境:MDK 4.11 JLINK 4.08 開(kāi)發(fā)板是mini2440 其他的環(huán)境配置類(lèi)似,
首先介紹關(guān)于程序下載的方法
①建立一個(gè)project芯片選擇S3C2440(在SAMSUNG里面)并且加入啟動(dòng)代碼。
②編輯自己的測(cè)試程序。
測(cè)試程序如下
#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();
}
}
實(shí)現(xiàn)的兩個(gè)LED循環(huán)間歇顯示。
③開(kāi)始進(jìn)行工程的配置,配置分為以下幾步(程序下載的配置)
第一步
也是非常要注意的一點(diǎn)就是:打開(kāi)S3C3440.S這個(gè)文件夾,點(diǎn)擊configuration wizard
進(jìn)入這個(gè)界面,把所有選項(xiàng)都勾上。
。
第二步現(xiàn)在進(jìn)入Target的配置
現(xiàn)在點(diǎn)擊中的魔棒,出現(xiàn)配置環(huán)境。
第三部配置Target這個(gè)選項(xiàng)欄。配置如下
后面我會(huì)進(jìn)行介紹為什么需要這樣去配置它。編譯器回根據(jù)這個(gè)環(huán)境生成一個(gè).sct的文件與之對(duì)應(yīng),作為程序加載,執(zhí)行的一些信息。
第四步:進(jìn)入output這個(gè)選項(xiàng)中勾選Creat HEX file,如下圖所示。
第五步:進(jìn)入U(xiǎn)tilities這個(gè)選擇中,選擇如下
因?yàn)樵诖宋沂褂玫氖荍LINK,再點(diǎn)擊setting進(jìn)行設(shè)置,設(shè)置情況如下圖
對(duì)于flash算法的選擇可以選擇一個(gè)相近的,對(duì)于我的板子,nor flash是AM29LV160DB,因此我選擇了這個(gè)類(lèi)型的nor flash,做完以上配置后,點(diǎn)擊OK,不斷OK就可以配置成功了。就可以編譯,沒(méi)有任何錯(cuò)誤再進(jìn)行下載。就可以看到LED循環(huán)點(diǎn)亮了。
下面是關(guān)于程序調(diào)試的配置方式。我們調(diào)試是在RAM里面進(jìn)行的。
第一步:同樣需要對(duì)S3C2440.S進(jìn)行configuration wizard進(jìn)行勾選。如果開(kāi)始已經(jīng)做了,這步略過(guò)。
第二步:進(jìn)入到配置界面的Target選項(xiàng)欄。進(jìn)行如下配置。
第三步,進(jìn)入到output選項(xiàng)欄勾選Creat HEX file,如果已經(jīng)勾選可以略過(guò)。
第四步:進(jìn)入Debug選項(xiàng)欄,進(jìn)行如下的配置
Ext_RAM.ini(來(lái)自事例程序中)文件代碼如下并且要進(jìn)行修改
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