嵌入式学习笔记之GPIO详解

发布者:SHow111time最新更新时间:2017-11-19 来源: 互联网关键字:gpbdat  GPIO  lcd 手机看文章 扫描二维码
随时随地手机看文章

GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。


二、 GPIO之LCD控制编程:


S3C2440有130个I/O端口,分为A-J共9组:GPA、GPB、、、、GPJ,可以通过设置寄存器来确定某个引脚用于输入、输出还是特殊功能。比如:可以设置GPH6作为输入、输出、或者用于串口。


1、通过寄存器来操作GPIO引脚


1)GPxCON寄存器它用于配置引脚的功能端口A与端口B-J在功能上有所不同,GPACON中每一位对应一根引脚(共23根引脚)当某位为0时,对应引脚为输出,此时在GPADAT中相应位写入0或1,让此引脚输出低电平或高电平;当某位被设为1时,对应引脚为地址线或用于地址控制,此时GPADAT保留不用。GPACON通常被设为全1,以便访问外部存储设备端口B-J在寄存器操作上完全相同,PxCon中每两位控制一根引脚,00表示输入,01表示输出,10表示特殊功能,11保留不用。


2)GPxDAT寄存器它用于读写引脚,当引脚被设为输入时,读此寄存器得到对应引脚的电平状态是高还是低;当引脚被设为输出时,写此寄存器相应位可令此引脚输出高低电平。


3)GPxUP寄存器GPxUP,某位为1时,相应引脚无内部上拉电阻;为1时,相应引脚使用内部上拉电阻上拉电阻、下拉电阻的作用在于,当GPIO引脚出于第三态(非高低电平,而是高阻态,即相当于没接芯片)时,它的电平状态由上拉电阻和下拉电阻确定。


  GPIO控制LCD编程实例:

  [cpp] view plain copy print?

  #include

  void delay(int TImes)

  {

  int i;

  for(;TImes》0;TImes--)

  for(i=0;i《400;i++);

  }

  int main(void)

  {

  int i;

  GPBCON =10000000000; /*配置GPB5为输出 (参考图1)*/

  GPBUP =~100000; /*配置GPB5上拉电阻使能(参考图2)*/

  for(i=0;i《10000;i++)

  {

  /* LED1亮 */

  GPBDAT = ~100000; /*GPB5低电平*/

  delay(1000);

  /* LED1灭 */

  GPBDAT = 100000; /*GPB5高电平*/

  delay(1000);

  }

  }


其实上面的例子存在一个非常重要的问题,就是在配置某引脚的时候把其他引脚的值也进行了修改。在实际应用中,有可能其他引脚正在执行某操作,而我们这样进行配置的时候,修改掉其他引脚可能引发不可收拾的后果,那我们应该如何操作呢?


三、 引脚配置的按位“与”和按位“或”操作:


先来看看上述代码用按位“与”和按位“或”操作修改之后的效果再来讲解:


  [cpp] view plain copy print?

  #include

  #define GPF5_out (1《《(5*2))

  #define GPF5_msk (3《《(5*2))

  void delay(int TImes)

  {

  int i;

  for(;times》0;times--)

  for(i=0;i《400;i++);

  }

  int main(void)

  {

  int i;

  GPBCON &=~(GPF5_msk); /*GPB5数据清零*/

  GPFCON |= GPF5_out; /*配置GPB5为输出 (参考图1)*/

  for(i=0;i《10000;i++)

  {

  /* LED1亮 */

  GPBDAT &= ~(1《《5); /*GPB5低电平*/

  delay(1000);

  /* LED1灭 */

  GPBDAT |= (1《《5); /*GPB5高电平*/

  delay(1000);

  }

  }

  先来分析两个宏定义:

  #define GPF5_out (1《《(5*2))

  #define GPF5_msk (3《《(5*2))


分别将GPF5_out定义为1左移10、变为:1000,0000,000,GPF5_msk定义为3(即二进制11)左移10、变为:1100,0000,0000。


语句GPBCON &=~(GPF5_msk): /*GPB5数据清零*/:GPF5_msk进行非操作变成:0011,1111,1111,任何数与其进行与操作,最高两位(的出来的结果均为00xx,xxxx,xxxx,x为未知),这样就可以达到对应位清零效果。


语句GPFCON |= GPF5_out:任何数与GPF5_out(1000,0000,000)进行或操作,最高位必为1,变成1xxx,xxxx,xxx。加上前面未显示出来的0,就可以将该引脚的端口5配置为输入引脚即01。


同理,将GPBDAT配置为低电平可以使其与1左移5的非(100000 -》01111)进行与操作,就得到该端口的低电平,高电平也是一样的道理。

关键字:gpbdat  GPIO  lcd 引用地址:嵌入式学习笔记之GPIO详解

上一篇:奈奎斯特稳定判据的推导和理解
下一篇:突围AI芯片 中国企业寻找新打法

推荐阅读最新更新时间:2024-05-07 17:44

4~20mA环供电4位半LCD显示表
DATEL公司的DMS-40LCD-4/20S是一种适用于4~20mA过程监控应用的4位半LCD(液晶显示)显示表。它具有很低(2.9V)的环路压降、190Ω(最大)环路阻抗。用DIP开关选择量程、补偿和小数点,可有几百个不同的输入/读出组合。它具有两个互不影响的增益(量程)和零调整20匝电位器。整个表的大小为2.17"×0.92"×0.90"(55mm×23mm×23mm),显示为大的、0.04"(10.0mm)高、太阳光下可视的LCD。DMS-40LCD-4/20S框图示于图1,典型的应用连接示于图2。 显示读数与DIP开关设置的关系列于表1中。S1的6个开关位置和S2的2个开关位置设置显示读数。例如,希望显示读数为:
[电源管理]
STM8L51X gpio中断
本文采用官方的库函数接口实现STM8L51X gpio中断 STM8L51X的中断向量入口函数都放在stm8l51x_it.c里面。 不同的中断对应的中断号如下(在stm8l51x_itc.h里面): typedef enum { FLASH_IRQn = (uint8_t)1, /*! Flashinterrupt */ DMA1_CHANNEL0_1_IRQn = (uint8_t)2, /*! DMAChannels 0/1 */ DMA1_CHANNEL2_3_IRQn = (uint8_t)3, /*! DMACha
[单片机]
几个重要的GPIO基础知识
GPIO基础知识 为何每次使用STM32相应的功能,都要是使能一下相应的时钟? 在学51单片机的时候,基本上接触不到I/O方向和外设时钟的概念,I/O想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。这样在初学时的确方便了很多,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。 可是随着电子产品集成度越来越高,功耗和发热越来越严重,芯片厂商非常无奈也在开始想办法避免这个问题,而最直接的思路当然就是用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗,所以
[单片机]
几个重要的<font color='red'>GPIO</font>基础知识
LCD与LED液晶显示屏的区别
一、什么是LCD? LCD是 液晶显示屏 Liquid Crystal Display的全称,主要有TFT、UFB、TFD、STN等几种类型的液晶显示屏无法定位程序输入点于动态链接库上。 笔记本液晶屏常用的是TFT。TFT(Thin Film Transistor)是指薄膜晶体管,每个液晶像素点都是由集成在像素点后面的薄膜晶体管来驱动,从而可以做到高速度、高亮度、高对比度显示屏幕信息,是目前最好的LCD彩色显示设备之一,是现在笔记本电脑和台式机上的主流显示设备。和STN相比,TFT有出色的色彩饱和度,还原能力和更高的对比度,太阳下依然看的非常清楚,但是缺点是比较耗电,而且成本也较高。 二、什么是LED? LED是发光二极管L
[电源管理]
<font color='red'>LCD</font>与LED液晶显示屏的区别
三星开启“提前退休计划”裁减员工,已开始走向衰退?
LCD面板市场不景气,致使三星也开启了员工“提前退休”计划。 据 BusinessKorea消息,三星显示器公司本月推出了一项提前退休计划,以裁减员工数量。 报道称,三星显示器业务部门开始采取提前退休计划,在公司工作5年以上的员工可以申请。此外,该公司还将一些LCD生产线的员工调到OLED生产线。 提前退休补偿包括两年半或三年工资,以及为有孩子的申请人每人额外支付1000万韩元(约合人民币5.9万元)。三星显示器公司还将为申请人提供子女大学毕业前的学费,并考虑提供额外补偿。员工补偿将通过个人退休金账户以退休金的形式发放。 节节败退 三星9月份在华关闭最后一家手机工厂——惠州手机工厂,截止2019年第二季度三星在华销
[嵌入式]
cortex m0 lpc1114 GPIO中断
这一节,介绍如何配置引脚上产生中断来检测引脚上的高低电平变化。 单片机的任何一个IO口,都可以作为中断引脚,所以,LPC1114一共有41个外部中断引脚。 可以设置为低电平引发中断、高电平引发中断、上升沿引发中断、下降沿引发中断、双边沿引发中断,一共5种中断方式。 下面,以下降沿中断为例,进行说明: 新建一个工程,结构如下图所示: 在main.c文件中,加入以下代码: #include LPC11XX.H #define LED1_ON LPC_GPIO1- DATA &= ~(1 0) #define LED1_OFF LPC_GPIO1- DATA |= (1 0) #define LED2_ON LPC_GPIO1-
[单片机]
cortex m0 lpc1114 <font color='red'>GPIO</font>中断
根据STM32F207详解GPIO功能
下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。 01I/O接口电路 带FT的是说明可以容忍5V电压的,I/O电路框图 1.1、普通输入 普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式 浮空输入,不使能上拉电阻,不使能下拉电阻 上拉输入,使能上拉电阻 下拉输入,使能下拉电阻 从上面框图得知,输出缓存是被禁止的 1.2、普通输出 普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式 开漏模式:输出寄存器是0时,激活N-MOS,而输出寄存器是1时,端口保持高阻态(P-MOS不会被使能) 推挽输出:输出寄存器是0时,激活N-MOS,而输出寄存器是
[单片机]
根据STM32F207详解<font color='red'>GPIO</font>功能
【AVR ASF4库函数学习笔记】二、GPIO
平台:Microchip Studio (原Atmel Studio 7) 欣世纪 DMAVR-L Atmega 128A - AU 头文件为port.h 枚举类型 enum port_pull_mode { PORT_PULL_OFF, PORT_PULL_UP, }; enum port_dir { PORT_DIR_IN, PORT_DIR_OUT, PORT_DIR_OFF, }; 函数 X = ABCDEFG static inline bool PORTX_get_pin_level(const uint8_t pin) 读取连接到端口的引脚上的电平 stat
[单片机]
小广播
热门活动
换一批
更多
最新网络通信文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved