S32K1xx FlexIO 模块特性及应用

关键字 :NXPS32KFlexIO

一、 概述

本文将介绍 NXP S32K1xx 系列 MCU 的 FlexIO 模块的基本知识,重点将介绍 FlexIO 的概念、特性、功能概述以及关于该模块的应用。

二、 FlexIO 的特性

FlexIO 是一个高度灵活的可配置的模块,主要具备两种功能:

  • 可以模拟一些串行通信协议,例如 UART、I2C、SPI、I2S 等
  • 灵活的 16 位定时器,支持各种触发,复位,启用和禁用等操作

S32K1xx 系列 MCU 的 FlexIO 模块具备以下特性:

  • 具有发送、接收和数据匹配模式的 32 位移位寄存器数组
  • 具有连续数据传输的双缓冲移位操作
  • 移位器连接以支持大的传输尺寸
  • 自动开始/停止位生成
  • 中断、DMA 或轮询的发送/接收操作
  • 可编程波特率,与总线时钟频率无关
  • 高度灵活的 16 位计时器,支持各种内部或外部触发,复位,启用和禁用

以下为 FlexIO 的模块框图:

                                                    图 2.1 FlexIO 模块框图

FlexIO 寄存器的列表如下:

                                                    图 2.2 FlexIO 模块寄存器列表

三、 FlexIO 的功能概述

3.1 时钟及复位

FlexIO 的功能时钟和总线时钟是异步的,FlexIO 的功能时钟可以在低功耗模式下保持,在访问 FlexIO 模块的寄存器之前 FlexIO 的时钟必须使能,其时钟频率至少是总线时钟频率的两倍。FlexIO 可以通过控制寄存器 CTRL[RST] 实现软复位,除了控制寄存器外的其它寄存器都复位到默认值。

3.2 移位寄存器

移位寄存器负责对数据进行缓冲以及移位的操作,移位的时序、加载和存储事件通过分配给移位寄存器的定时器进行控制。移位寄存器支持 DMA 、中断和轮询操作,关于移位寄存器的框架如下图所示:

                                                        图 3.1 移位寄存器的框架

当配置成发送模式时,移位寄存器将从 SHIFTBUF 寄存器加载数据并且将在绑定的定时器的加载事件发生后将数据移出。用户可以通过配置相关寄存器来实现 开始/停止 位的自动加载。当数据已经从 SHIFTBUF 寄存器加载到移位寄存器时,移位状态标志以及任何使能的
中断或者 DMA 请求都将置位,当尝试从空的 SHIFTBUF 寄存器加载数据时,移位错误标志以及任何使能的中断都将置位。

当配置成接受模式时,当寄存器绑定的定时器的存储事件产生时,移位寄存器将会把数据移进 SHIFTBUF 寄存器,可以通过配置相关寄存器来决定是否使能检查 开始/停止 位的功能。当数据已经从移位寄存器存储进 SHIFTBUF 寄存器时,移位寄存器状态位以及任何使能
的中断或者 DMA 请求将置位。当尝试将数据储存到一个满的 SHIFTBUF 寄存器或者 开始/结束 位不匹配出现时,移位寄存器的错误标志位以及任何使能的中断将置位。

当配置成匹配储存模式时,当移位寄存器绑定的定时器存储事件发生时,移位寄存器将会把数据移进,检查匹配结果并将匹配的数据存储进 SHIFTBUF 寄存器。该模块支持最高 16 位的数据比较,SHIFTBUF[31:16] 用于配置比较的数据,SHIFTBUF[15:0] 用于对匹配结果
进行掩码操作。当一个匹配事件出现并且匹配的数据已经从移位寄存器加载到 SHIFTBUF 寄存器时,移位寄存器的状态位和任何使能的中断和 DMA 请求将置位。当尝试将匹配的数据存储到一个满的 SHIFTBUF 寄存器,或者 开始/结束 位检查不匹配时,移位寄存器错误
标志位和任何使能对的中断都将置位。

当配置成匹配连续模式时,当绑定的定时器产生移位事件时,移位寄存器将会移进数据并且不断检查匹配结果。当一个匹配出现时,移位状态器状态标志位和任何使能的中断和 DMA 请求都将产生。当不再有匹配数据出现时标志位会自动清除。

3.3 定时器

FlexIO 的 16 位定时器控制移位寄存器额加载、移位和存储。计数器会从比较寄存器加载内容并递减到 0 。FlexIO 定时器可以实现通用的定时器,例如生成时钟或者输出 PWM 波形。每个定时器的工作都是独立的,定时器输出可以用来触发其它的定时器,每个定时器的触
发源都是独立配置的,可以配置为定时器输出、移位状态标志位、引脚输入或者外部的触发输入。

定时器可以配置成下面几种模式:

(1) 8 位波特计数模式,在该模式下, 16 位的计数器分成两个 8 位的计数器,低 8 位用来配置移位寄存器时钟的波特率,高 8 位用来配置传输中移位寄存器时钟的数量,当低 8 位计数器的值减少为 0 时输出进行翻转,并且低 8 位从比较寄存器重新加载。

(2)8 位 High PWM 模式,在该模式下,16 位的计数器分为两个 8 位的计数器,低 8 位用来配置定时器的高电平时间,高 8 位用来配置配置低电平时间,当低 8 位减小为 0 时定时器输出为低电平,并且低 8 位从比较寄存器中重新加载,当输出为低电平是高 8 位计数器
递减,当高 8 位减少到 0 时,定时器状态位被置位。

(3)16 位计数器模式 ,该模式下,16 位计数器即可以用来配置移位寄存器时钟的波特率(TIMDEC[1:0] = 10 或 11),也可以配置成移位寄存器时钟的边缘数(TIMDEC[1:0] = 10 或 11),当 16 位计数器的值减小为 0 时,定时器输出翻转并且计数器的值从比较寄存器
中重新加载。

3.4 引脚操作

每个定时器和移位器的引脚配置可以配置为使用任意极性的 FlexIO 引脚。每个定时器和移位器可以配置为输入,输出数据,输出使能或双向输出。配置为输出使能的引脚可以用作开漏输出或控制双向输出的使能。任何定时器或移位器都可以配置为控制一个引脚的输出使能,其中双向输出数据是由另一个定时器或移位器驱动的。

3.5 中断和 DMA 请求

关于中断和 DMA 的产生条件如下表所示。

                                                         表 3.1 中断和 DMA 产生条件

四、 FlexIO 的应用实例

下面将介绍通过 FlexIO 来模拟 UART。

串口的发送功能需要使用到一个定时器、一个移位寄存器以及一个引脚(如果支持 CTS 的话需要两个),数据的起始和停止位会自动进行插入,使用 DMA 控制器可以实现多个数据的传输,定时器的状态位可以用来指示停止位是否发送。

Break 和 Idle 字符需要软件进行干预,在传输一个 Break 或 Idle 字符之前,应改变 SSTART 位和 SSTOP 位来传输所需的状态并且数据应当是 0xFF 或 0x00。FlexIO 不支持奇偶校验位的自动插入。串口发送的相关寄存器的配置如下表:

寄存器

说明

SHIFTCFGn

0x0000_0032

配置起始位为 0 ,停止位为 1

SHIFTCTLn

0x0003_0002

配置串口发送使用定时器 0 ,在时钟的上升沿引脚 0 输出数据

TIMCMPn

0x0000_0F01

配置为 8 位数据宽度,波特率为 FlexIO 的 4 分频

TIMCFGn

0x0000_2222

配置起始位、停止位,触发有效时使能,比较时禁用

TIMCTLn

0x01C0_0001

配置两个 8 位的计数器,使用移位寄存器 0 的状态位作为内部触发源

SHIFTBUFn

需要发送的数据

发送数据可以被写到 SHIFTBUF[7:0] 来启动一个 8 位的传输,当数据通过中断或者 DMA 请求写入后通过移位寄存器的状态位来指示

                                                 表 4.1 串口发送的寄存器配置

 

串口接收需要用到一个定时器、一个移位寄存器和一个引脚(如果支持 RTS 的话需要两个引脚和两个定时器),起始位和停止位的校验会自动处理,通过 DMA 控制器可以实现多次数据传输,定时器的状态位可以用来指示停止位是否接收到了。

串口数据的接收只在每一位的中间执行一次采样,另一个定时器可以用来实现数据的滤波以及检测空闲的长度,FlexIO 不支持奇偶校验位的自动检验。关于串口接收的寄存器配置如下表所示。

寄存器

说明

SHIFTCFGn

0x0000_0032

配置起始位为 0 ,停止位为 1

SHIFTCTLn

0x0080_0001

配置接收使用定时器 0 ,在时钟的下降沿读取引脚 0 的输入

TIMCMPn

0x0000_0F01

配置为 8 位数据宽度,波特率为 FlexIO 的 4 分频

TIMCFGn

0x0204_2422

配置起始位、停止位,触发有效时使能,比较时禁用,使能重新同步来接收数据

TIMCTLn

0x0000_0081

配置两个 8 位的计数器

SHIFTBUFn

接收到的数据

接收数据可以从 SHIFTBUFBYS[7:0] 进行读取,当数据可以使用中断或 DMA 读取时使用移位寄存器状态位来标识

                                               表 4.2 串口接收的寄存器配置

五、参考资料

  1. NXP ,《S32K1XXRM》,https://www.nxp.com.cn/webapp/sps/download/preDownload.jsp?render=true
  2. NXP ,《S32K-DS》, https://www.nxp.com.cn/docs/en/data-sheet/S32K-DS.pdf

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论