uboot学习笔记(1.2点亮LED灯)

这是我写的第一篇博客,开通这个账号前一直在犹豫到底起什么名字,总想起一个逼格高又好记的,但是想来想去也不知道什么好,于是随便起了个Andoubi,很好记,哈哈。写博客的原因主要由两个。第一,近期开始学习Linux嵌入式系统,基于ARM平台,这是最直接的原因。我想通过写博客来做些笔记,一来整理自己的学习思路,二来这也是一个很好的对外交流平台,希望能得到各位大神指点,博客中有问题一定要给我指出哦,谢谢各位!第二,我觉得写博客还是蛮有意义的,算是记录学习过程的点点滴滴吧,希望能坚持下去!废话不说了,开始第一篇博客内容吧,虽然第一篇真的很简单很简单,但好歹动笔了嘛~~————————————————————————————————————————————————————学习资料:TQ210学习板+国嵌教学视频(第二季RAM裸机编程) 学习内容:uboot 中的点亮led————————————————————————————————————————————————————早期的嵌入式开发中,LED是重要的调试工具,可以通过在程序中点亮或者关闭某些LED来对你的代码进行调试。这也是为何uboot 中要使用led的原因。TQ210有LED1、LED2两个LED灯,分别接在GPC0_3和GPC0_4上。电路图如下

要点亮LED,显然要是两个引脚输出高电平。这里涉及GPIO口的设置。涉及的寄存器有GPC0CON和GPC0DAT。查找芯片手册可以找到GPC0CON如下图:

参考芯片手册还知道,GPC0组包含GPC0_0~4共5个IO口,GPC0CON寄存器中前20位的每4位都控制在一个IO口的工作模式,具体设置见上图。这里应将GPC0_3和GPC0_4设置成输出模式。即[15:12]和[19:16]均设置成0001。

设置成输出模式后,还要使它们输出高电平,这里用到了GPC0DAT寄存器,如下图:

该寄存器前5位分别代表GPC0_0~4。当某IO口设置成输入模式时,该寄存器中相应位的值就是此IO口的状态。当某IO口设置成输出模式时,该寄存器中相应位的值就是次IO输出状态。当某IO口设置成其他功能引脚时,若去读取该寄存器中相应位的值,读出来的是位置的。本位需在第3、4位写入1。

完成程序如下:

@专题6程序 LED
#define GPC0CON 0xe0200060  @GPC0CON register adress
#define GPC0DAT 0xe0200064  @GPC0DAT register adress
light_led:
	@控制寄存器设置
	ldr r0, =GPC0CON
	ldr r1, =0x00011555  @GPC0_3 GPC0_4 set output model
	str r1, [r0]
	@数据寄存器设置
	ldr r0, =GPC0DAT
	ldr r1, =0x00000010
	str r1, [r0]
	mov pc, lr
———————————————————————————————————————————————

本文最初任务完成了,说白了是学习如何使用GPIO口,故再来点GPIO口基础知识。主要参考S5PV210芯片数据手册《S5PV210_UM_REV1.1》里的第二章system中第二节GENERAL PURPOSE INPUT/OUTPUT(也就是GPIO缩写)。

uboot学习笔记(1.2点亮LED灯)_第1张图片

如上图,210芯片共有237个多功能的IO端口引脚、142个存储器端口引脚。这些端口分成了34个通用端口组和2个存储器端口组。例如上文提到的GPC0,它就是34个通用端口组中的一组,这组通用端口有5个引脚,它们除了通用IO功能外,充当I2S、PCM、AC97的相关引脚,也就是刚才提到的多功能IO端口引脚。其他几组也类似分析吧。MP1和MP2是什么鬼我也不清楚,应该接存储器的。

210芯片IO引脚的类型可以分为ABC三类,A类是普通IO口,B类是快速IO口,C类是DRAM IO口。如下图

uboot学习笔记(1.2点亮LED灯)_第2张图片

下图是GPIO的一个框架吧。好像说GIPO有两个部分组合而成,分别是alive-part和off-part,怎么翻译我也不知道,这部分没弄懂,各位直接看图吧:

uboot学习笔记(1.2点亮LED灯)_第3张图片

下面是GPIO的寄存器,这是重点!!通过查询芯片手册中的register map(寄存器映射)可以找到每个寄存器的地址、功能描述、R/W属性、复位值。如下图:


其实,每一组IO口都有自己对应的一些寄存器,这在手册中都很容易找到。以本文的GPC0组为例,看下图:


uboot学习笔记(1.2点亮LED灯)_第4张图片

GPC0组IO口有6个控制寄存器,分别是GPC0CON、GPC0DAT。。。GPC0PUDPDN。这几个寄存器到底什么意思?查看刚才说的register map可以找到功能描述。

至于这些寄存器到底怎么用?? 芯片手册中继续往下翻很容易找到每个寄存器的说明。

这里讲一下最简单的用法,复杂的还没用到,以GPC0为例。

只要使用两个寄存器GPC0CON和GPC0DAT,前者设置工作模式(输入还是输出还是。。。),后者负责控制(或读)IO 口的状态(如在输出模式下让某引脚输出高电平,在输入模式下读取某引脚状态)。

先讲到这里,第一篇博客还是花了蛮多时间整理的,虽然全是芯片手册的内容。。。请各位拍砖。。。


你可能感兴趣的:(ARM,linux,S5PV210)