2.1.2 GPIO

php中文网
发布: 2016-06-07 15:42:40
原创
1321人浏览过

2.1.2GPIO 一、配置 1.1 方向配置( FIOxDIR ) 方向配置只有在管脚被配置成 GPIO 功能时有效,当管脚被配置成其他功能时,方向配置不被接受 P0.29 和 P0.30 管脚共享 USB 数据线,必须被配置成相同方向! 1.2 输出置位( FIOxSET ) 只有在 GPIO 功能,方向

2.1.2 gpio

 

一、配置

1.1 方向配置(FIOxDIR

方向配置只有在管脚被配置成GPIO功能时有效,当管脚被配置成其他功能时,方向配置不被接受

P0.29P0.30管脚共享USB数据线,必须被配置成相同方向!

1.2 输出置位(FIOxSET

只有在GPIO功能,方向输出时有效。写1将对应管脚输出为1,写0无效。

1.3 输出 清零(FIOxCLR

只有在GPIO功能,方向输出时有效,写1将对应管脚输出为0,写0无效。

1.4 管脚值(FIOxPIN

该寄存器无论管脚配置成任何功能(模拟功能除外)或任何方向时均可被读写。

1.5 端口掩码(FIOxMASK

与上述其他寄存器配合,对端口特定管脚操作。写0允许操作,写1无效。

 

二、GPIO中断

Perl学习手札 chm版
Perl学习手札 chm版

Perl学习手札是台湾perl高手写的一篇文章,特打包为chm版,方便大家阅读。 关于本书 1. 关于Perl 1.1 Perl的历史 1.2 Perl的概念 1.3 特色 1.4 使用Perl的环境 1.5 开始使用 Perl 1.6 你的第一个Perl程序 2. 标量变量(Scalar) 2.1 关于标量 2.1.1 数值 2.1.2 字符串 2.1.3 数字与字符串转换 2.2 使用你自己的变量 2.3 赋值 2.3.1 直接设定 2.3.2 还可以这样 2.4 运算 2.5 变量的输出/输入 2.

Perl学习手札 chm版 0
查看详情 Perl学习手札 chm版

只有P0口和P2口的管脚能生成GPIO中断,GPIO中断与外部中断3共享同一个中断源。

GPIO中断可以被配置成下降沿触发、上升沿触发或双沿触发,不允许电平触发。

当使用GPIO中断时,相应管脚要配置成GPIO功能,方向输入。

2.1 初始化配置

1. 配置GPIO功能,方向输入

2. 配置同时使能触发方式(上升沿、下降沿还是双沿触发)

3. 使能NVIC的外部中断3

代码如下:

 

void Board_Key_Init(void)
{
	// GPIO中断需要配置GPIO管脚方向为输入
	Chip_GPIO_SetPinDIRInput(LPC_GPIO, KEY_PORT_NUM, KEY1_BIT_NUM);
	Chip_GPIO_SetPinDIRInput(LPC_GPIO, KEY_PORT_NUM, KEY2_BIT_NUM);

	// 配置下降沿中断
	Chip_GPIOINT_SetIntFalling(LPC_GPIOINT, KEY_INT_PORT, (1 << KEY1_BIT_NUM)|(1 << KEY2_BIT_NUM));	
	// 清除中断标志位
	Chip_GPIOINT_ClearIntStatus(LPC_GPIOINT,KEY_INT_PORT, (1 << KEY1_BIT_NUM)|(1 << KEY2_BIT_NUM));
	
	// 配置中断优先级

	// 清除中断挂起标志位
	NVIC_ClearPendingIRQ(EINT3_IRQn);
	// 使能中断
	NVIC_EnableIRQ(EINT3_IRQn);
}
登录后复制

 

2.2 使用

中断服务程序使用外部中断3的服务程序。可以先读取IOIntStatus判断哪个端口有中断到来,然后读取IOxIntStatR判断哪个管脚触发了中断。然后执行相应的中断服务程序。最后清除GPIO中断标志位。

代码如下:

 

void EINT3_IRQHandler(void)
{
	uint32_t status = 0;
	
	// TODO: 按键消抖
	
	// 判断中断端口
	//if(Chip_GPIOINT_IsIntPending(LPC_GPIOINT,KEY_INT_PORT))
	{
		// 读取下降沿中断状态
		status = Chip_GPIOINT_GetStatusFalling(LPC_GPIOINT, KEY_INT_PORT);
		
		if(status & (1 << KEY1_BIT_NUM))
		{
			// 清除中断标志位
			Chip_GPIOINT_ClearIntStatus(LPC_GPIOINT, KEY_INT_PORT, 1 << KEY1_BIT_NUM);
			
			if(pKEY1_ISR != 0)		pKEY1_ISR();
		}
		else if(status & (1 << KEY2_BIT_NUM))
		{		
			// 清除中断标志位
			Chip_GPIOINT_ClearIntStatus(LPC_GPIOINT, KEY_INT_PORT, 1 << KEY2_BIT_NUM);
			
			if(pKEY2_ISR != 0)		pKEY2_ISR();
		}
	}
}
登录后复制

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号