S32K144 GPIO外设分析

1. S32K144 GPIO外设特性

下面的内容来自于S32K用户手册的翻译,或者网上关于S32K系列的一些pdf文件介绍。有些内容可能会出现理解不到位或者翻译错误方面,如果大家有疑问最好可以查阅用户手册。

  • GPIO和PORT的数量

    从用户手册,对于PCR(引脚控制寄存器)的数量描述,如下表:

在这里插入图片描述

每一个引脚都有一个独立的 PCR 寄存器对应着,那么S32K144型号,对应的GPIO引脚数量有:18+18+18+18+17 = 89,就是说最多有89个引脚

然后PORT的数量,从上面表格也可以知道是:PORTA/PORTB/PORTC/PORTD/PORTE 一共是5个PORT

  • 每个引脚都能够产生中断请求,支持上升沿、下降沿、或者电平(高电平或者低电平)触发中断。

  • 每个引脚都能产生DMA请求。

  • 每个引脚都能在低功耗模式下唤醒MCU

  • 每个引脚都有数字滤波器

  • 可单独控制每个引脚的上下拉电阻

  • 每个IO引脚均可复用为多种功能模式

2. S32K144 GPIO外设相关的两个模块

打开 S32K 的用户手册,可以了解到与GPIO外设相关的有两个模块,分别是:PORT 和 GPIO。下图就是从用户手册截图的这两个模块章节目录:

在这里插入图片描述

从用户手册的介绍以及对应寄存器的描述,大概了解到这两个模块的作用是:

  • PORT:主要是上拉使能控制、引脚功能复用配置、引脚中断配置等功能。不过手册还有一些寄存器的功能还不清楚有什么用。
  • GPIO:就是控制GPIO口的数据输入输出方向、GPIO引脚高低电平的控制等等。

所以,我们在写代码控制GPIO时,需要配置这两个外设,才能正确配置GPIO引脚。

3. PORT模块寄存器

下图是PORT模块的寄存器映射表:

在这里插入图片描述

只是截图了一部分,PCR寄存器是有32个的,每个引脚都有一个对应的寄存器。

3.1 PORT_PCRn寄存器

每个PORT端口,最多都有32个PCR寄存器(不同型号实际数量不一样,前面有截图介绍),一个pin引脚有一个对应的PCR寄存器,所以一个PORT端口,最多可以支持32个引脚。

PCR寄存器位域描述。下面是PCR寄存器的位域截图:

在这里插入图片描述

位域名称R/W描述
0PSR/W上下拉选择
0:下拉
1:上拉
1PER/W上下拉使能
0:使能
1:使能
4PFER/W无源滤波器使能
0:使能
1:使能
6DSER/W引脚驱动能力配置
0:低驱动强度
1:高驱动强度
8-10MUXR/W引脚的复用功能配置。是配置位普通IO口,还是特定的复用功能引脚
15LKR/W锁定PCR寄存器。锁定之后,那么PCR寄存器无法被配置,直到下一次复位
16-19IRQCR/WI/O引脚中断配置。可配置DMA请求、中断触发模式(上升沿下降沿等)
24ISFR/W引脚中断状态标志位。该标志位由 IRQC 配置条件进行触发。硬件置位,软件清零。

3.2 PORT_GPCLR/GPCHR寄存器

全局引脚控制寄存器。每一个 PORT 都有对应的 PORT_GPCLR、PORT_GPCHR寄存器,PORT_GPCLR控制低16个pin引脚,PORT_GPCHR控制高16个pin引脚。这两个寄存器的操作只能是32位操作方式,不能按bit读写。

在这里插入图片描述

如果引脚对应的 GPWE 位写1,那么 GPWD 位配置对应引脚的 PCR 寄存器的值就会被更新。这个寄存器的主要作用就是,对引脚模式相同的配置,可以快速的配置多个引脚。

3.3 PORT_GICLR/GICHR寄存器

全局中断控制寄存器。每个 PORT 同样有这两个寄存器,作用和上面的全局引脚控制寄存器是一样的。对应相同中断模式的引脚配置,这个寄存器可以快速配置多个引脚

在这里插入图片描述

3.4 PORT_ISFR寄存器

Interrupt Status Flag Register,中断状态标志寄存器。这个寄存器记录着所有32个pin引脚的中断状态,当配置的中断发生时,对应的引脚的bit位会被硬件置1。软件写1,对该标志位清0。

还又一些是和数字滤波器有关的寄存器,不一一记录了,到时在代码中了解。

4. GPIO寄存器

GPIO模块寄存器,前面介绍过,主要就是输入输出数据寄存器、方向控制、输入使能控制等作用。下面是 GPIO 寄存器的内存映射表。

在这里插入图片描述

大概介绍下每个寄存器的作用。

  • PDOR:端口数据输出寄存器。就是输出引脚的值
  • PSOR:端口输出置位寄存器。就是设置引脚输出高电平的
  • PCOR:端口输出清除寄存器。设置引脚输出低电平
  • PTOR:端口输出翻转寄存器。配置输出引脚电平翻转,1->0,0->1
  • PDIR:端口数据输入寄存器。可以通过该寄存器读取对应引脚的输入电平
  • PDDR:端口数据方向寄存器。设置引脚是输入还是输出。
  • PIDR:端口输入使能寄存器。对应IO引脚位写1,那么这个引脚的输入功能就被禁止了。
### S32K144 微控制器配置 GPIO 方法 对于S32K144微控制器而言,配置通用输入/输出端口(GPIO)涉及几个关键步骤。这些操作通常通过初始化外设模块来完成,具体来说是设置相应的寄存器以定义引脚的功能和行为。 #### 初始化库与头文件引入 为了简化开发过程并提高代码可读性和移植性,在编写程序之前应当先包含必要的SDK头文件[^1]: ```c #include "fsl_gpio.h" #include "pin_mux.h" /* Pin Mux Configuration */ ``` #### 配置时钟源与时钟门控 确保目标外设有足够的工作频率支持其正常运作非常重要。这一步骤主要是开启对应于所使用的GPIO模块的时钟信号路径[^2]: ```c CLOCK_EnableClock(kCLOCK_PortA); // Enable PORTA clock. // 如果使用其他PORT, 则替换为对应的宏定义 ``` #### 设置引脚属性 接下来就是针对具体的物理引脚设定它们的工作模式以及电气特性参数。这里可以通过调用`PORT_SetPinMux()`函数实现,它接受四个参数分别代表端口号、针脚编号、复用功能选项以及其他特殊标志位[^3]: ```c /* Initialize the switch board */ BOARD_InitBootPins(); BOARD_InitBootClocks(); /* Set PTB18 to be used as GPIO */ PORT_SetPinMux(PORTB, 18U, kPORT_MuxAsGpio); ``` #### 定义方向及初始状态 最后要做的就是在实际应用层面上指定该IO线作为输入还是输出用途,并给定默认电平值。此部分可通过如下方式达成目的[^4]: ```c gpio_pin_config_t ledConfig = { .direction = kGPIO_DigitalOutput, .outputLogic = 0U, }; GPIO_PinInit(GPIOB, 18U, &ledConfig); ``` 上述流程展示了如何基于恩智浦官方提供的软件包对S32K系列MCU上的单个GPIO进行基本配置的过程。值得注意的是不同版本之间可能存在细微差异因此建议参照最新发布的文档资料获取最准确的信息[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值