嵌入式GPIO接口及操作(一)

  GPIO意思就是通用输入输出,一些引脚可以通过他们输出高低电平,或者通过它们读入引脚的状态。
对GPIO的操作是对所有硬件的操作最基本的技能。
一、通过寄存器来操作GPIO引脚,一个引脚可以用于输入、输出或者其他的特殊功能,那么一定有寄存器来配置这些功能,
对于输入,就是读取引脚的状态,一定可以从寄存器在中读取到引脚的状态;对于输出,也有相应的寄存器,向寄存器中
写入数据使引脚输出高低电平;其他特殊功能,有另外的寄存器来控制它。
对于S3C2440来说,同样的道理,也会有上面所说的寄存器,GPxCON用于配置引脚的功能的(输入、输出或其他功能),
GPxDAT用于读/写引脚数据;另外GPxUP用于是否使用内部上拉电阻。
1、GPxCON寄存器-配置寄存器
对于S3C2440,除了GPACON特殊外(寄存器每一位对应一个引脚),其它都是寄存器的没2位控制一根引脚:00表示输入,
01表示输出、10表示特殊、11保留不用。
2、GPxDAT寄存器
用于读/写引脚:当引脚被设为输入时,从GPxDAT寄存器读取引脚的状态;当引脚被设为输出时,将数据写入GPxDAT寄存器
相应的引脚会输出相应的该低电平。
3、GPxUP寄存器
某位为1时,相应引脚无内部上拉电阻;某位为0时,相应引脚使用上拉电阻。

上拉电阻、下拉电阻的作用:GPIO为第三态时(相当于无外接芯片),引脚的电平状态有上拉电阻、下拉电阻确定。

二、在开发板上实现LED亮灭及按键控制LED
目标:通过读写GPIO寄存器来驱动LED、获取按键状态。
第一个例子使用汇编编写一个简单的驱动LED的程序,点亮LED首先看原理图是怎么接的,拿到原理图手册

可以看到led被点亮开发板gpio需要低电平,找到对应的开发板gpio。一目了然GPF4为0时LED1亮,1时灭,但是一个GPIO管脚可以是输出也可以是输入,所以,要配置GPIO的功能。

点亮led:
1、配置gpio的功能为输出,2、设置gpio输出高\低
配置输出功能,在数据手册上可以看到一个寄存器GPFCON,GPF4对应的位【9:8】做出相应的配置,管脚的复用
设置寄存器在数据手册上可以看到一个寄存器GPFDAT,【7:0】,当是输出功能时一位对应功能寄存器的一个引脚。这样4位就对应GPF4了。
GPFCON地址0x56000050  GPFDAT地址0x56000054
下面是汇编写的点亮一个LED程序:

led_on.S

.global _start
_start:
            LDR R0,= 0x56000050  @R0为GPFCON寄存器,此寄存器用于选择引脚的功能
            MOV R1,#0x00000100
            STR R1,[R0] @将数值写进寄存器里也就是配置了引脚的相应的功能
            LDR R0,= 0x56000054 @R0为GPFDAT寄存器,此寄存器用于设置相应管脚的值,高低电平
            MOV R1,#0x00000000   @设置相应管脚输出0电平,可让LED1灯亮
            STR R1,[R0] @将数值写进寄存器里也就是设置了引脚的相应的输出电平
MAIN_LOOP:
                    B    MAIN_LOOP     @循环

下面是相应的Makefile

led_on.bin : led_on.S
    arm-linux-gcc -g -c -o led_on.o led_on.S
    arm-linux-ld -Ttext 0x0000000  -g led_on.o -o led_on.elf
    arm-linux-objcopy -O binary -S led_on.elf led_on.bin
clean:
    rm -f led_on.bin led_on.elf *.o

将生成的bin文件烧到开发板即可点亮LED。

时间: 2024-10-10 18:12:48

嵌入式GPIO接口及操作(一)的相关文章

【智能家居】Raspberry Pi GPIO接口篇

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能. 本篇没啥可讲的,主要是贴图!但本文很重要第一是为后面文章做铺垫,第二你会经常来查GPIO接口!务必收藏好 :) 一.Raspberry Pi 全家福 我很佩服国外这个小伙伴,收集的这么全,居然还要出钱收购唯一

第13章 GPIO—位带操作

第13章     GPIO-位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx 中文参考手册>存储器和总线构架章节.GPIO章节,<Cortex?-M4内核编程手册>2.2.5 Bit-banding.学习本章时,配套这些参考资料学习效果会更佳. 13.1 位带简介 位操作就是可以单独的对一个比特位读和写,这个在51单片机

微信公众号接口相关操作

<?php /** * 微信公众号接口相关操作 */ class WeChat { private $_appid; private $_appsecret; private $_token; public function __construct($_appid,$_appsecret,$_token) { $this->_appid=$_appid; $this->_appsecret=$_appsecret; $this->_token=$_token; } //获得微信通信

学习嵌入式-迅为4412开发板的GPIO是怎么操作的?

Exynos4412所有的GPIO都有固定的地址,为了方便操作这些GPIO,Linux内核在gpio-exynos4.h里面定义了一些GPIO的宏 详情了解:http://topeetboard.com 更多了解:https://arm-board.taobao.com 例如: #define EXYNOS4_GPA0(_nr) (EXYNOS4_GPIO_A0_START + (_nr)) #define EXYNOS4_GPA1(_nr) (EXYNOS4_GPIO_A1_START + (

GPIO接口开发

本文是在学习 麦子学院 的嵌入式课程之后整理的一篇关于GPIO的笔记.内容比较基础.不过用老师的话来讲,思路很重要.学习应该是要触类旁通.举一反三的. 实验环境 课程中老师使用的是 友善之臂的 s5pv210 开发板.而我手头是一块 s3c2440 开发板.本文的程序都是基于 s3c2440 编写.交叉工具链使用的是我自己制作的ARM-Linux-gcc工具链.可以参考这里. 另外烧录工具使用的是友善之臂提供的 minitools. 开发流程 本人的学习经历算是比较奇葩.学习过数字电路基础,但并

(10)用树莓派B+的GPIO接口控制发光二极管闪烁

从本篇开始,将逐步学习和分享树莓派GPIO相关操作,由于本人也是这方面的小白,关于接口.跳线.面包板.电流电压之类的叙述,可能有不准确的地方,还请大家仅将本系列文章作为入门读物. 本文需要的一些元件:母对公杜邦线N条,面包板1块,暂不需要面包板外接电源,发光二极管(电压2V-3.3V),电阻约400欧1个. 必须要了解的知识:根据树莓派官方文档的描述(见https://www.raspberrypi.org/documentation/hardware/raspberrypi/power/REA

GPIO接口及点亮第一个LED灯

一.GIPIO介绍 General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C.SMBus或SPI接口简化了I/O口的扩展.当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能. 1.GPIO的优点 低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA). 集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作.

第五章GPIO接口

5.1 GPIO硬件介绍 可以不通过他们输出高低电平或者通过它们读入应交的状态 S3C2410有117个I/O端口,分为A~H共8组:GPA.GPB....GPH S3C2440有130个I/O端口,分为A~H共9组:GPA.GPB....GPJ 5.1.1通过寄存器来操作GPIO引脚 GPxCON用于选择引脚的功能,GPxDAT用于读/写引脚数据,GPxUP用于确定是否使用内部上拉电阻.x为ABCD...H/J,没有GPAUP寄存器 (1)GPxCON寄存器 GPACON中每一位对应一根引脚(

Project Web Server PSI 常用接口一些操作

对Project Web Server进行二次,每天都把自己折腾到12点以后才休息,到处都是坑,研究那些烦人的PSI,国内根本查不到PSI相关的资料,对照API文档一点点谷歌资料,全部英文资料,开发终于完成了,总结了个人一些PSI使用心得 尽量能不用PSI就别用,涉及到查询数据直接用SQL查询数据库,调用PSI速度太慢,不稳定,还有烦人的权限问题,不同人对PSI接口权限不一样,有时候会出现一些权限错误 只要涉及到修改数据和添加数据就还是要用PSI的接口,因为Project Web Server2