1.      开发板采用韦山东的开发板

2.      芯片CPU三星S3C2440A

3.  控制引脚:GPF4

4.  linux操作系统

5. 芯片手册下载地址:https://eyun.baidu.com/s/3b1UtLc

看芯片手册三星S3C2440A中GPF4的功能:(280/P)

由下面的芯片手册可以看出GPF4的功能可以用作普通IO的输入输出,和外部中断。(下图)

5. IO口控制:(282/P)

由芯片手册中282页中的描述,控制IO口输出只需控制端口控制寄存器(GPXCON)和端口数据寄存器(GPXDAT)即可,当然还有其他的没有截屏出来,控制IO口没用到。(下图)

6. 使用点灯IO口GPF的控制地址如图:(292/P)

由第四点中数据手册知道,只需控制GPFCON和GPFDAT中地址数据即可完成对IO的控制。(下图)

7. GPFCON的控制:

由下图中GPFCON可看出控制GPF4是控制bit[9:8]位,控制LED选用01 = output

8. GPFDAT控制:

由下图可知控制GPF4高低电平只需:

GPFDTA[4] = 0; //低电平

GPFDTA[4] = 1; //高电平

9. 由芯片在手册中所描述并进行分析,控制IO口电平只要控制GPFCON和GPFDAT的寄存器就可以了。不用那么麻烦。。。。。。。。。上面只是手册中所提取的。。。。。。。。。。。原理。。。。。。。。。。。。。。。

 

重点来了:

10.首先往GPFCON的bit[9:8]中送入01就可以控制GPF4为输出模式了,第7点中;然后由

《寄存器位查看小工具.exe》程序中将0x00000100送入0x56000050(第6点GPFCON地址)就行了,这里就是GPFCON的控制了。

11.然后到控制GPFDATA了,原理和上面的差不多,前面第8点说:

GPFDTA[4] = 1; //高电平

将0x00000010送入0x56000054就可以实现控制高电平了。

GPFDTA[4] = 0; //低电平

将0x00000000送入0x56000054就全部都是低电平了,送全0会影响其他位,这里只控制一盏灯,所以其他的多少都无所谓,简单粗暴的方法。

然后上面的原理说完了,再下来该是程序了,使用的程序是汇编的。使用到的几个汇编指令:

程序:

.text

.global _start

_start:

ldr  r1, = 0x56000050

ldr  r0, = 0x100

str  r0, [r1]

ldr  r1, = 0x56000054

ldr  r0, = 0

str  r0, [r1]

halt:

b  halt

上面的代码是.S文件的,下面再新建一个没有后缀的Makefile文件写下面的东西.

Makefile这个主要是编译执行的命令,整合到一个文件里面能够快速编译,这个后面再讲。

led_on.bin : led_on.S

arm-linux-gcc-g -c -o led_on.o led_on.S

arm-linux-ld-Ttext 0x0000000 -g led_on.o -o led_on_elf

arm-linux-objcopy-O binary -S led_on_elf led_on.bin

clean:

rm-f   led_on.bin led_on_elf *.o

然后得到两个文件了

嗯,写完程序后通过Windows和linux联通经过半个多小时操作后编译成功bin文件。

然后烧写到开发板就能点亮灯了,MMP。

1.      使用source Insight 将上述程序写成.S文件

2.      使用fileZilla 连接到linux系统

3.      将1中的文件通过fileZilla上传到linux的/work中去,最好是文件夹

4.      使用MobaXterm_Personal_10.4连接到linux系统中

5.      在用MobaXterm_Personal_10.4 使用linux命令编译成bin文件

6.      在fileZilla将bin 文件从linux中拖回Windows中

7.      使用Windows的cmd命令下载到开发板中去

8.      重新上电就能点灯了

9.      MMP……..

10.  如何将linux,Windows,开发板三个连接起来涉及ping的问题。

总结: 如何烧写看个人开发板,这个只是汇编的解析如何进行点灯的具体原理,当然,汇编完之后编译里面还有机器码,如何去了解机器码的内部就不说了,机器码涉及AMR架构那些,初学没必要了解,以后只要知道就行了,下一篇写C的点灯的,也是在这篇的原理上更改。知道如何去看芯片手册之后就很简单了。上面的截图是我在芯片手册中截取的有效内容,当然还有很多无关的就没有截图下来。

002_linux之点灯(汇编深度解析)的更多相关文章

  1. [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

    [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...

  2. 第37课 深度解析QMap与QHash

    1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap<K, T>模板 ②QMap中的键值对根据Key进行了排序 ③QMap中 ...

  3. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  4. (转载)(收藏)OceanBase深度解析

    一.OceanBase不需要高可靠服务器和高端存储 OceanBase是关系型数据库,包含内核+OceanBase云平台(OCP).与传统关系型数据库相比,最大的不同点, 是OceanBase是分布式 ...

  5. Kafka深度解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

  6. java内存分配和String类型的深度解析

    [尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...

  7. Unity加载模块深度解析(Shader)

    作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...

  8. Unity加载模块深度解析(网格篇)

    在上一篇 加载模块深度解析(一)中,我们重点讨论了纹理资源的加载性能.这次,我们再来为你揭开其他主流资源的加载效率. 这是侑虎科技第53篇原创文章,欢迎转发分享,未经作者授权请勿转载.同时如果您有任何 ...

  9. 深度解析Java8 – AbstractQueuedSynchronizer的实现分析(上)

    本文首发在infoQ :www.infoq.com/cn/articles/jdk1.8-abstractqueuedsynchronizer 前言: Java中的FutureTask作为可异步执行任 ...

随机推荐

  1. C++程序设计学习-第2章

    第二章 变量与基本类型 1.基本内置类型 C++定义了一套包括算术类型和空类型在内的基本数据类型 算术类型:整型和浮点型,包括带符号类型(signed)和无符号类型(unsigned),带符号类型可以 ...

  2. Python反射和内置方法(双下方法)

    Python反射和内置方法(双下方法) 一.反射 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发 ...

  3. SysTick 定时实验(中断)

    实验目的:利用 SysTick 产生 1s 的时基,LED 以 1s 的频率闪烁. 编程要点 1.设置重装载寄存器的值 2.清除当前数值寄存器的值 3.配置控制与状态寄存器 过程 我们创建了两个文件: ...

  4. vmstat命令详解--转载

    一.前言 vmstat命令:  用来获得有关进程.虚存.页面交换空间及 CPU活动的信息.这些信息反映了系统的负载情况 二.虚拟内存运行原理 在系统中运行的每个进程都需要使用到内存,但不是每个进程都需 ...

  5. Linux系统下如何优雅地关闭Java进程?

    资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux ...

  6. 创客课堂——Scratch实例演示

    大家好,这里是蓝精灵创客公益课堂,我是蓝老师. 前两期我们认识了Scratch的界面和菜单功能,本期我们就可以根据提示的步骤,学习一些Scratch的基本操作. 下面就开始今天学习内容 一.开始移动 ...

  7. (一)SpringBoot之简介和安装插件以及HelloWorld第一个程序

    一.简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...

  8. Spring Boot 默认首页

    //继承 WebMvcConfigurerAdapter @Override public void addViewControllers(ViewControllerRegistry registr ...

  9. 【Transact-SQL】计算整个表中所有值的出现的次数

    原文:[Transact-SQL]计算整个表中所有值的出现的次数 一个表有3列,5行,那么一共有15个值,现在要计算整个表中所有值在表中出现的次数,不过这里表的列数是不确定的,上面的例子是3列,实际上 ...

  10. Autofac 使用经验

    慢慢总结 基础使用样例,在 Application_Start 中直接使用 //autofac注册 var builder = new ContainerBuilder(); //注册Controll ...