IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 通用输入/输出接口 GPIO -> 正文阅读

[嵌入式]通用输入/输出接口 GPIO

GPIO的介绍

GPIO(General Purpose Input/Output),通俗点讲就是一些引脚,可以通过它们向外输出高低电平,或者读入引脚的状态。GPIO 接口技术是众多接口技术中最为简单的一种。

GPIO 接口具有:功率损耗低、布线简单、封装尺寸小、控制简单等优点,故其应用广泛,在嵌入式系统中占有很大的比重。

GPIO 接口通常至少有2个寄存器:通用I/O控制寄存器 和 通用I/O数据寄存器
数据寄存器的各位直接引到芯片外部供外部设备使用,各位上对应的信号是输入还是输出,可通过设置控制寄存器中对应位独立地控制。
除这两种基本寄存器外,有时还有上拉寄存器,通过它可以设置I/O输出模式是高阻态的或带上拉电平输出的或不带上拉电平输出的。

S5PV210的GPIO寄存器

GPIO接口组寄存器由4位来控制,扩展了GPIO引脚的功能。所以S5PV210的GPIO不仅有GPIO的功能,还可复用作其他功能,如串口。

实验用到的寄存器详解

S5PV210的GPIO寄存器非常多,每个接口组有两种类型的控制寄存器,一种工作在正常模式,另一种工作在掉电模式。下面只针对本章实验用到的GPC0进行介绍,其他的GPIO接口用法可依葫芦画瓢。
GPC0:5 in/out port
GPC0共有5个引脚。

GPC0的控制寄存器有:GPC0CON、GPC0DAT、GPC0PUD、GPC0DRV;
GPC0CONPDN、GPC0PUDPDN。前四类工作在正常模式,后两类工作在掉电模式。

(1)GPC0CON寄存器
此寄存器为GPC0引脚的控制寄存器,主要用于配置各引脚的功能。其对应的地址为0xE0200060。
因为GPC0共有5个引脚,且每个引脚需用4位来控制,故GPC0CON共有20位,从右到左依次对应0-4号引脚。
3号引脚通常记作GPC0_3。
0000代表输入,0001代表输出。

GPC0CON
GPC0CON[4][19:16]
GPC0CON[3][15:12]
GPC0CON[2][11:8]
GPC0CON[1][7:4]
GPC0CON[0][3:0]

(2)GPC0DAT寄存器
此寄存器用于决定引脚的输入或输出电平的状态:
当引脚设为输入(0000)时,可出对应引脚的电平状态是高是低;当引脚设为输出(0001)时,可入引脚的电平是高还是低。
其对应的内存地址为0xE0200064。该寄存器是1位控制一个引脚。

(3)GPC0PUD寄存器
当值为0b00时,对应引脚无上拉/下拉电阻;当值为0b01时,有内部下拉电阻;当值为0b10时,内部有上拉电阻;当值为0b11时为保留。
其对应的内存地址为0xE0200068。该寄存器用2位控制一个引脚。

(4)GPC0DRV寄存器
……
(5)GPC0CONPDN寄存器
……
(6)GPC0PUDPDN寄存器
……

实验实例1

实验目的:
利用S5PV210的GPC0_3、GPC0_4这两个GPIO引脚控制2个LED发光二极管,用C语言实现。

1)启动代码start.S

.text
.global _start	//声明一个全局的标号
_start:
	bl main	    //跳转到C函数中执行

halt_loop:
	b halt_loop //死循环,不让程序跑飞

2)循环点亮LED灯

#define GPC0CON	*((volatile unsigned int*)0xE0200060) //寄存器的地址,必须要进行宏定义
#define GPC0DAT	*((volatile unsigned int*)0xE0200064)

#define GPC0_3_out	(1<<(3*4)) //3号引脚[15:12]设为0001 输出
#define GPC0_4_out	(1<<(4*4)) //4号引脚[19:16]设为0001 输出

#define GPC0_3_MASK	(0xF<<(3*4)) //3号引脚[15:12]设为1111
#define GPC0_4_MASK	(0xF<<(4*4)) //4号引脚[19:16]设为1111

void delay(volatile unsigned long dly)
{
	volatile unsigned int t = 0xFFFF;
	while(dly--)
		for(;t>0;t--);		//循环次数必须设置大一点,否则看不出闪烁效果
}

int main()
{
	unsigned long i = (1<<3); //1左移3位,0001变为1000。i用于指示当前亮着的灯。初始化为3号灯亮。
	//&= 碰1不变,碰0清零。~ 取反。| 连接作用。
	GPC0CON &= ~(GPC0_3_MASK|GPC0_4_MASK);  //括号里表示:[19:12]是11111111
	//GPC0CON共有20位,控制5个引脚,这一步将3、4引脚清零,其余引脚保持不变。
	//|= 碰1变1,碰0不变。
	GPC0CON |= (GPC0_3_out|GPC0_4_out); //括号里表示:[19:12]是00010001
	//配置3、4引脚为输出引脚。

	while(1) 
	{
		delay(0x50000);
		GPC0DAT &= ~(0x3<<3);  //0011左移3位得到11000,~得到00111,&=将3、4位清零,即两灯全关。
		if(i==0x08) //0x08用二进制表示为1000,即三号灯。若当前亮的是三号灯,
			i=(1<<4); //0001变到10000指示4号灯
		else
			i=(1<<3); //指示到三号灯
		GPC0DAT |= i; //|=之后3、4位要么是01(3号灯亮),要么是10(4号灯亮)。循环点亮。
	}
	return 0;
}

&= 主要目的是将某几位清零,其余不变
|= 主要目的是将某几位变为1,其余不变

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:15:52  更:2022-04-01 00:17:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:48:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码