1、整体思路:把相应的配置数据写入相应的寄存器,控制GPIO电平(Led.s)——运用工程管理Makefile编译、链接文件(由Led.s编译得到led.bin,该文件用于USB启动方式点亮LED,若使用SD卡方式启动LED,则需要添加mkv210_image.c,使用gcc编译得到可执行程序mkmini210,然后通过执行mkmini210程序由led.bin加工得到210.bin)

2、所需文件:led.s、mkv210_image.c、Makefile

3、led.s

  1. /*
  2. 2 * 文件名: led.s
  3. 3 * 描述: 流水灯
  4. 4 */
  5.  
  6. #define GPJ0CON 0xE0200240
  7. #define GPJ0DAT 0xE0200244
  8.  
  9. .global _start // 把_start链接属性改为外部,其他文件就可以看见_start
  10. _start:
  11. // 第一步:把所有引脚都设置为输出模式
  12. ldr r0, =0x11111111 // 从=可以看出用的是ldr伪指令,需要编译器来判断这个数
  13. ldr r1, =GPJ0CON // 是合法立即数还是非法立即数。一般都用ldr伪指令
  14. str r0, [r1] // 寄存器间接寻址。把r0中的数写入到r1中的数为地址的内存中去
  15.  
  16. flash:
  17. // 第1步:点亮LED1,其他熄灭
  18. ldr r0, =~(<<) //0000 0100,另外一种“低端”写法:ldr r0, =((0<<3) | (1<<4) | (1<<5))
  19. ldr r1, =GPJ0DAT //将GPJ0DAT地址赋值给r1
  20. str r0, [r1] // 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮
  21. bl delay // 使用bl调用延时函数
  22.  
  23. // 第2步:点亮LED2,其他熄灭
  24. ldr r0, =~(<<)
  25. ldr r1, =GPJ0DAT
  26. str r0, [r1]
  27. bl delay
  28.  
  29. // 第3步:点亮LED3,其他熄灭
  30. ldr r0, =~(<<)
  31. ldr r1, =GPJ0DAT
  32. str r0, [r1]
  33. bl delay
  34.  
  35. //第4步:循环实现流水灯效果
  36. b flash
  37.  
  38. // 延时函数:delay
  39. delay:
  40. ldr r2, =
  41. ldr r3, =0x0
  42. delay_loop:
  43. sub r2, r2, # //r2 = r2 -1
  44. cmp r2, r3 // cmp会影响Z标志位,如果r2等于r3则Z=1,下一句中eq就会成立
  45. bne delay_loop
  46. mov pc, lr // 函数调用返回

4、mkv210_image.c
mkv210_image.c最终不是在开发板上执行,而是在主机linux(即执行make对整个项目进行编译的虚拟机)中执行,因此编译这个程序用gcc而不是用arm-linux-gcc。这个.c文件编译后得到可执行程序mkmini210,目的是通过执行这个mkmini210程序而由led.bin得到210.bin。(210.bin是通过SD卡启动时的裸机镜像,这个镜像需要由led.bin来加工的到,加工的具体方法和原理要在mkv210_image.c中编写实现)

5、Makefile

基本概念
目标:目标定格写,后面是冒号(冒号后面是依赖)
依赖:依赖是用来产生目标的原材料
命令:命令前面一定是Tab,不能是定格,也不能说多个空格。命令就是要生成那个目标需要做的动作

  1. led.bin: led.o
  2. arm-linux-ld -Ttext 0x0 -o led.elf $^ //将当前目录下的.o文件链接成elf文件,
  3. //其中-Ttext 0x0表示程序的运行地址是0x0
  4. //当前编写的代码是未知无关码,所以程序能在任何一个地方运行
  5. arm-linux-objcopy -O binary led.elf led.bin //将elf文件抽取为可在开发板上运行的.bin文件
  6. arm-linux-objdump -D led.elf > led_elf.dis //将elf文件反汇编后保存在dis文件中,可用于后期程序调试
  7. gcc mkv210_image.c -o mkx210
  8. ./mkx210 led.bin .bin
  9.  
  10. %.o : %.S
  11. arm-linux-gcc -o $@ $< -c //将当前目录下存在的汇编文件编译成.o文件
  12.  
  13. %.o : %.c
  14. arm-linux-gcc -o $@ $< -c //将当前目录下存在的C文件编译成.o文件
  15.  
  16. clean:
  17. rm *.o *.elf *.bin *.dis mkx210 -f

S5PV210_流水灯的更多相关文章

  1. (一)GPIO 编程实验 LED 流水灯控制

    7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P ...

  2. NIOS ii 流水灯

    为了做项目的前期验证工作,实验室购买了某开发板,下面是基于该板子的实现过程.作为笔记记录,供入门者参考. 1:创建一个Quartus II的工程 next选择器件,然后finish.我的器件是cycl ...

  3. [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]

    这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c /*--------------------- ...

  4. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】【实验一】流水灯模块

    实验一:流水灯模块 对于发展商而言,动土仪式无疑是最重要的任务.为此,流水灯实验作为低级建模II的动土仪式再适合不过了.废话少说,我们还是开始实验吧. 图1.1 实验一建模图. 如图1.1 所示,实验 ...

  5. STM32学习笔记(二) 基于STM32-GPIO的流水灯实现

    学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...

  6. 3. 戏说VHDL之入门游戏一:流水灯

    一.   流水灯 1.1流水灯原理 流水灯是每个学电子的入门“游戏” ,示意图如图1,其原理极其简单,但是可玩性却极强,可以就8个LED写出不同花样的程序.在1.2中我们列出两个不同思路的代码作为VH ...

  7. 89C51单片机定时器控制的流水灯

    /***************************************************Copyright: 2014-02-11.version1.0File name: timer ...

  8. 89C51单片机实现的流水灯

    /*******************************************Copyright:  2014.02.09.version1.0File name: led.cDescrip ...

  9. 第一个Linux驱动-流水灯【转】

    转自:http://www.xuebuyuan.com/1856562.html 水平有限,描述不当之处请指出,转载请注明出处http://blog.csdn.net/vanbreaker/artic ...

随机推荐

  1. NodeJs+Request+Cheerio 采集数据

    目的:采集网站文章. 两个依赖项: request :https://github.com/request/request cheerio:https://github.com/cheeriojs/c ...

  2. require() 源码解读

    2009年,Node.js 项目诞生,所有模块一律为 CommonJS 格式. 时至今日,Node.js 的模块仓库 npmjs.com ,已经存放了15万个模块,其中绝大部分都是 CommonJS ...

  3. ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求

    之所以称ASP.NET Core是一个Web开发平台,源于它具有一个极具扩展性的请求处理管道,我们可以通过这个管道的定制来满足各种场景下的HTTP处理需求.ASP. NET Core应用的很多特性,比 ...

  4. .Net 序列化(去除默认命名空间,添加编码)

    1.序列化注意事项 (1).Net 序列化是基于对象的.所以只有实例字段呗序列化.静态字段不在序列化之中. (2)枚举永远是可序列化的. 2.XML序列化时去除默认命名空间xmlns:xsd和xmln ...

  5. 版本控制工具Git的学习笔记

    在网上看到一个很不错的Git教程,学习后果断要做一下总结. 教程地址:http://www.liaoxuefeng.com/ 总结要点: 安装Git因为我个人的开发主要是基于windows环境下,所以 ...

  6. JSONP的诞生、原理及应用实例

    问题: 页面中有一个按钮,点击之后会更新网页中的一个盒子的内容. Ajax可以很容易的满足这种无须刷新整个页面就可以实现数据变换的需求. 但是,Ajax有一个缺点,就是他不允许跨域请求资源. 如果我的 ...

  7. C#设计模式之简单工厂模式(Simple Factory)

    1. 概述 简单工厂模式就是将一个类的实例化交给一个静态工厂来执行. 2. 使用频率 中 3. 模式结构 3.1 机构图 3.2 模式中的角色 Product:抽象类,把具体产品类公共的代码进行抽象和 ...

  8. C#-#define条件编译

    本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...

  9. C#--图片上传(PC端和APP)保存及 跨域上传说明

    手动跨域操作文件 补录:跨域访问文件夹文件是一种常见的需求,下面主要介绍的的通过代码使用具有权限账号的人来达到跨域操作文件的能力. 现在补充一下普通的一些需求场景,今天就遇到了一种需要经常需要登录远程 ...

  10. 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(五)

    (五)注册Website Cloud 1 注册Website Cloud 添加Website Cloud   连接Website Cloud 注意, endpoint 是使用Management Se ...