第五章-GPIO接口

来源:互联网 发布:mac系统重装教程 u盘 编辑:程序博客网 时间:2024/05/16 15:48

1) GPIO硬件介绍

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

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

   GPIO的操作是所有硬件操作的基础。

2)既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能:

   对于输入,一定可以通过读取某个寄存器来确定引脚的电平是高还是低

   对于输出,一定可以通过写入某个寄存器来主这个引脚输出高电平或是低电平

   对于某些特殊功能,则有另外的寄存器来控制它

   

   对于这几组GPIO引脚,它们的寄存器是相似的:GPxCON用于选择引脚功能

                          GPxDAT用于读/写引脚数据

                          GPxUP用于确定是否使用内部上拉电阻

   其中x 为A、B、....、H/J,没有GPAUP寄存器。

   GPxCON寄存器:用于配置即选择引脚功能,每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保留

   注:PORTA与PORTB~PORTH/J在功能选择方面有所不同,GPACON中每一位对应一根引脚(共23根引脚),当某位被设为0时,相应引脚为输出引脚,此时我们可以在GPADAT中相应位写入0或1让此引脚输出低电平或高电平

   当某位被设为1时,相应引脚为地址线或用于地址控制,此时GPADAT无用

           GPxDAT寄存器:用于读/写引脚,当引脚被设为输入时,读此寄存器可知相应引脚的电平状态是高还是低(低电平为0、高电平为1)

                                                                         当引脚被设为输出时,写此寄存器相应位可令此引脚输出高电平或低电平

            GPxUP寄存器:某位为1时,相应引脚无内部上拉电阻

                                          为0时,相应引脚使用内部上拉电阻

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

 

怎么访问硬件设备

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

 

1)寄存器访问方式:

示例1:在S3C2440处理器上,对GPB5号引脚输出低电平,点亮LED1(S3C2440的GPBCON、GPBDAT、寄存器地址都是0x56000010、0x56000014)

LED与按键连线图:

对应C代码:

#define GPBCON  (*(volatile unsigned long *)0x56000010)  /*GPBCON寄存器地址*/#define GPBDAT   (*(volatile unsigned long *)0x56000014)  /*GPBDAT寄存器地址*/#define GPB5_out  (1 << (5 * 2))  /*定位到GPB5号引脚,因为GPBCON寄存器每两位控制一个引脚,GPB5即偏移5*2位*/GPBCON = GPB5_out;     /*设置GPB5号引脚为输出*/GPBDAT &= ~(1 << 5);   /*设置GPB5号引脚为低电平(0)*/

 

汇编代码:

.text.global _start_start:         LDR   R0, =0x56000010    @设置R0为GPBCON寄存器         MOV   R1, # 0x00000400         STR   R1, [R0]           @将R0寄存器的值置为R1,即设置GPB5引脚为输出         LDR   R0, =0x56000014    @将R0设置为GPBDAT寄存器         MOV   R1, #0x00000000         STR   R1, [R0]MAIN_LOOP:         B    MAIN_LOOP


 


2)总线访问方式:

 示例2:通过总线对S3C2440的nor flash空间进行读操作S3C2440与NOR Flash连接线图:

 

               图说明:1、NOR Flash地址空间:0x00000000~0x07FFFFFF                 

                               2、缓冲器的作用为提高驱动能力、隔离前后级信号                 

                               3、片选信号为uGCS0信号

代码:

unsigned short *pwAddr = (unsigned short *)0x2;unsigned short wVal;wVal = *pwAdd;   /*这段代码CPU向NOR Flash发起读操作,NOR Flash收到地址后,从接收到的地址上取出数据,再通过数据总线D0~D15发给CPU*/


示例3:对NOR Flash作写操作

代码:

unsigned short *pwAddr = (unsigned short *)0x2;*pwAddr = 10;  /*这段代码CPU向NOR Flash发起写操作,NOR Flash确定地址后,CPU将数据从数据总线传给NOR Flash,NOR Flash将值写在地址上*/

地址总线D0~D15传送信号为:0101 0000 0000 0000 (低位在低地址) 1234=1010

 

 

 

 

 

 

原创粉丝点击