GPIO配置


①为一个pad(引脚),每个pad由五路信号控制

input_on 输入开关信号,用于控制是否开启强制输入功能(SW_MUX_CTL_PAD 寄存器的SION 位设置)。如果开启强制输入,则不管IO 口选择哪个复用模式(ALT0~7),总是可以通过GPIO_PSR 读取这个IO 口的状态
Dir 是方向控制信号,控制IO 的输入/输出方向。
Data_out数据输出信号,用于控制IO 口输出高/低电平。
Data_in数据输入信号,用于读取IO 口的高/低电平。
最下方的信号 来自SW_PAD_CTL_PAD 寄存器(IO 引脚控制寄存器),它控制了这个PAD 的具体属性

注意:Dir、Data_out 和Data_in 是由IOMUXC 控制连接到具体哪个Block 上面的,不一定是由GIPO Block 控制,比如也可以由SEMC Block 控制。

②是IO复用选择器IOMUXC(IO Multiplexer Controller),具体通过③处的SW_MUX_CTL_PAD寄存器实现
③ IO复用选择器的控制区域,由2 个32 位寄存器组组成:SW_MUX_CTRL_PAD和SW_PAD_CTRL_PAD,每个寄存器组大小为:124,对应124 个IO 口,剩下的3 个IO 口(GPIO5_IO00、GPIO5_IO001 和GPIO5_IO02)通过直接操作地址的方式实现控制。其中,SW_MUX_CTRL_PAD 用于选择IO 口的复用功能和使能SION 位
SW_PAD_CTRL_PAD 用于设置IO 口的具体属性。
④ GPIO 控制块(Block),属于众多IO 控制块中的一个。可以看到GPIO 控制块里面有:DR、GDIR、PSR、ICR1、ICR2、EDGE_SEL、IMR 和ISR 等8 个寄存器(实际上还有其他几个寄存器),用于控制PAD 做GPIO 用时的具体功能。
⑤ GPIO 其他控制块(Block),比如串口、网口、CSI、SEMC、SAI、IIC、SPI等控制块(Block),由IOMUXC 选择IO 口具体被哪个Block 控制。
⑥ 另一个PAD(PAD2)的IO 复用选择器.
⑦ PAD1 的一个复用输入线,信号来自PAD2 的IOMUXC。由此可知,RT1052 内部的IO 之间,还可以互相连通(实际上就是通过XBAR 实现)。比如原本PAD1 不能用作 PWM 输出,而PAD2 可以,我们可以通过一定的设置,让PAD2 的输出,直接输出到PAD1,这样PAD1 就可以输出PWM 了,因此,IO 口的使用更加灵活了。
(主要看前五个就行了)

IO 复用功能选择器(IOMUXC)的寄存器非常多,主要可以分为四组:
① IOMUXC_GPR 寄存器组,用于通用控制设置。
IOMUXC_SNVS 组,主要用于GPIO5 的控制。
③ IOMUXC_SNVS_GPR 寄存器组,暂时没用到。
IOMUXC 组,用于指定IO 的复用功能选择和IO 属性设置。
在IO 设置的时候,实际上我们只用到了②和④,①和③没用到,所以①和③,我们这里不做介绍。所以,我们可以把②和④一起介绍,任意一个IO,都是由2 个寄存器(SW_MUX_CTL_PAD/ SW_PAD_CTL_PAD)控制的。

以SW_MUX_CTL_PAD_GPIO_AD_B0_03为例
1.SW_MUX_CTL寄存器(复用功能选择寄存器)
IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B0_03

32位寄存器,31-5保留 ,4为sion位, 3保留, 2-0有八个功能可选,作为最基本的GPIO选择ALT5即可。
2.SW_PAD_CTL寄存器(属性配置寄存器)
IOMUXC_SW_PAD_CTL_PAD_GPIO_AD_B0_03


该寄存器用于设置IO口的具体属性:

图中①处, 引脚,可以看到引脚由两路信号控制,其中左侧为输出路径,下方为输入路径。

图中②处,是IO 的输出驱动器,具有如下配置属性:

  • OBE,输出缓冲使能,这个属性是内部自动设置的,我们无法直接通过软件修改,当IO 配置成输出模式时,OBE 自动使能;当IO配置成输入模式时,OBE 自动失能;相当于间接设置。
    注意:当IO 配置成输入模式时,由于OBE失能,输出缓冲器不工作,所以相关设置(DSE、SRE、SPEED 和ODE 等)也将全部无效。
  • DSE,输出驱动能力,需软件设置,总共有8 个等级:关闭和R0/1~R0/7。由R0 决定IO 口的驱动能力,在3.3V 条件下,R0
    的值为150Ω。最小的输出电阻(可以获得最大的驱动能力)为:R0/7=21.4Ω。
  • SRE,压摆率,需软件设置。共有2 个等级:Fast 和Slow。压摆率控制电平跳变的时间,压摆率越高,波形越陡,压摆率越低,波形越缓。这个设置,在过EMC测试的时候,比较有用。比如要过EMC 可以设置压摆率低一些(slow),得到比较平缓的边沿,从而降低电磁辐射。
  • SPEED,输出速率(带宽),需软件设置,总共有3 个等级:50M、100M 和200M。
  • ODE,开漏输出使能,需软件设置,当设置ODE=0 且GPIO 设置成输出模式,为推挽输出;当设置ODE=1 且GPIO
    设置成输出模式,为开漏输出,开漏输出时:IO口只能输出低电平/三态输出,无法直接输出高电平,需要使用上拉电阻(内部/外部)才可以输出高电平。当GPIO 设置成输入模式时,ODE设置直接被忽略。

图中③处,是GPIO 的输入接收器,具有如下配置属性:

  • IBE,输入缓冲使能,这个属性是内部自动设置的,我们无法直接通过软件修改,当IO 配置成输入模式时,IBE 自动使能;当IO
    配置成输出模式时,IBE 自动失能;相当于间接设置。当IBE 失能时(GPIO 为输出模式时),HYS 等设置无效。
  • IND,输入信号,读取到的IO 口状态,由这个口传入MCU 内部的。
  • HYS,迟滞比较使能,需软件设置,用于设置是否使能输入接收器的施密特触发器(滞后模式),施密特触发可以对波形进行整形,可以在一定程度上滤除误触发。一般可以不设置。

图中④处,是上拉/下拉/保持控制逻辑,需软件设置,用于设置输入/输出的上/下拉电阻和状态保持器。具有如下配置属性:

  • PUS:用于设置上/下拉电阻,可选设置有:100K 下拉、47K 上拉、100K 上拉和22K 上拉。
  • PKE:用于使能/禁止上下拉电阻和状态保持器,当设置为1 时,使能上下拉电阻/状态保持器;当设置为0 时,关闭上下拉电阻/状态保持器。
  • 另外,还有一个PUE 信号,在图6.3.3 中没有标出,是用于控制选择使用上下拉电阻还是使用状态保持器,当设置为0
    的时候,选择使用状态保持器(上下拉关闭);当设置为1 的时候,选择使用上下拉电阻(状态保持器关闭),因此上下拉和状态保持器只能二选一。

软件

GPIO软件设置如下:

gpio_pin_config_t led_config;      //
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_03_GPIO1_IO03,0); //选择IO功能
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B0_03_GPIO1_IO03,0x10B0);//配置IO口
//低转换速度,驱动能力为R0/6,速度为100Mhz,关闭开路功能,使能pull/keepr
//选择keeper 功能,下拉100K Ohm,关闭Hystled_config.direction = kGPIO_DigitalOutput;  //方向(输出)
led_config.outputLogic =  0;                //默认输出电平(低)
led_config.interruptMode = kGPIO_NoIntmode; //中断模式(不使用)
GPIO_PinInit(GPIO1,3,&led_config);//指定GPIO引脚功能GPIO_PinWrite(GPIO1,03,1);//设置指定的GPIO的输出电平
/*************************************************************************/// 各个函数原型:
static inline void IOMUXC_SetPinMux(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t inputOnfield)
//前五个直接去FSL里面找,最后一个是sion设置,启用为1不启用则为0static inline void IOMUXC_SetPinConfig(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_tconfigRegister,
uint32_t configValue)
//同上 ,前五个去FSL里面找,最后一个参数对照着SW_PAD_CTL寄存器写(开发手册33章),具体参考下表typedef struct _gpio_pin_config
{
gpio_pin_direction_t direction; //方向,输入还是输出?
uint8_t outputLogic; //默认输出电平
gpio_interrupt_mode_t interruptMode; //中断模式
} gpio_pin_config_t;GPIO_PinWrite 函数
void GPIO_PinWrite(GPIO_Type *base, uint32_t pin, uint8_t output);
base:要设置的GPIO 组,GPIO1_IO03 就是GPIO1 组的。
pin:组内编号,比如GPIO1_IO03 就是GPIO1 组中的3 号IO。
output:输出电平,1 为高电平,0 为低电平。GPIO_PinRead 函数
此函数用于读取一个指定IO 的电平,函数原型如下:
static inline uint32_t GPIO_PinRead(GPIO_Type *base, uint32_t pin)
base:要设置的GPIO 组,GPIO1_IO03 就是GPIO1 组的。
pin:组内编号,比如GPIO1_IO03 就是GPIO1 组中的3 号IO。
返回值:读到的指定IO 的电平值,1 为高电平,0 为低电平。

SW_PAD_CTL寄存器

31-17 0保留
16 HYS 0-关闭 1-开启
15-14 PUS 00-下拉100K/ 01-上拉47K /10-上拉100K/ 11-上拉22K
13 PUE 0-keeper/1-pull
12 PKE 0-pull/keeper关闭/1-pull/kepper启用
11 ODE 开漏输出 0不启用 /1启用
10-8 0保留
7-6 SPEED 00-50MHz/ 01-100MHz /10-100MHz /11-200MHz
5-3 DSE 000-不使用 001-R0 010-R0/2 011-R0/3 100-R0/4 101-R0/5 110-R0/6 111-R0/7 (R0-3.3V 150Ω)
2-1 0保留
0SRE 0低速/1高速

参考资料
正点原子 RT1052 开发指南(库函数版)
IMXRT1020RM
2020.7.6

NXP RT1021初探相关推荐

  1. NXP RT1021应用笔记

    1. FlexSPI driver API 1.1 API产生背景 ​ i.MXRT系列都是Flashless(没有内置NVM)的芯片,所以BootROM必不可少.BootROM是个很特殊的东西,本质 ...

  2. 单片机语音库文件_20天备战智能车之NXP库使用教程逐飞科技

    20天备战智能车之NXP库使用教程 距离比赛的时间又近了一天,今天逐飞为大家分享的是"逐飞开源库"的使用方法,从开源网站下载开源库到如何使用开源库做一个梳理,学会了开源库的使用,可 ...

  3. 汽车 ECU 升级初探

    ECU 固件升级,类似于手机固件升级,大概流程是实现 Bootloader,完成 EEPROM/Flash 的读写,当然需要了解 ECU 所使用的 MCU,MCU 内部EEPROM/Flash 和外部 ...

  4. NXP智能驾驶软件系统

    NXP智能驾驶软件系统 ADAS和高度自动驾驶 汽车解决方案 市场领先的ADAS解决方案 先进的驾驶员辅助系统(ADAS)提供了安全的.日益自动化的驾驶体验,这将重塑出行关系.自动驾驶技术将很快让乘客 ...

  5. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

  6. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  7. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  8. las格式测井曲线_邹榕,等:顺北和托甫台区块奥陶系断裂结构单元测井响应特征初探...

    引用格式:邹榕,徐中祥,张晓明,等.顺北和托甫台区块奥陶系断裂结构单测井响应特征初探[J].油气藏评价与开发,2020,10(2):18-23.ZOUR, XU Z X, ZHANG X M, et ...

  9. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武

    1.来源:<网络表征学习前沿与实践>  崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...

最新文章

  1. 谁知道静态成员的纠结心境
  2. Install Java 8 Ubuntu
  3. Forefront Security For Exchange的反病毒测试
  4. Linux守护进程列表
  5. 各银行汇款手续费之比较
  6. 算法高级(26)-在Java8中为什么要使用红黑树来实现的HashMap?
  7. 5G/NR 学习笔记 - RAR随机接入过程
  8. Java jta 原理_分布式事务JTA实现Atomikos与Spring集成实践
  9. FFMpeg新旧接口之间的一些对应关系
  10. 谷歌验证码无法显示问题
  11. pikachu逻辑漏洞实验
  12. lnmp一键安装升级PHP版本
  13. 微云存储空间多大_qq微云内存多大
  14. python之matplotlib实现绘图和可视化
  15. 网页前端上传文件,后端接受并处理文件
  16. Devise Gem简介
  17. python打印小星星案例详解_音乐案例 《小星星》
  18. 2019年安徽大学ACM/ICPC实验室新生赛
  19. domino服务器打开邮件,Domino邮件服务器配置(接收、发送).doc
  20. 计算机数据库方向论文ei,Ei Compendex数据库收录中国论文统计分析

热门文章

  1. 小福利,带你快速入门sumifs多条件求和函数、设置下拉菜单结合vlookup函数双条件查找数据、excel的切片器(表关联)、数据透视表、数据透视图
  2. 恢复W ndows10系统方法步骤,Windows 10系统恢复电脑(刷新电脑)的方法步骤图文教程详解...
  3. 爬取贝壳网的40000条基本数据
  4. 腾讯广告算法大赛2019
  5. 求100以内的所有质数(素数)
  6. 20个精美图表,教你玩转Pyecharts可视化
  7. 用endnote9往word中插入参考文献
  8. firewalld防火墙配置ip地址伪装和端口转发
  9. PowerDesigner创始人的个人成长经历
  10. 适合一个人干的小生意,最挣钱没人干的行业