LED——S5PV210的LED的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

一、LED物理特性介绍

LED本身有2个接线点,一个是LED的正极,一个是LED的负极。

LED的功能就是亮或者不亮,只需要给LED的正极加电压即可点亮LED,去掉电压则熄灭。

二、X210开发板的LED硬件接法

查阅原理图,发现开发板上一共有5颗LED:D22、D23、D24、D25、D26。

其中D26的正极接5V,负极接地,因此这颗LED只要上电就会常亮,分析得知这颗LED是电源指示灯。 

剩下4颗LED的正极接3.3V,负极接了SoC上的一个引脚(GPIO),具体接法是:

D22:GPJ0_3

D23:GPJ0_4

D24:GPJ0_5

D25:PWMTOUT1(GPD0_1)  

因为D22~D25的正极已经接了3.3V,而负极接在SoC的引脚上,因此可以通过SoC中编程来控制负极的电压值。只要负极输出低电平,这样在正负极上就会有电压差,LED即可点亮。

三、S5PV210的GPIO相关的寄存器

1、GPIO的含义

GPIO是“general purpose input output”的缩写,中文意思是“通用输入输出”。

GPIO其实就是芯片的一些引脚(芯片上的引脚有些不是GPIO,只有一部分是),作为GPIO的这类引脚,其功能和特点是可以被编程控制它的工作模式,也可以编程控制它的电压高低等。

通过之前的分析可知,X210开发板在设计电路时把LED接在了GPIO上,这样一来就可以通过编程控制GPIO的模式和输入输出值来操控LED的亮灭。如果把LED接在非GPIO上那就不行。

2、GPIO相关的寄存器

要操作GPIO,必须设置它们的寄存器,关于GPIO的部分,在数据手册的Section2.2中。

查阅数据手册可知,GPJ0相关的寄存器有:

  • GPJ0CON:GPJ0控制寄存器,用来配置各引脚的工作模式。
  • GPJ0DAT:当引脚配置为input/output模式时,寄存器的相应位和引脚的电平高低相对应。
  • GPJ0PUD:(pull up down)控制引脚内部弱上拉、下拉。
  • GPJ0DRV:(driver)配置GPIO引脚的驱动能力。
  • GPJ0CONPDN:低功耗模式下的控制寄存器。
  • GPJ0PUDPDN:低功耗模式下的上下拉寄存器。

这里重点地说明两个主要的寄存器:GPJ0CON和GPJ0DAT。

(1)GPJ0CON寄存器

由寄存器的内容可知,GPJ0CON寄存器每4bit控制一个GPIO引脚,比如bit[31:28]控制GPJ0_7这个GPIO。

(1)GPJ0DAT寄存器

由寄存器的内容可知,当端口被配置成输入输出模式时,GPJ0DAT寄存器bit0~bit7对应着输入或者输出的值。

三、编程实践

1、实践一之点亮LED灯

第一步,操控GPJ0CON寄存器中,选中output模式。

第二步,操控GPJ0DAT寄存器,相应的位设置为0。

代码如下所示,这个实验是点亮D22、D23、D24这三个LED灯。

_start:// 第一步:把0x11111111写入0xE0200240(GPJ0CON)位置ldr r0, =0x11111111	ldr r1, =0xE0200240			str r0, [r1]// 第二步:把0x0写入0xE0200244(GPJ0DAT)位置ldr r0, =0x0ldr r1, =0xE0200244str r0, [r1]   // 把0写入到GPJ0DAT寄存器中,则引脚即输出低电平,LED点亮// 下面两行写了一个死循环。因为裸机程序是直接在CPU上运行的,CPU会
// 逐行运行裸机程序直到CPU断电关机。如果我们的程序所有的代码都
// 执行完了CPU就会跑飞(跑飞以后是未定义的,所以千万不能让CPU
// 跑飞),不让CPU跑飞的办法就是在我们整个程序执行完后添加死循环
flag:b flag	

2、实践二之LED灯闪烁

代码如下所示。

#define GPJ0CON	0xE0200240
#define GPJ0DAT	0xE0200244.global _start		// 把_start链接属性改为外部,这样其他文件就可以看见_start了
_start:// 第一步:把所有引脚都设置为输出模式,代码不变ldr r0, =0x1111111// 从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断ldr r1, =GPJ0CON// 这个数是合法立即数还是非法立即数。一般写代码都用ldr伪指令str r0, [r1]// 寄存器间接寻址。功能是把r0中的数写入到r1中的数为地址的内存中去flash:// 第二步:全部点亮ldr r0, =((0<<3) | (0<<4) | (0<<5))	// 清清楚楚的看到哪个灭,哪个是亮ldr r1, =GPJ0DATstr r0, [r1]	// 把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮// 第三步:延时bl delay					// 使用bl进行函数调用// 第四步:全部熄灭ldr r0, =((1<<3) | (1<<4) | (1<<5))	// 清清楚楚的看到哪个灭,哪个是亮ldr r1, =GPJ0DATstr r0, [r1]		// 第五步:延时bl delayb flash// 延时函数:函数名:delay
delay:ldr r2, =9000000ldr r3, =0x0
delay_loop:	sub r2, r2, #1				//r2 = r2 -1cmp r2, r3					// cmp会影响Z标志位,如果r2等于r3则Z=1,bne delay_loop              //bne是不相等则跳转mov pc, lr					// 函数调用返回

3、实践三之LED流水灯

代码如下所示。

#define GPJ0CON	0xE0200240
#define GPJ0DAT	0xE0200244.global _start					
_start:// 第一步:把所有引脚都设置为输出模式,代码不变ldr r0, =0x11111111			ldr r1, =GPJ0CON		str r0, [r1]		// 要实现流水灯,只要在主循环中实现1圈的流水显示效果即可
flash:// 第1步:点亮LED1,其他熄灭//ldr r0, =((0<<3) | (1<<4) | (1<<5))ldr r0, =~(1<<3)ldr r1, =GPJ0DATstr r0, [r1]	// 然后延时bl delay					// 使用bl进行函数调用// 第2步:点亮LED2,其他熄灭	ldr r0, =~(1<<4)ldr r1, =GPJ0DATstr r0, [r1]			// 然后延时bl delay					// 使用bl进行函数调用// 第3步:点亮LED3,其他熄灭	ldr r0, =~(1<<5)ldr r1, =GPJ0DATstr r0, [r1]			// 然后延时bl delay					// 使用bl进行函数调用b flash// 延时函数:函数名:delay
delay:ldr r2, =9000000ldr r3, =0x0
delay_loop:	sub r2, r2, #1				//r2 = r2 -1cmp r2, r3		// cmp会影响Z标志位,如果r2等于r3则Z=1,不相等则Z=0bne delay_loop  // bne指令判断Z是否等于0,Z等于0则执行delay_loopmov pc, lr					// 函数调用返回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“.公司”域名注册总量TOP15:新网问鼎 万网居亚

IDC评述网&#xff08;idcps.com&#xff09;01月16日报道&#xff1a;根据ntldstats.com发布的最新数据显示&#xff0c;截止至01月15日17:00&#xff0c;在“.公司”域名注册总量大战中&#xff0c;新网打败众多国内外域名服务商&#xff0c;成为新晋霸主&#xff0c;其“.公…

Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备

返回 Mac App Store Prepare for Mac App Store Submission 提交到Mac 应用商店之前的准备 Most of your time is spent on coding tasks, but to develop for the Mac App Store, you need to perform a number of administrative tasks, using Xcode and other tools. You’l…

ARM通识——关于ARM的一些认识

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 注意&#xff0c;由于文章的撰写时间过早&#xff0c;很多内容没有更新&#xff0c;这里仅当一个通识了解。 1、ARM发展的里程碑 ARM的前身为艾康电脑&#xff08;Acorn&#xff09;&#xff0c;于…

使用RMAN备份数据库

1.1使用控制文件备份全库 1.1.1配置备份路径 1.1.2 RMAN备份全库 1.2使用catalog数据库备份全库 1.2.1配置到远程数据库的TNS 1.2.2创建表空间及设置用户 1.2.3进入目录数据库并注册 1.2.4 CATALOG方式备份全库 转载于:https://www.cnblogs.com/myrunning/p/4231057.html

PL/SQL Developer连接Oracle 11g在Win8 64位系统下乱码

PL/SQL Developer在64位系统上连接Oracle&#xff0c;需要安装32位Oracle client客户端&#xff0c;使用后&#xff0c;发现操作数据库出现乱码的情况。经过查找资料&#xff0c;解决此问题&#xff0c;方法如下&#xff1a; 需要在系统的环境变量中&#xff0c;加入以下变量&a…

命令模式--command模式

首先来一个命令的接口&#xff1a; package mode.command;/*** * 定义一个命令接口&#xff0c;其中有一个抽象的执行方法&#xff0c;参数人命令接收器* * */ public interface Command {public void execute(CommandReceiver commandReceiver); }定义一个命令接受者的接口&am…

uploadify scriptData参数无法传参的问题

最近需要使用到uploadify&#xff0c;需要向后台传递参数&#xff0c;使用script最多只能够传递一个参数&#xff0c;当然也可以通过合并参数然后再在服务器段拆分参数的方法来传递多个参数&#xff0c;而uploadify插件提供的scriptData却怎么都无法使用&#xff0c;网上查阅了…

安装iproute2

yum install -y gcc bison flex#tar -xzf iproute2-3.17.0.tar.gz#cd iproute2-3.17.0#sed -i /^TARGETS/sarpdg misc/Makefile#make SBINDIR/sbin#make SBINDIR/sbin install参考资料&#xff1a;http://blog.sina.com.cn/s/blog_5f5716580100rvop.htmlhttps://www.kernel.or…

「北京」京东 JD.COM 招聘中/高级前端工程师

职位描述&#xff1a; 1、计算机或相关专业专科以上学历&#xff0c;2年以上网站前端开发经验&#xff0c;电子商务相关从业经验优先&#xff1b;2、精通各种Web前端技术&#xff0c;对符合web标准的网站重构有丰富经验&#xff0c;有成功作品&#xff1b;3、理解并掌握JavaScr…

前端上传组件Plupload使用指南

我之前写过一篇文章《文件上传利器SWFUpload使用指南》&#xff0c;里面介绍了上传组件SWFUpload的使用方法&#xff0c;但现在随着html5技术的逐渐推广和普及&#xff0c;再去使用以flash为上传手段的SWFUpload显然就有点过时了&#xff0c;毕竟html5原生的就给我们提供了文件…

HTML5简易在线画图工具

HTML5简易在线画图工具 原文:HTML5简易在线画图工具继上次学习了HTML5的路径画圆做了动态时钟、异次元空间的反转做了运动的太阳系&#xff0c;这两天将画线、画圆、填充等知识点结合起来做了一个简易的在线画图工具&#xff1a; 查看DEMO&#xff1a;HTML5简易在线画图工具 功…

uboot中系统时钟初始化函数:system_clock_init

时钟初始化函数内容如下&#xff1a; /** system_clock_init: Initialize core clock and bus clock.* void system_clock_init(void)*/ system_clock_init:ldr r0, ELFIN_CLOCK_POWER_BASE 0xe0100000/* Set Mux to FIN */ldr r1, 0x0str r1, [r0, #CLK_SRC0_OFFSET]ldr r1, …

【excel技巧读书笔记001】清除打开过的文件记录

我们在工作的时候经常打开工作薄&#xff0c;这些工作薄都会在最近使用的工作薄列表看到&#xff0c;如果不希望别人看到自己打开过的记录&#xff0c;可以将最近使用的工作薄列表清空。具体步骤如下&#xff1a;1.【文件】-【选项】-【高级】-【显示】显示此数目的最近使用文档…

写一个函数,使给定的一个二维数组(3×3)转置,即行列互换

写一个函数&#xff0c;使给定的一个二维数组&#xff08;&#xff13;&#xff13;&#xff09;转置&#xff0c;即行列互换 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 163 Solved: 120[Submit][Status][Web Board]Description 写一个函数&#xff0c;使给定的一个二维…

快速开发系统之前台页面 ---- NO1----登录页面

2019独角兽企业重金招聘Python工程师标准>>> 快速开发系统之前台页面 ---- NO1----登录页面 <% page language"java" contentType"text/html; charsetutf-8"pageEncoding"utf-8"%> <!DOCTYPE html> <html lang"z…

微信公众平台用户分组管理开发文档详解

本文转载至 http://www.5icool.org/a/201402/a4292.html 时间&#xff1a;2014-02-09 来源&#xff1a;互联网 开发者可以使用接口&#xff0c;对公众平台的分组进行查询、创建、修改操作&#xff0c;也可以使用接口在需要时移动用户到某个分组。 创建分组 一个公众账号&…

HP服务器F10 Function Disabled,无法使用F10安装操作系统

HP惠普服务器正确安装操作系统的方法是使用F10引导安装&#xff0c;可以自动安装操作系统&#xff0c;与硬件结合的更好&#xff0c;而且安装完成后&#xff0c;如果是windows操作系统&#xff0c;可以有HP管理页。某次&#xff0c;在使用F10引导安装操作系统的时候&#xff0c…

apt-get for ubuntu 工具简介

先介绍几个和apt-get相关的目录: /var/lib/dpkg/available 文件的内容是软件包的描述信息, 该软件包括当前系统所使用的 Debian 安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包. /var/cache/apt/archives 目录是在用 apt-get install 安装软件时&#xff0c…

【VMCloud云平台】SCAP(一)规划

完成了System Center中的悍将SCO基础篇后&#xff0c;咱们来聊聊SCAP&#xff0c;很多人说SCAP是一个简单的组件&#xff0c;何必单独拿出来聊呢&#xff1f;我倒是认为不然&#xff0c;作为System Center中为数不多的主打Portal类型的组件&#xff08;除开组件的Web Console就…

内核配置与编译——Makefile文件分析

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 &#xff08;1&#xff09;Makefile中刚开始定义了kernel的内核版本号。这个版本号在模块化驱动安装时会需要用到。 &#xff08;2&#xff09;在make编译内核时&#xff0c;可以通过命令行…