ARM学习笔记13——LED驱动程序设计
首先我们要根据开发板原理图得到控制LED灯的引脚是哪个,我们现在以LED1为例,我们已经知道LED1由S5PV210的GPC1_3控制,因此我们按如下步骤进行:
第一步是配制S5PV210的GPC1_3为输出口;
第二步我们禁止GPC1_3的上、下拉电阻功能;
第三步就是控制GPC1_3输出高电平或低电平。
要想对GPC1进行配置,那我们需要知道其配置寄存器的地址,根据S5PV210的编程手册我们可以知道:
GPC1的配置寄存器地址是:0xE0200080
GPC1数据寄存器地址是:0xE0200084
GPC1上、下拉控制寄存器地址是:0xE0200088
同样由S5PV210的编程手册得知,要将GPC1_3配置为输出口,只要将地址单元0xE0200080(配置寄存器)的BIT15设置为0001即可。
根据ARM体系结构的特点:运算编写在寄存器中完成,要想访问存储器必须用到加载ldr/str指令。要想操作地址单元0xE0200080(GPC1配置寄存器)的内容,必须将0xE0200080放到ARM寄存器(R0-Rn)中,然后用ldr/str指令访问该单元(GPC1配置寄存器)的内容。 那么,如何将0xE0200080放到寄存器中呢?我们这里可以采用比较直观的方法,通过伪指令ldr来完成,即:ldr r0,-=0xE0200080.
将GPC1_3配置为输出口的代码段为:
ldr r2,=0xE0200080 @将地址0xE0200080放到ARM寄存器R2
ldr r3,[r2] @加载地址单元0xE0200080的内容到R3中
mov r0,#0xf @将立即数0xf放到R0
bic r3,r3,r0,lsl # @将R3的BIT[15:12]清零
mov r1,#0x1 @将1放到ARM寄存器R1中
orr r3,r3,r1,lsl # @将R3的BIT15:BIT12=0001
str r3,[r2] @将R3的内容存储到R2指向的地址单元(0xE0200080)
禁止GPC1_3上、下拉电阻功能代码片段:
ldr r2,=0xE0200088
mov r0,#0x3
ldr r3,[r2]
bic r3,r3,r0,lsl #
str r3,[r2]
控制GPC1_3输出高电平代码片段
ldr r2,=0xE0200080
mov r0,#
ldr r3,[r2]
orr r3,r3,r0,lsl #
str r3,[r2]
控制GPC1_3输出低电平代码片段
ldr r2,=0xE0200080
mov r0,#
ldr r3,[r2]
bic r3,r3,r0,lsl #
str r3,[r2]
如果实现LED灯的亮、灭闪烁,在LED亮和灭之后都需要加入一定的延时,否则我们看不到灯的闪烁。 我们可以用类似如下的代码实现延时:
delay:
mov r1,#0xf00000
sub r1,r1,#
cmp r0,#
bne delay
mov pc,lr
ARM学习笔记13——LED驱动程序设计的更多相关文章
- input子系统学习笔记六 按键驱动实例分析下【转】
转自:http://blog.chinaunix.net/uid-20776117-id-3212095.html 本文接着input子系统学习笔记五 按键驱动实例分析上接续分析这个按键驱动实例! i ...
- Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法
Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...
- SQL反模式学习笔记13 使用索引
目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引. 索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...
- golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ...
- 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
· 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...
- Linux 驱动学习笔记05--字符驱动实例,实现一个共享内存设备的驱动
断断续续学驱动,好不容易有空,做了段字符驱动的例子.主要还是跟书上学习在此记录下来,以后说不定能回过头来温故知新. 首先上驱动源码 gmem.c: /************************* ...
- MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互
在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应 ...
随机推荐
- 一些简单的帮助类(2)-- JavaSctipt Array Linq
在日程工作中经常会遇到这样的问题 一个JS数组 我们要找出其中 一些符合要求的类容 又或者对数组里的类容求和求平均数之类的一般的做法是循环里面的类容做判断添加到一个新的集合里 var array = ...
- js 无刷新分页代码
/** * 分页事件处理 */function paging(){ $("#firstPage").click(function(){ //首页 var pageNo = getP ...
- javaScripte 创建对象。。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Android中图片的异步加载
转: 1. 为什么要异步加载图片 下载图片比较费时,先显示文字部分,让加载图片的过程在后台,以提升用户体验 2. SoftReference的作用 栈内存—引用 堆内存—对象 Eg: Object ...
- PL/SQL学习(二)条件和循环语句
原文参考:http://plsql-tutorial.com/ PLSQL条件语句 IF THEN ELSE STATEMENT 1) IF condition THEN statement ...
- C语言结构体中的函数指针
这篇文章简单的叙述一下函数指针在结构体中的应用,为后面的一系列文章打下基础 本文地址:http://www.cnblogs.com/archimedes/p/function-pointer-in ...
- 2014年度辛星html教程夏季版第四节
我们前面也涉及了HTML中的一些东西,接下来我们要涉及到图像了,如果没有图像,即使文字的样式再多,再复杂,终归还是单调的,我们就需要用图片来给我们的网页增加更多的表现形式. ************* ...
- IT从业人员必看的十几个论坛
IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多,往哪里去,新浪论坛,网易是经常去的,人多啊,好几十万,去了以后才发现没有意思,没有共同的语言,于是逛专 ...
- 移动web HTML5使用photoswipe模仿微信朋友圈图片放大浏览
先来几张效果图: 点击其中一张照片可放大,可支持图片文字描述: 同时支持分享功能: 支持手势放大缩小 使用js框架是PhotoSwipe. PhotoSwipe是一个图片放大插件,兼容pc和移动端,经 ...
- Quartz1.8.5例子(十四)
org.quartz.scheduler.instanceName: PriorityExampleScheduler # Set thread count to 1 to force Trigger ...