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

发布者:chuyifei最新更新时间:2016-04-13 来源: eefocus关键字: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的代码如下,可以直接复制粘贴。里边的内容应该可以显示,这也是我从新浪搬家到这里的原因了,发现新浪的注释代码有时候不能显示。

 


#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中去,以后就会用到。

关键字:mini2440  裸机开发  led灯点亮 引用地址:一起学mini2440裸机开发(一)--第一个led灯点亮

上一篇:基于32位ARM7的CAN节点设计
下一篇:ARM9(S3C2440)的LCD显示——理论知识

推荐阅读最新更新时间:2024-03-16 14:50

mini2440 u-boot linux 内核启动,u-boot.2012.10——mini2440(二、启动流程分析)
参考资料:https://blog.csdn.net/suiyuan19840208/article/details/7239949 https://blog.csdn.net/pugu12/article/details/47011159 http://tscsh.blog.163.com/blog/static/200320103201312645149965/ https://blog.csdn.net/winheroii58/article/details/6803327 1、第一阶段功能 * 硬件设备初始化 * 加载u-boot第二段代码到RAM空间 * 设置好栈 * 跳转到第二段代码入口 2、第二段代码的功能 * 初始
[单片机]
<font color='red'>mini2440</font> u-boot linux 内核启动,u-boot.2012.10——<font color='red'>mini2440</font>(二、启动流程分析)
关于mini2440按键中断的配置
在本文我们以按键中断为例(其他中断差不多配置方法): 一:首先我们应该按键初始化, 从上图中可以看到,按键外部中断分别是EINT8,EINT11,EINT13,EINT14,EINT15,EINT19. 对应的GPIO口是GPG0,GPG3,GPG5,GPG6,GPG7,GPG11. 将对应的IO口设置为中断功能. 二.中断初始化. 1.cpsr中相应的irq位使能. 2.使中断模式为irq模式. 3.开启相应的中断. 4.开启相应的外部中断. #define INTBIT ((1 8)|(1 11)|(1 13)|(1 14)|(1 15)|(1 19)) 三.中断处理函数. 1.判
[单片机]
关于<font color='red'>mini2440</font>按键中断的配置
Linux2.6.32移植到MINI2440(4)移植+分析DM9000网卡驱动
开发环境: 主机:fedora 14 虚拟机:vmware workstation 10 交叉编译工具:arm-linux-gcc 4.3.2 开发板:mini2440(2m nor ,64m sdram,256m nand) 内核版本:linux2.6.32.2 上一篇帖子的uImage可以起yaffs2文件系统,但是起不了nfs,我的yaffs2使用nfs打包来的,换一个内核可以起,bootargs也没有问题,可能是这里网卡没有移植造成的,移植结束之后再看能不能起,因为nfs对后面做驱动开发优势比较大,方便调试看现象,不需要每次都烧写进去,所以还是需要能够起nfs的。DM9000内核
[单片机]
Linux2.6.32移植到<font color='red'>MINI2440</font>(4)移植+分析DM9000网卡驱动
mini2440 触摸屏调试程序记录
今天看了一下s3c2440的touch screen control借口,完成了裸机程序的调试,把代码记录如下 其他的代码和前面做的实验基本一样,只是在ad中断里面添加了对于触摸屏的处理,初始化ad的函数有了一点点修改,只记录ad.c ad.c #define ADCCON (*((volatile unsigned long*)(0x58000000))) #define ADCTSC (*((volatile unsigned long*)(0x58000004))) #define ADCDLY (*((volatile unsigned long*)(0x58000008))) #define A
[单片机]
<font color='red'>mini2440</font> 触摸屏调试程序记录
u-boot-2009.08在mini2440上的移植(二)---增加nor flash功能
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-eabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,参考文章: http://blogold.chinaunix.net/u3/101649/showart.php?id=2105215 http://blog.chinaunix.net/space.php?uid=23787856&do=blog&id=1153
[单片机]
u-boot-2009.08在<font color='red'>mini2440</font>上的移植(二)---增加nor flash功能
用废旧电池点亮LED灯
这款目前还属于概念阶段的路灯(Energy Seed),采用 LED照明 设计,因此,需求的电力比传统路灯用灯泡更省电,使用时间也更长久,而最重要的是,它是汇聚废弃电池里残余电力当作 电源 种子,只要几个废弃的电池就能照亮街头。 只要把家里不用的废电池插上路灯基座上的电池孔,废电池就能为路灯再多照亮好久,这么好的概念,希望能早日实现,如此,既解决污染问题,又增加照明使用,一举两得!
[电源管理]
用废旧电池<font color='red'>点亮</font>的<font color='red'>LED灯</font>
(C51学习一)如何点亮led灯
1.找出C51最小系统原理图 在网上买的开发板,一定有光碟的,光碟中一定有原理图,先找出最小系统原理图,这个原理图标明了CPU的 I/O接口都接什么了。并且给I/O口都标上号 2.找出LED模块原理图 由下图可以看到,P1组I/O口的8个接口分别接着一个LED灯,并且当P1上的某个口为低电平时,LED就会亮。 3.进行编程 #include sbit LED0=P1^0; // 用自己写的标志 LED0 表示 I/O口 P1^0 sbit LED1=P1^1; void main() { LED0 = 0; //P1^0口给低电平 LED1 = 0; //P1^1口给低电平 while(1
[单片机]
(C51学习一)如何<font color='red'>点亮</font><font color='red'>led灯</font>
S3C2416裸机开发系列二_汇编入门代码以及sd卡启动
学习了arm,笔者认为就有必要学习arm的汇编语言。对于软件出错调试,往往需要跟踪c编译器生成的汇编代码和链接器生成的Mapping文件等。对于操作系统,bootloader之类的移植,必须熟悉汇编代码,因为移植涉及到体系结构相关的部分只有汇编代码才能胜任,其它高级语言均无能为力。 1. 流水灯硬件原理图 6个LED分别接到GPA,GPE,GPG,GPL对应的I/O控制引脚上,I/O口由3.3V供电,当对应I/O口输出为1时,则点亮相应的LED,输出为0时,相应的LED灭掉。对于不同的开发板,灯的GPIO口控制不一样,需修改代码的控制口。 2. 工程搭建 打开Keil MDK,版本不是问题,只要能编译armv4指令(arm
[单片机]
S3C2416<font color='red'>裸机</font><font color='red'>开发</font>系列二_汇编入门代码以及sd卡启动
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved