一起学mini2440裸机开发(一)--第一个led灯点亮

    开发板: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的代码如下,可以直接复制粘贴。/*  */里边的内容应该可以显示,这也是我从新浪搬家到这里的原因了,发现新浪的注释代码有时候不能显示。

  

 /*
* 功能:实现LED1灯循环亮灭
* LED1--GPB5
* LED2--GPB6
* LED3--GPB7
* LED4--GPB8
*/
#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); 
 }

}

/*
* 函数名称:Led_Port_Init()
* 全局变量:无
* 参    数:无
* 返 回 值:无
* 说    明:实现Led1灯的寄存器初始化
*/
void Led_Port_Init(void)
{
   //设置GPB5为输出端口
    rGPBCON &= ~(3<<10);
    rGPBCON |= (1<<10); 
}
/*
* 函数名称:delay(int t)
* 全局变量:无
* 参    数:t
* 返 回 值:无
* 说    明:延时函数
*/
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中去,以后就会用到。

 

  

 

 

 

 

 

 

  

 

 

 

 

 

   

  

 

   

   

 

 

 

 

 

 

 

  

2012年10月15日星期一亲测可以下载 公开视频光盘目录结构 国嵌视频1.iso -习方法与课程体系介绍(前必看) -习方法介绍.avi -国嵌嵌入式课程体系.pdf -嵌入式Linux习方法.pdf -国嵌课程1-嵌入式入门体验班(上) -第1天(嵌入式系统概述) -国嵌体验入门班-1-1(嵌入式系统概述).avi -国嵌体验入门班-1-2(ARM概述).avi -国嵌体验入门班-1-3(嵌入式Linux概述).avi -国嵌体验入门班-1-4(2440开发板介绍).avi -国嵌体验入门班-1-5(软硬件环境搭建).avi -第2天(开发板快乐体验) -国嵌体验入门班-2-1(开发板系统安装).avi -国嵌体验入门班-2-1(开发板系统安装-Jlink方式).avi -国嵌体验入门班-2-1(开发板系统安装-并口方式).avi -国嵌体验入门班-2-2(裸机程序体验).avi -国嵌体验入门班-2-3(QT系统体验).avi -国嵌体验入门班-2-4(Android系统体验).avi 国嵌视频2.iso -国嵌课程1-嵌入式入门体验班(下) -第3天(Linux系统体验) -国嵌体验入门班-3-1(Linux定制安装).avi -国嵌体验入门班-3-2(Linux命令).avi -国嵌体验入门班-3-3(VI使用).avi -国嵌体验入门班-3-4(Linux系统管理).avi -国嵌体验入门班-3-5(Shell编程).avi -国嵌体验入门班-3-6(Qcd功能演示).avi -国嵌体验入门班-3-7(必修实验).avi -国嵌课程2-嵌入式Linux应用开发班 -第1天(编程基础) -国嵌应用班-1-1(GCC程序编译).avi -国嵌应用班-1-2(GDB程序调试).avi -国嵌应用班-1-3(makefile工程管理).avi -国嵌应用班-1-4(必修实验).avi -第2天(文件时间编程) -国嵌应用班-2-1(系统调用方式访问文件).avi -国嵌应用班-2-2(库函数访问文件).avi -国嵌应用班-2-3(时间编程).avi -国嵌应用班-2-4(必修实验).avi -第3天(多进程程序设计) -国嵌应用班-3-1(进程控制原理).avi -国嵌应用班-3-2(进程控制程序设计).avi -国嵌应用班-3-3(必修实验).avi -第4天(进程间通讯) -国嵌应用班-4-1(进程间通讯概述).avi -国嵌应用班-4-2(管道通讯).avi -国嵌应用班-4-3(信号通讯).avi -国嵌应用班-4-4(共享内存通讯).avi -国嵌应用班-4-5(必修实验).avi -第5天(进程间通讯) -国嵌应用班-5-1(消息队列).avi -国嵌应用班-5-2(信号量).avi -国嵌应用班-5-3(必修实验).avi -第6天(进程间通讯) -国嵌应用班-6-1(线程基础).avi -国嵌应用班-6-2(多线程程序设计).avi -国嵌应用班-6-3(必修实验).avi -第7天(网络编程) -国嵌应用班-7-1(Linux网络概述).avi -国嵌应用班-7-2(Linux网络编程基础).avi -国嵌应用班-7-3(TCP程序设计).avi -国嵌应用班-7-4(UDP网络程序设计).avi -国嵌应用班-7-5(并发服务器).avi -国嵌应用班-7-6(必修实验).avi 国嵌视频3.iso -国嵌课程3-ARM系统进阶班 -第1天(ARM系统开发基础) -ARM系统精讲班-1-1(ADS集成开发环境).avi -ARM系统精讲班-1-2(ARM工作模式).avi -ARM系统精讲班-1-3(ARM寄存器).avi -ARM系统精讲班-1-4(ARM寻址方式).avi -ARM系统精讲班-1-5(ARM汇编指令详解).avi -第2天(ARM系统开发基础) -ARM系统精讲班-2-1(ARM汇编指令详解).avi -ARM系统精讲班-2-2(ARM伪指令).avi -ARM系统精讲班-2-3((混合编程).avi -ARM系统精讲班-1-8(必修实验).avi -第3天(LED驱动程序设计) -ARM系统精讲班-2-1(GPIO).avi -ARM系统精讲班-2-2(LED控制程序设计).avi -ARM系统精讲班-2-3((LED闪烁).avi -第4天(LED与按键驱动程序设计) -ARM系统精讲班-4-1(ARM中断控制系统).avi -ARM系统精讲班-4-2(按键控制程序设计).avi -ARM系统精讲班-2-6(必修实验).avi -第5天(定时器与时钟驱动程序设计) -ARM系统精讲班-5-1(ARM时钟体系).avi -ARM系统精讲班-5-2(定时器驱动程序设计).avi -国嵌课程4(嵌入式LINUX内核驱动进阶班-上) -第1天(内核开发基础) -国嵌内核驱动进阶班-1-1(Linux内核简介).avi -国嵌内核驱动进阶班-1-2(Linux内核源代码).avi -国嵌内核驱动进阶班-1-3(Linux内核配置与编译).avi -国嵌内核驱动进阶班-1-4(Linux内核模块开发).avi -国嵌内核驱动进阶班-1-5(必修实验).avi -第2天(U-Boot移植) -国嵌内核驱动进阶班-2-1(嵌入式linux系统架构).avi -国嵌内核驱动进阶班-2-2(交叉工具链).avi -国嵌内核驱动进阶班-2-3(Bootloader介绍).avi -国嵌内核驱动进阶班-2-4(U-Boot介绍).avi -国嵌内核驱动进阶班-2-5(U-Boot命令).avi -国嵌内核驱动进阶班-2-6(U-Boot启动流程).avi -国嵌内核驱动进阶班-2-7(Uboot移植).avi -国嵌内核驱动进阶班-2-8(必修实验).avi 国嵌视频4.iso -国嵌课程4(嵌入式LINUX内核驱动进阶班-下) -第3天(内核开发基础) -国嵌内核驱动进阶班-3-1(嵌入式linux内核制作).avi -国嵌内核驱动进阶班-3-2(根文件系统制作).avi -国嵌内核驱动进阶班-3-3(内核启动流程).avi -国嵌内核驱动进阶班-3-4(嵌入式文件系统).avi -国嵌内核驱动进阶班-3-5(必修实验).avi -第4天(内存管理子系统) -国嵌内核驱动进阶班-4-1(Linux内存管理).avi -国嵌内核驱动进阶班-4-2(进程地址空间).avi -国嵌内核驱动进阶班-4-3(内核地址空间).avi -国嵌内核驱动进阶班-4-4(Linux内核链表).avi -国嵌内核驱动进阶班-4-5(Linux内核定时器).avi -国嵌内核驱动进阶班-2-7(Uboot移植).avi -国嵌内核驱动进阶班-2-8(必修实验).avi -第5天(进程管理子系统) -国嵌内核驱动进阶班-5-1(LINUX进程控制).avi -国嵌内核驱动进阶班-5-2(LINUX进程调度).avi -国嵌内核驱动进阶班-5-3(Linux系统调用).avi -国嵌内核驱动进阶班-5-4(Proc文件系统).avi -国嵌内核驱动进阶班-5-5(内核异常分析).avi -国嵌内核驱动进阶班-5-6(必修实验).avi -第6天(简单字符设备驱动程序设计) -国嵌内核驱动进阶班-6-1(LINUX驱动程序介绍).avi -国嵌内核驱动进阶班-6-2(字符设备驱动程序设计).avi -国嵌内核驱动进阶班-6-3(字符设备驱动程序实例分析).avi -国嵌内核驱动进阶班-6-4(竞争与互斥).avi -国嵌内核驱动进阶班-6-5(必修实验).avi -第7天(高级字符设备驱动程序设计) -国嵌内核驱动进阶班-7-1(Ioctl设备控制).avi -国嵌内核驱动进阶班-7-2(内核等待队列).avi -国嵌内核驱动进阶班-7-3(阻塞型字符设备驱动).avi -国嵌内核驱动进阶班-7-4(Poll设备方法).avi -国嵌内核驱动进阶班-7-5(自动创建设备文件).avi -国嵌内核驱动进阶班-7-6(必修实验).avi
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖零大壮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值