新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正
嵌入式学习条记之GPIO
GPIO,意为通用输入/输出端口,根据它们可以读取端口的高低电平或者读入引脚状态。S3C2410芯片共有117个I/O端口,共分为8组:A~H。分别为:GPA、GPB…GPH。端口的输入输出功能可以通过设定特定的端口值来肯定。
控制s3c2410的GPIO端口的寄存器有3类,分别是GPxCON、GPxDAT、GPxUP (x=A~H):
GPxCON:GPIO控制寄存器,可以设置选定GPIO口的输入输出方式和功能。GPA组的23个端口比拟特别,只能是输出方式。GPACON的每一位对应一个引脚,当某位为0时,对应引脚为输出端口,否则为复用功能。
GPBGPH端口的GPxCON寄存器使用方法分歧,每两位控制一个引脚,00时为输入I/O口,01时为输出I/O口,10时为复用功能,11保留。
GPxDAT:此引脚用于读写引脚的状态,即端口数据。当引脚配置为输出时,给该寄存器某位写1,则对应引脚输出高电平,写0输出低电平。当引脚配置为输出时,读该寄存器可以失掉端口电平状态。
GPxUP:该寄存器可以设置引脚是否使用上拉电阻,某位为0时对应引脚使用上拉电阻,某位为1时不使用上拉电阻。注意:GPA组没有GPxUP寄存器,即没有上拉电阻。
1、作甚上拉电阻、下拉电阻:
上拉电阻 下拉电阻
上拉电阻是针对NPN来说的,下拉电阻是针对PNP来说的!不管是上拉电阻还是下拉电阻都是为了使集电极有肯定的电位!
比如对NPN来说,当不用上拉电阻的时候,若基集为正,则导通,集电极为0。但当基集为0,则截止,此时集电极是悬空的,电位没法肯定!一旦加了上拉电阻,当导通的时候,集电极为0,当截止的时候,集电极为正。
PNP也一样,导通的时候集电极为正,截止的时候集电极为0。
2、GPIO端口配置方法:
单个引脚的操纵无非就三种情况:输出高低电平,检测引脚状态,中断。对引脚的操纵一般是通过特定寄存器的配置完成。
如图,根据LED 的硬件电路图,实现点亮LED:
#define GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) #define GPF4_out (1<<(4*2)) #define GPF5_out (1<<(5*2)) #define GPF6_out (1<<(6*2)) #define GPF7_out (1<<(7*2)) void wait(volatile unsigned long dly) { for(; dly > 0; dly--); } int main(void) { unsigned long i = 0; GPFCON = GPF4_out|GPF5_out|GPF6_out|GPF7_out; // 将LED1-4对应的GPF4/5/6/7三个引脚设为输出 while(1){ wait(30000); GPFDAT = (~(i<<4)); // 根据i的值,点亮LED1~4 if(++i == 8) i = 0; } return 0; }
文章结束给大家分享下程序员的一些笑话语录: 一条狗在街上闲逛,看见橱窗里一张告示:「招聘程序员。会编程,有团队精神,至少精通两种语言。均等机会。」
那条狗就进去申请,但是被拒绝了。
「我不能雇一条狗在公司里做事。」经理说。
狗不服气,指着告示上「均等机会」几字抗议。
经理没法,叹了口气,不屑地问道:「你会编程吗?」
那条狗默默地走到电脑前,编了个程序,运作准确。
「你有团队精神吗?」经理问。
那条狗掉头看了看门外,一大群野狗在外面虎视耽耽。
「我真的不能雇狗做这份工作。」经理气急败坏地说。
「就算会编程、有团队精神,但是我需要的雇员至少要能精通两种语言。」
那条狗抬头看着经理说:「喵-噢。」
--------------------------------- 原创文章 By
引脚和端口
---------------------------------