开发板:mini2440, NandFlash:K9F2G08U0B 256M巨细,CPU:S3C2440A 。
开发环境:MDK4.11
仿真器:Jlink v8
这是我用csdn宣布的第一个文章,之前运用过arm-linux-gcc裸机开发mini2440,可是许多函数什么的不能直接调用(我的技术问题),预备从头整理一下ARM裸机,整理好之后预备下一阶段学习。关于软件MDK4.11和它的注册机,我传不上去,说是由于文件太大,又想要的直接留言要就行了。
下面开端我们的第一个LED灯的点亮程序吧!
1、新建一个项目工程
双击MDK图标进入开发环境,如下图,
单击Project/New uVision Project,挑选你要创立文档的方位,文档名为test,单击保存
挑选CPU为Samsung/S3C2440A,单击OK
单击完OK按钮后,我们先看一下本来的空test文件夹里多了什么文件,当然你也能够不必看,我是看看MDK到底是默认给我们供给了什么便利,下图为单击OK后多出的文档
很简单看出多出来一个test工程文档。在上一步单击完OK后,会弹出下图,该图是为了让你挑选是不是将Samsung S3C2440的发动代码仿制增加的你的工程文档。这段发动代码我们今后剖析,在这儿先挑选“是”
挑选“是”后,一个工程文档建好了,如下图所示。
你看上图,能够看到工程文档主动增加了S3C2440.s,这便是上一步挑选“是”后主动增加的发动代码,我们再看看test文件夹里多了什么文件。很简单能够看出多了三个文件,其间一个便是S3C2440.s,这个代码很重要啊。我们现在先不论他,接着下一步。
2、新建一个文件。挑选File/New,新建一个文件。
将该文件保存并命名为test1,留意后边要加后缀.c,单击保存
将test1.c文件增加到你的工程,对着Source Group1右击,挑选“Add Files to Group “Source Group 1″…”
挑选方才树立的test1.c,单击Add,该文件就被加到了工程中。
这儿不需求增加其他文件了,直接点击Close就能够了。下图能够看到test1.c现已被加到工程中了。
3、修正test1.c文件。这儿我们再增加其他文件,也不再运用include包括什么东西。
test1.c的代码如下,能够直接仿制粘贴。里面的内容应该能够显现,这也是我从新浪搬迁到这儿的原因了,发现新浪的注释代码有时分不能显现。
#define rGPBCON (*(volatile unsigned long*)0x56000010)
#define rGPBDAT (*(volatile unsigned long*)0x56000014)
#define Led1_On ~(1<<5)
#define Led1_Off (1<<5)
void Led_Port_Init(void);
void delay(int i);
int main(void)
{
Led_Port_Init();
while(1)
{
//Led1亮
rGPBDAT&=Led1_On;
delay(10000);
//Led1灭
rGPBDAT|=Led1_Off;
delay(10000);
}
}
void Led_Port_Init(void)
{
//设置GPB5为输出端口
rGPBCON &= ~(3<<10);
rGPBCON |= (1<<10);
}
void delay(int t)
{
int a,b;
for(a=0;a<=i;a++)
for(b=0;b<=100;b++);
}
将上面的代码仿制粘贴完之后,留意保存。这时分还不能编译,假如编译,会呈现如下图的过错。
意思是说ROM1没有界说什么的,下面在用之前需求装备
4、装备之前的预备作业
首要,在你MDK装置目录下,找到文件Ext_RAM的装备文件,如下图是我的Ext_RAM的途径
将这个Ext_RAM文件仿制到我们创立的test工程寄存的文件夹中,我的是下图
修正该文件的一处内容,只修正一处哈,如下图,
将LOAD Obj\Blinky.axf INCREMENTAL // Download program
修正为LOAD .\test.axf INCREMENTAL // Download program
这儿的.\表明当时文件夹,test是你的工程文件名,比如说你新建的工程为wangwensong,那么这儿就要改为.\wangwensong.axf了。
做完预备作业,下面开端进行装备。
在Target 1处鼠标右击,挑选Options for Target Target 1….
弹出下图,装备Target,如下图
装备Debug,如下图。由于我运用的是Jlink仿真,所以挑选J-LINK/J-TRACE,那个.\Ext_RAM.ini文件便是方才我们仿制修正后的文件,增加进来就行了
装备Utilities,如下图
至此装备完结,点击OK,就行了。
5、编译
点击保存按钮,先保存一下,再点击,编译文件。
这样我们就能够仿真了。
6、仿真
我运用的是Jlink仿真,这儿你首要要装置好Jlink的驱动,要不然不能用。我感觉MDK的Jlink仿真便是比ADS的仿真好,用起来便利。
首要,将Jlink与你的电脑、mini2440开发板连接好,将mini2440的开关留意拨到nor flash发动,要不然你的jlink不作业的,翻开开发板电源。
点击仿真按钮,然后MDK会进入仿真环境?,不好意思,呈现了过错error,Error:Flash Download failed -ARM920T
如下图。关于这个过错,我表明很快乐啊!!在处理它的时分我又理解了一个很重要的知识点!
我们先把他处理了吧,只需求修正一项,那便是我们在装备Utilities的时分将那个Update Target before Debugging前面的勾去掉,如下图
修正完这一项后,你就能够再点击仿真按钮,一瞬间你的板子上的灯就会一亮一灭了。
7、总结
到第六步,这篇文章的意图就达到了,这一步仍是针对上一步中呈现的过错进一步剖析。
看一下呈现过错的时分,Build Output输出的信息,如下图
输出的信息是:
No Algorithm found for:30000000H – 30000357H
Erase skipped!
那么这是什么意思呢?联络犯错提示框中的过错信息“Flash Downloaded flashed”,能够看出这儿是MDK要找以0x30000000最初的地址空间的Flash下载算法(algorithm),可是0x30000000最初的空间不是Flash地址空间,而是内存空间(SDRAM的开始地址是0x30000000),记住我们在装备Target时,设置的地址其实便是根据内存加载的。这样处理方法就有了。已然我们挑选的是根据内存的加载方法,就应该在装备Ultilities时,撤销“Update Target before Debugging”,这个选项只能在Flash加载方法中运用。
在这儿阐明一下,RAM(SDRAM也是其间一种)表明的是读写存储器,可其间的任一存储单元进行读或写操作,计算机封闭电源后其内的信息将不在保存,再次开机需求从头装入,一般用来寄存操作系统,各种正在运转的软件、输入和输出数据、中心成果及与外存交流信息等,我们常说的内存主要是指RAM。所以我们的开发板假如断电再重启,程序就没有了,处理这个的方法是将程序从sdram中仿制到nand flash中去,今后就会用到。