[ARM笔记]GPIO硬件介绍

发布者:TechVoyager最新更新时间:2016-11-22 来源: eefocus关键字:ARM  GPIO  硬件介绍 手机看文章 扫描二维码
随时随地手机看文章

       GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。

       S3C2410共有117个I/O端口,共分为A~H共8组:GPA、GPB、...、GPH。S3C2440共有130个I/O端口,分为A~J共9组:GPA、GPB、...、GPJ。可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。

 

1.1 通过寄存器来操作GPIO引脚

       GPxCON用于选择引脚功能,GPxDAT用于读/写引脚数据;另外,GPxUP用于确定是否使用内部上拉电阻。x为B、...、 H/J,没有GPAUP寄存器。

1.1.1 GPxCON寄存器

       从寄存器的名字可以看出,它用于配置(Configure)-选择引脚功能。

       PORTA与PORTB~PORT H/J在功能选择方面有所不同,GPACON中每一位对应一根引脚(共23根引脚)。当某位被设为0时,相应引脚为输出引脚,此时我们可以在GPADAT中相应位写入0或是1让此引脚为低电平或高电平;当某位被设为1时,相应引脚为地址线或用于地址控制,此时GPADAT无用。一般而言,GPACON通常被设为全1,以便访问外部存储器件。

       PORT B~ PORT H/J在寄存器操作方面完全相同。GPxCON中每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保留不用。

 

1.1.2 GPxDAT寄存器

       GPxDAT用于读/写引脚;当引脚被设为输入时,读此寄存器可知相应引脚的电平状态是高还是低;当引脚被设为输出时,写此寄存器相应位可以令此引脚输出高电平或是低电平。

 

1.1.3 GPxUP寄存器

       GPxUP:某位为1时,相应引脚无内部上拉电阻;为0时,相应引脚使用内部上拉电阻。

       上拉电阻的作用在于:当GPIO引脚处于第三态(即不是输出高电平,也不是输出低电平,而是呈高阻态,即相当于没接芯片)时,它的电平状态由上拉电阻、下拉电阻确定。

 

1.2 访问硬件

1.2.1 访问单个引脚

       单个引脚的操作无外乎3种:输出高低电平、检测引脚状态、中断。对某个引脚的操作一般通过读、写寄存器来完成。

       访问这些寄存器是通过软件来读写它们的地址。比如:S3C2410和S3C2440的GPBCON、GPBDAT寄存器地址都是0x56000010、0x56000014,可以通过如下的指令让GPB5输出低电平。

#define GPBCON (*volatile unsigned long *)0x56000010)   //long=int 4字节;char 1字节;short 2字节

#define GPBDAT (*volatile unsigned long *)0x56000014)

#define GPB5_out (1<<(582))

GPBCON = GPB5_out;

GPBDAT &= ~(1<<5);

 

1.2.2 以总线方式访问硬件

       并非只能通过寄存器才能发出硬件信号,实际上通过访问总线的方式控制硬件更为常见。如下图所示S3C2410/S3C2440与NOR Flash的连线图,读写操作都是16位为单位。

       图中缓冲器的作用是以提搞驱动能力、隔离前后级信号。NOR Flash(AM29LV800BB)的片选信号使用nGCS0信号,当CPU发出的地址信号处于0x00000000~0x07FFFFFF之间时,nGCS0信号有效(为低电平),于是NOR Flash被选中。这时,CPU发出的地址信号传到NOR Flash;进行写操作时,nWE信号为低,数据信号从CPU发给NOR Flash;进行读操作时,nWE信号为高,数据信号从NOR Flash发给CPU。

       ADDR1~ADDR20 ------------------>   >--------------------A0~A19

       DATA0~DATA15 <----------------->   <------------------->D0~D15

               nOE  ------------------>   -------------------->nOE

               nWE  ------------------>   -------------------->nWE

              nGCS0 ------------------>   -------------------->nCE

         S3C2410/S3C2440              缓冲器                   NOR Flash(AM29LV800BB)

 

       软件如何发起写操作呢,下面有几个例子的代码进行讲解。

1)地址对齐的16位读操作

unsigned short *pwAddr = (unsigned short *)0x2;

unsigned short uwVal;

uwVal = *pwAddr;

       上述代码会向NOR Flash发起读操作:CPU发出的读地址为0x2,则地址总线ADDR1~ADDR20、A0~A19的信号都是1、0...、0(CPU的ADDR0为0,不过ADDR0没有接到NOR Flash上)。NOR Flash的地址就是0x1,NOR Flash在稍后的时间里将地址上的16位数据取出,并通过数据总线D0~D15发给CPU。

 

2)地址位不对齐的16位读操作

unsigned short *pwAddr = (unsigned short *)0x1;

unsigned short uwVal;

uwVal = *pwAddr;

       由于地址是0x1,不是2对齐的,但是BANK0的位宽被设为16,这将导致异常。我们可以设置异常处理函数来处理这种情况。在异常处理函数中,使用0x0、0x2发起两次读操作,然后将两个结果组合起来:使用地址0x0的两字节数据D0、D1;再使用地址0x02读到D2、D3;最后,D1、D2组合成一个16位的数字返回给wVal。如果没有地址不对齐的异常处理函数,那么上述代码将会出错。如果某个BANK的位宽被设为n,访问此BANK时,在总线上永远只会看到地址对齐的n位操作。

 

3)8位读操作

unsigned char *pwAddr = (unsigned char *)0x6;

unsigned char ucVal;

ucVal = *pwAddr;

       CPU首先使用地址0x6对NOR Flsh发起16位的读操作,得到两个字节的数据,假设为D0、D1;然后将D0取出赋值给变量ucVal。在读操作期间,地址总线ADDR1~ADDR20、A0~A19的信号都是1、1、0、...、0(CPU的ADDR0为0,不过ADDR0没有接到NOR Flash上)。CPU会自动丢弃D1。

 

4)32位读操作

unsigned int *pwAddr = (unsigned int *)0x6;

unsigned int udwVal;

udwVal = *pwAddr;

       CPU首先使用地址0x6对NOR Flsh发起16位的读操作,得到两个字节的数据,假设为D0、D1;再使用地址0x8发起读操作,得到两字节的数据,假设为D2、D3;最后将这4个数据组合后赋给变量udwVal。

 

5)16位写操作

unsigned short *pwAddr = (unsigned short *)0x6;

*pwAddr = 0x1234;

       由于NOR Flash的特性,使得NOR Flash的写操作比较复杂——比如要先发出特定的地址信号通知NOR Flash准备接收数据,然后才发出数据等。不过,其总线上的电信号与软件指令的关系与读操作类似,只是数据的传输方向相反。


关键字:ARM  GPIO  硬件介绍 引用地址:[ARM笔记]GPIO硬件介绍

上一篇:[ARM笔记]存储控制器及其访问外设的原理
下一篇:[ARM应用]按键中断驱动实例

推荐阅读最新更新时间:2024-03-16 15:21

ARM架构如何一步步站上主流地位
   x86与ARM,是目前两大处理器主流架构,前者大家熟悉不过。在PC世代,x86因是最佳效能价格比(C/P Ratio,Cost/Performance,大陆称为性价比)的处理器,因而相继击败其他架构的处理器,包含HP的PA-RISC、SGI的MIPS、DEC的Alpha,Sun的SPARC、IBM的PowerPC等,甚至也把IBM POWER与Intel自家的IA-64逼到极小空间。 ARM新架构分成A、R、M三大类型 而ARM近年来也家喻户晓,它是以省电为优先的架构设计,是最佳每瓦效能比(Per Watt Performance)处理器,近年来x86与ARM开始短兵相接,x86从2008年Atom(原子,32/64位
[手机便携]
分析称英特尔出于生存考虑将被迫收购ARM
据媒体报道,著名科技调查公司Information Network公司总裁罗伯特·卡斯蒂拉诺(Robert N. Castellano)博士在Thestreet网站发表文章认为,英特尔应该收购ARM,并提出2大理由:ARM不但垄断了智能手机市场,而且在上网本和智能本市场对英特尔的威胁日益增大。以下是文章的主要内容:   英特尔将别无选择,只有收购ARM。理由一,ARM控制了智能手机芯片市场,而英特尔无法在该市场打败ARM。ARM首席执行官沃伦·伊斯特(Warren East)在一次采访时表示:“我确信英特尔的凌动处理器将进入手机市场,这是不可避免的,但他们也要手脚并用地努力才行,这将是一点一点地进行,不会出现戏剧性的变化。
[嵌入式]
基于ARM Cortex-A8 MCU的双屏异像显示应用
就ARM内核的芯片来说,在其内核达到Cotex-A8级别,GPU达到1080P级别的时候,实现同步双显已经相对比较轻松,具有非常好的用户体验。目前已经基本上成为高端智能手机或者平板电脑的标配。 随着ARM Cotex-A8与Android的组合越来越强大,其从智能移动终端如智能手机,平板电脑等消费电子领域渗透到各行各业的趋势愈发明显。但受制于芯片体系结构和操作系统构架的设计,在Android平台上通常只能实现同步双屏的一些应用,如下图基于智能手机的显示器应用或者基于平板电脑的投影仪应用: 手机接HDMI电视机 平板电脑接VGA投影仪 在这样的应用中,大屏主要作为小屏的延伸,其目的是让视频或显示界面的可视区域变大,以便让观看的
[电源管理]
基于<font color='red'>ARM</font> Cortex-A8 MCU的双屏异像显示应用
LPC2478的GPIO使用详解
GPIO使用 LPC2478的GPIO是不能断开时钟的,上电就连接.处理GPIO主要就下面几步 1. 设置为普通IO模式 2. 设置输入输出方向 3. 设置值 以下寄存器 用于选择管脚是基本输入输出还是复用功能 设置管脚是否具有上拉电阻 其中,LPC的管脚分为两种,一种是传统GPIO还有一种是高速GPIO,其实严格来说,所有的管脚都是高速管脚,但是为了兼容之前的软件和程序,可以使用之前的访问模式访问GPIO,说明如下 设置管脚方向 这个寄存器只能写1有效,写1将对应管脚高电平,写0不会将对应管脚低电平 需要将对应管脚低电平靠这个寄存器,但是这个寄存器不能控制管脚高电平
[单片机]
LPC2478的<font color='red'>GPIO</font>使用详解
ARM CPU上广泛采用的三种嵌入式操作系统浅析
嵌入式操作系统是ARMCPU的软件基础,从8位/16位单片机发展到以ARMCPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。更重要的是嵌入式操作系统对应用程序可以起到屏蔽的作用,使应用程序员面向操作系统级开发应用软件,并易于在不同的ARM核的嵌入式处理器上移植。 嵌入式操作系统都具有一定的实时性,易于裁剪和伸缩,可以适合于从ARM7到Xscale各种ARMCPU和各种档次的应用,嵌入式操作系统可以使用广泛流行的ARM开发工具,如ARM公司的SDT/ADS和RealView等,也可以使用开发软件,如GCC/GDB、KDE或Eclipe开发环境,市场上还有专用的开发工
[单片机]
在<font color='red'>ARM</font> CPU上广泛采用的三种嵌入式操作系统浅析
net-snmp移植到arm
关于net-snmp的移植,是基于静态编译的,动态的没有做成功,在arm上的移植过程大致如下: 如果没有涉及到扩展agent,则蓝色字体不需要理会。 1.将源码包另找一个路径放下,解压 tar -xzvf net-snmp-5.4.1.tar.gz, 若想扩展agent,则可以将此模块的.c和.h文件先放到net-snmp-5.4.4/agent/mibgroup下一起配置编译; 例如我这里想用代理读写encoder模块,那么先将写好的encoder源文件复制到net-snmp-5.4.4/agent/mibgroup路径下 ; 2.CC=arm-linux-gcc ./configure --prefix=/home/a
[单片机]
ARM 中断处理过程
1.寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。 每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。 由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的 当中断产生的时候,把CPSR保存在SPSR是自动完成的。
[单片机]
基于嵌入式ARM Linux步进电机驱动程序的设计
0 引言 随着激光雕刻机的不断发展和改进,嵌入式Linux的激光雕刻机比CNC(Computer numerical control)激光雕刻的优势不断显现,它大幅度提高了处理能力,方便了设计开发,节约了成本,是未来经济型激光雕刻机发展的趋势。而嵌入式ARM(Advanced RISC Machines)Linux步进电机驱动是实现激光雕刻的核心。 嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素较多,实现过程较为复杂。本文以Samsung公司的友善之譬S3C2440开发板为例,探讨如何使用嵌入式Linux开发字符设备驱动程序来驱动步进
[单片机]
基于嵌入式<font color='red'>ARM</font> Linux步进电机驱动程序的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved