当前位置:首页 > 单片机 > 单片机
[导读]S3C2440包含有130多个通用的GPIO,同时这些端口也拥有一些复用功能(如ADC输入),有部分端口只能输入,有部分端口只能输出,今天我们来看看如何设置一个GPIO的输出电平以及如何获取一个端口的GPIO电平对GPIO进行操作分为以

S3C2440包含有130多个通用的GPIO,同时这些端口也拥有一些复用功能(如ADC输入),有部分端口只能输入,有部分端口只能输出,今天我们来看看如何设置一个GPIO的输出电平以及如何获取一个端口的GPIO电平

对GPIO进行操作分为以下几步

1.功能设置,GPXCON寄存器,针对于2440addr.h,分别为

rGPACON,rGPBCON,rGPCCON,rGPDCON,rGPECON,rGPFCON,rGPGCON,rGPHCON,rGPJCON

通过设置不同的值来选着不同的功能,输入,输出,复用,等

2.数据读写,GPXDAT寄存器,在输入模式下,dat寄存器相应位代表相应引脚的当前电平,在输出模式下, dat寄存器相应位代想要设置的相应电平

(注,2440addr.h中的寄存器前面都有一个小写r开头).

3.内部上拉寄存器GPXUP寄存器,可以设置相应位的内部上拉是否打开

设置好这三位之后,GPIO就可以正常操作了

以下是GPIO输出LED,使用GPB5-GPB8

Led.c

#include"led.h"voidLedInit(void){//GPB01为输出模式,先清零寄存器为00rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));//10b512b614b716b8//设置相应寄存器为01rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16));//禁止上拉,因为是输出rGPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//设置初始化为1led处于熄灭状态rGPBDAT|=((1<<5)|(1<<6)|(1<<7)|(1<<8));}voidLedSet(u8ch,u8value){switch(ch){case0:if(value)rGPBDAT|=(1<<5);elserGPBDAT&=~(1<<5);break;case1:if(value)rGPBDAT|=(1<<6);elserGPBDAT&=~(1<<6);break;case2:if(value)rGPBDAT|=(1<<7);elserGPBDAT&=~(1<<7);break;case3:if(value)rGPBDAT|=(1<<8);elserGPBDAT&=~(1<<8);break;}}


Led.h

#ifndef__LED_H#define__LED_H#include"2440addr.h"#include"def.h"voidLedInit(void);voidLedSet(u8ch,u8value);#endif


以下是GPIO输入按键检测,使用GPIOF 0 1 2 4

Key.c

#include"key.h"u8keyValue=0;voidKeyInit(void){rGPFCON&=~((3<<2)|(3<<8)|(3<<4)|(3<<0));//对GPFCON[10:17]清零rGPFUP&=~((1<<1)|(1<<4)|(1<<2)|(1<<0));//设置上拉功能rGPFDAT|=(1<<1)|(1<<4)|(1<<2)|(1<<0);//设定初始值}//按键按下,相关端口为0,没有按键按下时,不会自动清零,会保持最后一次的状态,需要用户自己去清零u8GetKeyValue(void){u32temp=rGPFDAT;if(!(temp&(1<<0)))//如果相关端口为0{keyValue=KEY_UP;returnkeyValue;}if(!(temp&(1<<1))){keyValue=KEY_DOWN;returnkeyValue;}if(!(temp&(1<<2))){keyValue=KEY_LEFT;returnkeyValue;}if(!(temp&(1<<4))){keyValue=KEY_RIGHT;returnkeyValue;}return0;}


Key.h

#ifndef__KEY_H#define__KEY_H#include"2440addr.h"#include"def.h"//按键全部上拉//key1对应F1//key2对应F4//key3对应F2//key4对应F0#defineKEY_UP1#defineKEY_DOWN2#defineKEY_LEFT3#defineKEY_RIGHT4externu8keyValue;voidKeyInit(void);u8GetKeyValue(void);#endif


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

  本文根据网络视频采集的需要,将网络传输与视频采集相结合,设计了以S3C2440为核心的USB摄像头视频采集和嵌入式Linux系统下的视频服务器,从而实现了远程网络视频信息采集。   

关键字: s3c2440 视频采集 usb摄像头

         之前在提起自动化或是智能化时,人们会不自觉的想到工业生产,这是因为自动化这个字眼进入中国,确实是以工业

关键字: 嵌入式 Linux s3c2440 视频采集

  引言   随着科技的不断发展,以数据业务为主的固定宽带无线接入技术发展已经很成熟,而移动宽带无线通信技术还并没有得到广泛的应用。由于移动宽带无线接入系统需要解决带宽、移动性和覆盖范围

关键字: IPv6 s3c2440 x86 架构

  1 引言   人们生活水平的提高以及科技的进步,特别是计算机技术、网络技术和通信技术的发展,智能家居将慢慢成为未来家居生活的发展方向。1984年在美国诞生了世界上第一座智能家居建筑,

关键字: boa nrf24l01 s3c2440 智能家居

我们知道2440开发流程为:移植uboot--》移植内核---》挂接根文件系统。我们移植完内核需要挂接根文件系统,那么首先我们必须拥有根文件系统。如何来制作我们的根文件系统呢?第一步:在linux下建

关键字: s3c2440 根文件系统

1.TQ2440u-boot-1.1.6修改文件所在的路径是u-boot-1.1.6includeconfigsEmbedSky.h将#defineLCD_TFTxxx(LCD类型)W353.5寸TFT4802724.3...

关键字: s3c2440 lcd参数

2440的晶振频率为12MHZ,有两个PLL:MPLL和UPLL,其中MPLL产生FCLK、HCLK、PCLK;UPLL产生UCLK。FCLK为ARM核提供时钟,HCLK为AHB总线时钟,PCLK为APB总线时钟,UCL...

关键字: s3c2440 时钟初始化

开发板:TQ2440内核:Linux 2.6.32PC OS:Ubuntu 11.041.配置内核打开I2C功能:打开杂项设备,该选项打开后,EEPROM也就打开了。2. 修改代码修改文件: linux/arch/arm...

关键字: at24c02 eeprom s3c2440 移植 linux驱动

在分析ARM-Linux s3c2440中UART的时有必要先了解 s3c2440A中串口的硬件知识。硬件篇:S3c2440A串口提供三个独立的异步串行通信I/O端口(asynchronousserial I/O por...

关键字: ARM Linux s3c2440 uart

s3c2440 cpu的默认工作主频有两种12MHz和16.9344MHz,也就是我们的晶振的频率,但一般12MHz的晶振用的比较多,Fin就是指我们接的晶振频率。大家都知道s3c2440上电正常工作后频率是远远大于12...

关键字: s3c2440 时钟
关闭