打印
[学习笔记]

AC781X GPIO模块应用笔记

[复制链接]
5211|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 TechHolder 于 2019-8-8 23:13 编辑


AC781x GPIO模块应用笔记


1 GPIO特性
   1. AC781x系列最多有68个GPIO可供选用(boot脚也可用作GPIO)
   2. GPIO的驱动能力可配置:4mA,8mA,12mA,16mA
   3. 输入模式:浮空输入,上拉/下拉输入,模拟输入(配置为ADC通道)
   4. 输出模式:推挽输出,开漏输出(配置为I2C功能)
   5. 能够按位进行读写
   6. 快速切换,每2个时钟周期切换一次
   7. 引脚高度灵活复用,每隔IO可提供多种功能选择
   8. 可配置边沿触发外部中断(上升沿,下降沿,both)
   9. 低功耗模式能够唤醒MCU


1.2 GPIO操作模式
1.2.1 bit-band

AC781x提供快速IO桥对CRC和GPIO进行高速访问,GPIO快速访问地址:0x20080000 ~ 0x20080FFF,bit-band能够通过快速地址对GIO进行访问,控制GPIO操作。

1.2.2 输入输出
可将引脚配置为通用输入输出功能,用来识别或输出高低电平,GPIOx_CR寄存器控制输入输出方向,GPIOx_IDR与GPIOx_ODR分别是输入模式与输出模式下的数据寄存器。

备注:
1.为什么某些引脚不能输出高电平或低电平,或输入功能无效?
某些引脚上电后具有特定功能,如JTAG接口引脚与BOOT脚,需要使用多路复用将其复用到GPIO,然后才能正常使用其GPIO功能;使用GPIOx_PINMUX选择复用功能,对应库函数是GPIO_SetFunc()。

1.2.3 外部中断
虽然AC781x系列每个GPIO引脚都可配置为外部中断,但EXTI_Line却只有16条,所以同时只能支持最多16个外部中断。

备注:
1.为什么同时使能两个外部中断,只有其中一个能产生外部中断,另外一个则不能产生?
同一EXTI_Line同时只能支持一个外部中断,如果同一EXTI_Line同时使能多个GPIO外部中断,最后使能的GPIO外部中断有效,之前的被覆盖,无效,这点在产品设计中需要特别注意。

表1-1 GPIO与中断向量对应关系

1.2.4 引脚复用
每个GPIO引脚都支持复用功能,凡是需要占用GPIO引脚的外设,在使用时都应该先进行引脚复用配置,配置成对应的复用功能。

备注:
1.为什么外设复用到特定引脚后再次复用到另外的引脚,功能异常?
同一个外设不能同时复用多个相同功能的GPIO引脚,必须先复位已经复用功能的GPIO引脚,然后复用当前期望的GPIO引脚。如:UART6 TX已经复用到PE10,现在期望复用到PA14,那么应该先复位PE10为GPIO,然后将PA14配置成复用功能UART6 TX。

1.2.5 休眠唤醒
MCU进入休眠之后,GPIO产生外部中断可将MCU唤醒。在Sleep模式、Stop模式、StopLite模式下,配置GPIO外部中断皆可将MCU唤醒,但在Standby模式下,配置GPIO外部中断无法唤醒MCU,这是因为在Standby模式下,GPIO处于关闭状态,引脚电平由外部电路决定。在Standby模式下,除RTCSPM外,其他所有数字模块均被断电,所以,只有RTCNMI可唤醒MCU
表1-2 GPIO支持唤醒低功耗模式
在进入休眠模式之前,需要对唤醒源进行配置。在ATC_AC781x_ReferenceManual_CH第6章“系统电源管理”中有描述,在寄存器REG_EN_PERIPH_WAKEUP中使能期望的唤醒源,GPIO模块默认是使能状态。调用库SPM_EnableModuleWakeup(SPM_MODULE_GPIO)使能GPIO模块唤醒,就能将MCU从休眠模式中唤醒,Standby模式除外。


2 驱动库
2.1 bit-band驱动

能够通过GPIOx_OUT(n)对GPIO输出进行控制, 通过GPIOx_IN(n)读取GPIO输入引脚状态(x=A,B,C,D,E)。
表2-1 bit-band 驱动描述

备注:
1.为什么使用GPIOx_OUT无法控制对应引脚输出期望电平?
最大的可能性便是参数传递错误,为了便于说明,这里以将GPIO_PB0输出高电平举例,正确的写法是GPIOB_OUT(0),而不是GPIOB_OUT(GPIO_PB0)。引申,对于GPIOx_IN(n)同理。

2.2 寄存器驱动
表2-2 寄存器驱动描述


3 例程介绍
3.1 总述

共5个子例程用以阐述GPIO的各种功能使用,包括通用输入输出,引脚复用,外部中断,外部中断休眠唤醒,NMI休眠唤醒。每个子例程对应一个宏定义,通过修改GPIO_SAMPLE_SEL选择不同的子例程。

3.2 例程功能概述
表3-1 例程功能描述

这里对宏USE_BITBAND_TO_ACCES解释一下,用来选择访问GPIO是通过bit-band还是寄存器,可任意设置为TRUE或FALSE,不影响任何功能。

欢迎各位坛友指正,后续会根据问题持续更新。

GPIO_Sample.rar

2.43 MB

使用特权

评论回复
评论
TechHolder 2019-12-23 13:09 回复TA
@curry97 :可以 
curry97 2019-12-20 15:45 回复TA
楼主 你好 可以给下固件库手册吗 

相关帖子

沙发
ddllxxrr| | 2019-10-30 10:02 | 只看该作者
用GPIO时不用使能时钟么?????

使用特权

评论回复
板凳
TechHolder|  楼主 | 2019-10-30 17:24 | 只看该作者
ddllxxrr 发表于 2019-10-30 10:02
用GPIO时不用使能时钟么?????

这里没有做使能,是因为上电后GPIO时钟默认就是使能的。

使用特权

评论回复
地板
zhuotuzi| | 2020-3-10 20:56 | 只看该作者
非常赞。

使用特权

评论回复
5
香烟火柴| | 2020-3-26 10:41 | 只看该作者

使用特权

评论回复
6
haohaoba| | 2021-2-21 10:35 | 只看该作者
非常赞

使用特权

评论回复
7
weichunting| | 2021-6-13 11:03 | 只看该作者
TechHolder 发表于 2019-10-30 17:24
这里没有做使能,是因为上电后GPIO时钟默认就是使能的。

上电后GPIO时钟默认就是使能的,那怎么样才能关掉某个GPIO的时钟?

使用特权

评论回复
8
两只袜子| | 2021-6-13 18:01 | 只看该作者
赞一个

使用特权

评论回复
9
redone| | 2021-6-15 09:58 | 只看该作者
既然GPIO的驱动能力可配置,
那么在使用IO功能的时候,还需要加驱动芯片,已增大IO的驱动能力么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

219

帖子

3

粉丝