S5PV210_流水灯
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
/*
2 * 文件名: led.s
3 * 描述: 流水灯
4 */ #define GPJ0CON 0xE0200240
#define GPJ0DAT 0xE0200244 .global _start // 把_start链接属性改为外部,其他文件就可以看见_start
_start:
// 第一步:把所有引脚都设置为输出模式
ldr r0, =0x11111111 // 从=可以看出用的是ldr伪指令,需要编译器来判断这个数
ldr r1, =GPJ0CON // 是合法立即数还是非法立即数。一般都用ldr伪指令
str r0, [r1] // 寄存器间接寻址。把r0中的数写入到r1中的数为地址的内存中去 flash:
// 第1步:点亮LED1,其他熄灭
ldr r0, =~(<<) //0000 0100,另外一种“低端”写法:ldr r0, =((0<<3) | (1<<4) | (1<<5))
ldr r1, =GPJ0DAT //将GPJ0DAT地址赋值给r1
str r0, [r1] // 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮
bl delay // 使用bl调用延时函数 // 第2步:点亮LED2,其他熄灭
ldr r0, =~(<<)
ldr r1, =GPJ0DAT
str r0, [r1]
bl delay // 第3步:点亮LED3,其他熄灭
ldr r0, =~(<<)
ldr r1, =GPJ0DAT
str r0, [r1]
bl delay //第4步:循环实现流水灯效果
b flash // 延时函数:delay
delay:
ldr r2, =
ldr r3, =0x0
delay_loop:
sub r2, r2, # //r2 = r2 -1
cmp r2, r3 // cmp会影响Z标志位,如果r2等于r3则Z=1,下一句中eq就会成立
bne delay_loop
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,不能是定格,也不能说多个空格。命令就是要生成那个目标需要做的动作
led.bin: led.o
arm-linux-ld -Ttext 0x0 -o led.elf $^ //将当前目录下的.o文件链接成elf文件,
//其中-Ttext 0x0表示程序的运行地址是0x0
//当前编写的代码是未知无关码,所以程序能在任何一个地方运行
arm-linux-objcopy -O binary led.elf led.bin //将elf文件抽取为可在开发板上运行的.bin文件
arm-linux-objdump -D led.elf > led_elf.dis //将elf文件反汇编后保存在dis文件中,可用于后期程序调试
gcc mkv210_image.c -o mkx210
./mkx210 led.bin .bin %.o : %.S
arm-linux-gcc -o $@ $< -c //将当前目录下存在的汇编文件编译成.o文件 %.o : %.c
arm-linux-gcc -o $@ $< -c //将当前目录下存在的C文件编译成.o文件 clean:
rm *.o *.elf *.bin *.dis mkx210 -f
S5PV210_流水灯的更多相关文章
- (一)GPIO 编程实验 LED 流水灯控制
7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P ...
- NIOS ii 流水灯
为了做项目的前期验证工作,实验室购买了某开发板,下面是基于该板子的实现过程.作为笔记记录,供入门者参考. 1:创建一个Quartus II的工程 next选择器件,然后finish.我的器件是cycl ...
- [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c /*--------------------- ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】【实验一】流水灯模块
实验一:流水灯模块 对于发展商而言,动土仪式无疑是最重要的任务.为此,流水灯实验作为低级建模II的动土仪式再适合不过了.废话少说,我们还是开始实验吧. 图1.1 实验一建模图. 如图1.1 所示,实验 ...
- STM32学习笔记(二) 基于STM32-GPIO的流水灯实现
学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...
- 3. 戏说VHDL之入门游戏一:流水灯
一. 流水灯 1.1流水灯原理 流水灯是每个学电子的入门“游戏” ,示意图如图1,其原理极其简单,但是可玩性却极强,可以就8个LED写出不同花样的程序.在1.2中我们列出两个不同思路的代码作为VH ...
- 89C51单片机定时器控制的流水灯
/***************************************************Copyright: 2014-02-11.version1.0File name: timer ...
- 89C51单片机实现的流水灯
/*******************************************Copyright: 2014.02.09.version1.0File name: led.cDescrip ...
- 第一个Linux驱动-流水灯【转】
转自:http://www.xuebuyuan.com/1856562.html 水平有限,描述不当之处请指出,转载请注明出处http://blog.csdn.net/vanbreaker/artic ...
随机推荐
- 在C#里面给PPT添加注释
平常开会或者做总结报告的时候我们通常都会用到PowerPoint演示文稿,我们可以在单个幻灯片或者全部幻灯片里面添加注释,这样观众可以从注释内容里面获取更多的相关信息. 有些朋友不清楚如何在幻灯片里面 ...
- NLP&数据挖掘基础知识
Basis(基础): SSE(Sum of Squared Error, 平方误差和) SAE(Sum of Absolute Error, 绝对误差和) SRE(Sum of Relative Er ...
- 1元搭建自己的云服务器&解析域名
最近在学做微信开发,没有自己的域名和服务器就不得不寄人篱下,索性自己就到云主机上搭建了个服务器,但是水平有限弄了一个下午~~有自己的域名和服务器的好处相信不用我多说了.比如日后可以有自己域名的个性博客 ...
- yii2获取登录前的页面url地址--电脑和微信浏览器上的实现以及yii2相关源码的学习
对于一个有登录限制(权限限制)的网站,用户输入身份验证信息以后,验证成功后跳转到登录前的页面是一项很人性化的功能.那么获取登录前的页面地址就很关键,今天在做一个yii2项目的登录调试时发现了一些很有意 ...
- SQL Server 统计信息更新时采样百分比对数据预估准确性的影响
为什么要写统计信息 最近看到园子里有人写统计信息,楼主也来凑热闹. 话说经常做数据库的,尤其是做开发的或者优化的,统计信息造成的性能问题应该说是司空见惯. 当然解决办法也并非一成不变,“一招鲜吃遍天” ...
- 微信js框架第二篇(创建完整界面布局)
接着昨天的继续谈关于微信新出的这个js框架,今天主要谈一个页面的创建到布局的详细步骤. 一.创建一个完整页面 页面你可以创建在项目的任何节点,只要你在入口文件正确引入创建该页面的路径就可使 ...
- openresty 前端开发入门一
OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 ...
- C标准头文件<errno.h>
声明了错误处理相关的宏 errno errno即error number,在程序启动时被设为0,当某个库函数运行出现错误的时候,会将相应的能表达错误类型的数字赋值给这个左值,这些数字往往有相应的宏来表 ...
- stream_set_timeout (fread 造成了php程序timeout)
最近在执行fread时候,php出现了 "Fatal error: Maximum execution time of 30 seconds " fread() :从文件指针 ha ...
- 2016年6月份那些最实用的 jQuery 插件专辑
jQuery 是一个快速.流行的 JavaScript 库,jQuery 用于文档处理.事件处理.动画和 Ajax 交互非常简单,学习曲线也很平坦.2016年6月的 jQuery 插件专辑里,我们选择 ...