1、简介

  • 不支持低功耗模式
  • FlexIO时钟被禁用时写入FlexIO寄存器会发送异常
  • FlexIO可仿真串行通讯协议,包括但不限于:UART、I2C、SPI、I2S、PWM,可提供16位的定时器
  • FlexIO提供以下主要功能:  
    • 32位移位寄存器发送,接收和数据匹配模式
    • 双缓冲移位操作连续数据传输
    • 移位连接,以支持大传输尺寸
    • 自动启动/停止位生成
    • 中断,DMA或轮询发送/接收操作
    • 可编程波特率独立于总线时钟频率
    • 高度灵活的16位定时器,支持多种内部或外部触发器重置、启用和禁用条件

2、寄存器

3.1、Version ID Register (VERID)

版本id寄存器

3.2、Parameter Register (PARAM)

Field Function

0-7

SHIFTER

Shifter的编号

8-15

TIMER

定时器的编号

16-23

PIN

引脚的编号

24-31

TRIGGER

触发器的编号

3.3、FlexIO Control Register (CTRL)

3.4、Pin State Register (PIN)

3.5、Shifter Status Register (SHIFTSTAT)

3.6、Shifter Error Register (SHIFTERR)

3.7、Timer Status Register (TIMSTAT)

3.9、Shifter Status Interrupt Enable (SHIFTSIEN)

3.10、Timer Interrupt Enable Register (TIMIEN)

3.11、Shifter Status DMA Enable (SHIFTSDEN)

3.12、Shifter Control N Register (SHIFTCTL0 - SHIFTCTL3)

3.13、Shifter Configuration N Register (SHIFTCFG0 - SHIFTCFG3)

3.14、Shifter Buffer N Register (SHIFTBUF0 - SHIFTBUF3)

Shifter的缓冲区

3.15、Shifter Buffer N Bit Swapped Register (SHIFTBUFBIS0 -SHIFTBUFBIS3)

别名为SHIFTBUF寄存器,除了对该寄存器的读/写是位交换。 读取返回SHIFTBUF[0:31]。

3.16、Shifter Buffer N Byte Swapped Register (SHIFTBUFBYS0 -SHIFTBUFBYS3)

移位buf寄存器别名,除非对该寄存器的读/写被字节交换。读取返回{SHIFTBUF[7:0], SHIFTBUF[15:8], SHIFTBUF[23:16], SHIFTBUF[31:24]}。

3.17、Shifter Buffer N Bit Byte Swapped Register (SHIFTBUFBBS0 - SHIFTBUFBBS3)

移位buf寄存器的别名,除了对该寄存器的读/写在每个字节内被交换位。 读取返回{SHIFTBUF[24:31], SHIFTBUF[16:23], SHIFTBUF[8:15], SHIFTBUF[0:7]}。

3.18、Timer Control N Register (TIMCTL0 - TIMCTL3)

3.19、Timer Configuration N Register (TIMCFG0 - TIMCFG3)

3.20、Timer Compare N Register (TIMCMP0 - TIMCMP3)

4、Shifter操作

Shifter负责缓冲和将数据移入或移出FlexIO。移位、加载和存储事件的时间是由通过SHIFTCTL[TIMSEL]寄存器分配给移位器的定时器控制的。移位器被设计为支持DMA,中断或轮询操作。下面的框图提供了Shifter微体系结构的详细视图。

4.2、传输模式

当配置为发送模式(SHIFTCTL[SMOD]=发送)时,移位器将从SHIFTBUF寄存器加载数据,并在加载事件被指定的定时器发出信号时将数据移出。 一个可选的启动/停止位也可以通过配置SHIFTCFG[SSTART],TIMCFG[TSTART]或SHIFTCFG[SSTOP]在SHIFTBUF数据之前自动加载,TIMCFG[TSTOP]寄存器在Shifter和Timer中。 注意,如果停止位被启用,当转换器初始配置为传输模式时,转换器将立即加载停止位。

移位状态标志(SHIFTSTAT[SSF])和任何启用的中断或DMA请求将在数据从SHIFTBUF寄存器加载到移位或移位最初配置为传输模式时设置。当新的数据写入到SHIFTBUF寄存器时,该标志将被清除

当尝试从一个空的SHIFTBUF寄存器加载数据时(缓冲区运行不足),移位错误标志(SHIFTERR[SEF])和任何启用的中断将被设置。 可以通过使用逻辑1来清除该标志

4.3、接收模式

当配置为接收模式(SHIFTCTL[SMOD]=Receive)时,当分配的计时器发出存储事件信号时,移位器将转移数据并将数据存储到SHIFTBUF寄存器中。 通过配置SHIFTCFG[SSTART], TIMCFG[TSTART]或SHIFTCFG[SSTOP], TIMCFG[TSTOP]在shifter和Timer中注册,可以在移位数据抽样前/后启用检查启动/停止位。

当数据从移位器存储到SHIFTBUF寄存器时,移位器状态标志(SHIFTSTAT[SSF])和任何启用的中断或DMA请求将被设置。 当从SHIFTBUF寄存器读取数据时,该标志将被清除。

当尝试将数据存储到一个完整的SHIFTBUF寄存器时(缓冲区溢出)或在启动/停止位检查时发生不匹配时,移位错误标志(SHIFTERR[SEF])和任何启用的中断将被设置。 可以通过使用逻辑1来清除该标志。

4.4、匹配存储模式

当配置为匹配存储模式(SHIFTCTL[SMOD]=匹配存储)时,移位器将移位数据,检查匹配结果,并将匹配的数据存储到SHIFTBUF寄存器中,当存储事件被指定的定时器通知。 通过配置SHIFTCFG[SSTART], TIMCFG[TSTART]或SHIFTCFG[SSTOP], TIMCFG[TSTOP]在shifter和Timer中注册,可以在移位数据抽样前/后启用检查启动/停止位。 最多可以比较16位的数据使用SHIFTBUF[31:16]来配置要匹配的数据和SHIFTBUF[15:0]来屏蔽匹配结果。

移位状态标志(SHIFTSTAT[SSF])和任何启用的中断或DMA请求将在匹配发生时设置,并且匹配的数据已经从移位器存储到SHIFTBUF寄存器中。 当从SHIFTBUF寄存器中读取匹配的数据时,该标志将被清除。

当尝试将匹配的数据存储到一个完整的SHIFTBUF寄存器时(缓冲区溢出)或在启动/停止位检查时发生不匹配时,移位错误标志(SHIFTERR[SEF])和任何启用的中断将被设置。 可以通过使用逻辑1来清除该标志。

4.5、匹配连续模式

当配置为连续匹配模式(SHIFTCTL[SMOD]=连续匹配)时,移位器将移位数据,并在分配的计时器发出移位事件信号时持续检查匹配结果。 最多可以比较16位的数据使用SHIFTBUF[31:16]来配置要匹配的数据和SHIFTBUF[15:0]来屏蔽匹配结果。

当匹配发生时,移位状态标志(SHIFTSTAT[SSF])和任何启用的中断或DMA请求将被设置。 一旦移位数据和移位buf寄存器之间不再匹配,该标志将自动清除。

当匹配发生时,移位错误标志(SHIFTERR[SEF])和任何启用的中断将被设置。 当从SHIFTBUF寄存器读取或用逻辑1写入时,该标志将被清除。

5、Timer操作

FlexIO 16位定时器控制移位寄存器的加载、移位和存储,计数器加载比较寄存器的内容,并在FlexIO时钟上减到零。 它们可以执行一般的定时器功能,如产生一个时钟或选择输出或PWM波形。 定时器可以配置为启用响应触发器,引脚或移位条件; 递减总是或仅在触发器或引脚边缘; 复位以响应触发或引脚条件; 在触发器或引脚条件或计时器比较上禁用。 计时器可以选择包括启动条件和/或停止条件。

每个计时器都是独立运行的,虽然一个计时器可以配置为与前一个计时器同时启用或禁用(例如:timer1可以与计时器0同时启用或禁用),并且一个计时器输出可以用来触发任何其他计时器。 每个定时器使用的触发器都是独立配置的,可以配置为定时器输出、移位状态标志、引脚输入或外部触发器输入(关于外部触发器连接的详细信息,请参阅特定芯片的FlexIO信息)。 触发器配置独立于引脚配置,可以配置输入、输出数据或输出使能。

在设置定时器模式(TIMOD)之前,应该配置定时器配置寄存器(TIMCFGn)。

5.1、Timer 8-bit band计数器模式

在8位波特率计数器模式下,16位计数器分为两个8位计数器。低8位用于配置移位时钟的波特率,高8位用于配置传输中移位时钟边缘的数量。当低8位递减为零时,定时器输出被切换,低8位从比较寄存器重新加载。当低8位等于0时,高8位递减。

请注意,8位波特率计数器模式下的计时器重置事件只会重置较低的8位计数器,如果计时器重置配置为更新计时器输出的状态,则较高的8位计数器不受影响,并且可以减小,并且计时器输出会因计时器重置事件而切换。

当高8位等于零并递减时,会发生计时器比较事件。定时器状态标志是在定时器上设置的

5.2、定时器 8 位高电平 PWM 模式

在8位高PWM模式下,16位计数器分为两个8位计数器。 低8位用于配置定时器输出高周期,高8位用于配置定时器输出低周期。 当输出高时,低8位减少。 当低8位等于零并递减时,定时器输出将被清除,并从比较寄存器中重新加载低8位。 当输出低时,上8位递减。 当上8位等于0和递减时,设置定时器输出,并从比较寄存器重新加载上8位

当上8位等于0并递减时,将发生计时器比较事件。 在一个定时器比较事件上设置定时器状态标志。

5.3、Timer 16位计数器模式

在16位计数器模式中,16位计数器可用于配置移位时钟的波特率(例如:TIMDEC[1:0] != 10或11)或传输中的移位时钟边缘数(例如:TIMDEC[1:0] = 10或11)。 当16位计数器等于零并递减时,计时器输出切换,计数器从比较寄存器重新加载。

当16位计数器等于零并递减时,将发生计时器比较事件。 在一个定时器比较事件上设置定时器状态标志

5.4、Timer的使能和起始位

当将TIMOD配置为所需的模式,并且检测到由timer enable (TIMENA)配置的条件时,将发生以下事件:

  • 计时器计数器将加载比较寄存器的当前值,并根据TIMDEC的配置开始递减。
  • 定时器输出可能会更新到其初始状态,这取决于TIMOUT配置。 由这个计时器控制的移位器不会将此视为计时器移位时钟上的上升边缘。
  • 由这个定时器控制的传输移位器将输出它们的起始位值,或者从移位缓冲区加载移位寄存器并输出第一个位,如SSTART配置的那样。

如果计时器开始位被启用,计时器计数器将在计时器开始递减后,用移位时钟第一个上升边的比较寄存器重新加载。 如果移位时钟在第一个上升沿之前没有下降沿(例如,当TIMOUT=1),配置为在下降沿上移动而在第一个移位上加载的移位器将不能正确加载。

5.5、Timer的递减和复位

然后,Timer将根据TIMOD和TIMDEC字段生成计时器输出和计时器移位时钟。 移位时钟等于计时器输出(当TIMDEC != 10或11)或等于减量时钟(当TIMDEC = 10或11)。 当TIMDEC配置为从引脚或触发器开始递减时,计时器将在上升边和下降边都递减。

当Timer被配置为按照TIMRST字段中的配置重置时,Timer计数器将再次加载比较寄存器的当前值。 定时器输出和定时器移位时钟可以配置为在定时器重置时更新,如TIMOUT所配置的那样。 如果定时器输出由于定时器复位而切换,这可能导致定时器移位时钟边缘。 在8位波特计数器模式下,这也会减少计数器的上8位。

通常,当计时器计数器减为零时,会触发计时器比较事件。 定时器比较事件将导致定时器计数器加载定时器比较寄存器的内容,定时器输出要切换,任何配置的发送移位寄存器要加载,以及任何配置的接收移位寄存器要存储。 根据定时器模式,还可以设置定时器状态标志。

5.5、Timer的禁用和停止位

当Timer配置为在每个比较上添加一个停止位时,将发生以下附加事件。

  • 由这个计时器控制的传输移位器将输出它们的停止位值(如果由SSTOP配置)。
  • 由这个定时器控制的接收移位器将把移位寄存器的内容存储在它们的移位缓冲区中,如SSTOP所配置的。
  • 在移位时钟比较后的第一个上升边缘上,计时器计数器将重新加载比较寄存器的当前值。

当检测到timer disable (TIMDIS)配置的条件时,将发生以下事件。

  • 计时器计数器将重新加载比较寄存器的当前值,并按照TIMDEC的配置开始递减。
  • 计时器输出将清除。 由这个定时器控制的移位器不会将其视为计时器shift时钟上的下降边,但如果计时器shift时钟会产生一个移位事件,则可以产生一个移位事件。
  • 由这个计时器控制的传输移位器将输出它们的停止位值(如果由SSTOP配置)。
  • 由这个定时器控制的接收移位器将把移位寄存器的内容存储在它们的移位缓冲区中,如SSTOP所配置的。

如果计时器停止位被启用,计时器计数器将继续递减,直到检测到移位时钟的下一个上升边缘,在那一点它将结束。 尽管计时器输出在停止位期间被强制降低,计时器移位时钟可以在停止位期间切换,但不产生移位事件。

一个定时器使能条件可以检测到与一个定时器禁用条件相同的周期(如果定时器停止位被禁用),或在禁用条件后的移位时钟的第一个上升边缘(如果停止位被启用)。 启用停止位的接收移位寄存器将移位寄存器的内容存储到移位缓冲区中,并在计时器处于停止状态时验证所配置的移位边上的输入数据的状态。 如果在计时器禁用和移位时钟的下一个上升边缘之间没有配置的边缘,那么最终存储和验证不会发生

6、PIN 操作

每个定时器和移位器的引脚配置可以配置为使用任何FlexIO引脚的任何极性。 每个定时器和移位器可以配置为输入,输出数据,使输出或双向输出。 配置为输出enable的引脚可以用作开路漏极(具有反向极性,因为输出enable断言将导致在引脚上输出逻辑零)或控制双向输出的enable。 任何定时器或移位器都可以配置为控制引脚的输出,其中双向输出数据由另一个定时器或移位器驱动。

7、中断和DMA请求

下表说明了可以产生 FlexIO 中断的状态标志和DMA 请求

8、Trigger

8.1、Peripheral Triggers

FlexIO外设触发器与其他外设的连接与设备相关

8.2、Output Triggers

每个FlexIO Timer生成一个与定时器输出相等的输出触发器。输出触发器不受定时器引脚极性配置的影响

8.3、Input Trigger

FlexIO支持多个外部触发器输入,可用于触发一个或多个FlexIO计时器。外部触发器被同步到FlexIO功能时钟,并且必须断言至少两个周期的FlexIO功能时钟被正确采样

9、典型应用

见参考手册,有UART Transmit/Receive、SPI Master/Slave、I2C Master、I2S Master、I2S Slave

如UART Transmit:

10、代码搬运工

上面是有道的复制者,下面是代码的搬运工

void FLEXIO_UART_init(void)
{/* Disable FLEXIO clock for config.* Select clk option 2 = SIRCDIV2_CLK* Enable FLEXIO clock */PCC->PCCn[PCC_FlexIO_INDEX] &= ~PCC_PCCn_CGC_MASK;PCC->PCCn[PCC_FlexIO_INDEX] |= PCC_PCCn_PCS(2)|  PCC_PCCn_CGC_MASK;/*FlexIO Timer Configuration:* Timer reset on trigger rising edge* Output logic 1 when enabled* Timer disabled on Timer compare* Timer enabled on Trigger high* Stop bit is enabled on timer compare and timer disable* Start bit enabled*/FLEXIO->TIMCFG[0] |= FLEXIO_TIMCFG_TIMRST(6)|FLEXIO_TIMCFG_TIMOUT(0)|FLEXIO_TIMCFG_TIMDIS(2)|FLEXIO_TIMCFG_TIMENA(2)|FLEXIO_TIMCFG_TSTOP(3)|FLEXIO_TIMCFG_TSTART(1);/* Trigger select: Shifter 0 status flag* Trigger active low* Dual 8-bit counters baud mode* Internal trigger* Select FXIO_D2* timer pin output disabled */FLEXIO->TIMCTL[0] |= FLEXIO_TIMCTL_TRGSEL(1)|FLEXIO_TIMCTL_TRGPOL(1)|FLEXIO_TIMCTL_TIMOD(1)|FLEXIO_TIMCTL_TRGSRC(1)|FLEXIO_TIMCTL_PINSEL(2)|FLEXIO_TIMCTL_PINCFG(0);/* FlexIO Timer Compare Value* 8 bits Transfer * Baud Rate = 19200b/s */FLEXIO->TIMCMP[0] = 0x0FCF;/* FlexIO Shifter Configuration: * Start bit '0'* Stop bit '1' */FLEXIO->SHIFTCFG[0] |=FLEXIO_SHIFTCFG_SSTART(2)|FLEXIO_SHIFTCFG_SSTOP(3);/* FlexIO Shifter Control:* Select Timer 0* Select FXIO_D1* Shifter pin as Output* Transmit mode */FLEXIO->SHIFTCTL[0] |=FLEXIO_SHIFTCTL_TIMSEL(0)|FLEXIO_SHIFTCTL_PINSEL(1)|FLEXIO_SHIFTCTL_PINCFG(3)|FLEXIO_SHIFTCTL_SMOD(2);
}void FLEXIO_UART_transmit_char(char send)
{/* Wait for buffer empty */while(! (FLEXIO->SHIFTSTAT & 0x1) );/* Send data */FLEXIO->SHIFTBUF[0] = send;
}void FLEXIO_UART_transmit_string(char data[])
{uint32_t idx=0;while(data[idx] != '\0'){/* Send chars one at a time */FLEXIO_UART_transmit_char(data[idx]);idx++;}
}void FLEXIO_100KHz_PWM_init(int duty)
{uint16_t low = ((((8000000/100000)*(100-duty))/ 100)-1) << 8;uint16_t high= (((8000000/100000)*duty)/100) - 1;/*!* * =============================*//* FlexIO Timer Configuration:* (Defaults) * Never reset* Output logic 1 when enabled* Never disabled* Always enabled* Start bit disabled* Stop bit disabled */FLEXIO->TIMCFG[1] |= 0x00000000;/*!* * ============================*//* FlexIO Timer Control:* Dual 8-bit counters PWM high mode* Select FXIO_D0* Timer pin output */FLEXIO->TIMCTL[1] |=FLEXIO_TIMCTL_TIMOD(2)|FLEXIO_TIMCTL_PINSEL(0)|FLEXIO_TIMCTL_PINCFG(3);/*  FlexIO Timer Compare Value:* In 8-bit PWM high mode, the lower 8-bits configure the high period* of the output to (CMP[7:0] + 1) and the upper 8-bits configure the* low period of the output to (CMP[15:8] + 1). */FLEXIO->TIMCMP[1] = high | low;/* Enable FlexIO module */FLEXIO->CTRL = FLEXIO_CTRL_FLEXEN_MASK;
}

S32K144(19)FlexIO相关推荐

  1. Windows Phone开发(19):三维透视效果

    Windows Phone开发(19):三维透视效果 原文:Windows Phone开发(19):三维透视效果 三维效果也可以叫透视效果,所以,我干脆叫三维透视效果.理论知识少讲,直接用例开场吧,因 ...

  2. 1996 年 3 月. IEEE 成立了 802.3z 工作组开始制定 1000Mb/s 标准。下列千兆以太网中不属于该标准的是(19)【答案】C

    1996 年 3 月. IEEE 成立了 802.3z 工作组开始制定 1000Mb/s 标准.下列千兆以太网中不属于该标准的是(19) (19)A.1000 Base-SX B.1000 Base- ...

  3. C# 学习笔记(19)操作SQL Server下

    C# 学习笔记(19)操作SQL Server下 ADO.net操作数据库 这应该是比较老的技术了,以后有空的话学学 Linq /// <summary> /// 数据库使用类 /// & ...

  4. Android 中文 API (19) —— TwoLineListItem

    一.结构 public class TwoLineListItem extends RelativeLayout java.lang.Object android.view.View android. ...

  5. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  6. 深度学习(19)神经网络与全连接层二: 测试(张量)实战

    深度学习(19)神经网络与全连接层二: 测试(张量)实战 1. 传入测试集数据 2. 数据类型转换 3. 创建test_db 4. test/evluation 5. 创建神经网络 6. 输出 7. ...

  7. Git笔记(19) 生成SSH公钥

    Git笔记(19) 生成SSH公钥 1. SSH公钥认证 2. 密钥 3. 公钥 1. SSH公钥认证 许多 Git 服务器都使用 SSH 公钥进行认证 如果某系统用户尚未拥有密钥,必须事先为其生成一 ...

  8. 视觉SLAM笔记(19) 相似变换群与李代数

    视觉SLAM笔记(19) 相似变换群与李代数 1. 相似变换 2. 群与李代数 3. 映射 4. BCH 近似 1. 相似变换 在 视觉SLAM笔记(2) 相机 已经介绍过单目的尺度不确定性 如果在单 ...

  9. CAN笔记(19) 网络管理

    CAN笔记(19) 网络管理 1. 网络管理 2. 节点状态 3. 节点上线报文 4. 心跳报文 5. 节点守护 6. 节点状态切换命令 7. 主站设备 1. 网络管理 一个 CANOpen 网络中为 ...

  10. ROS笔记(19) 摄像头仿真

    ROS笔记(19) 摄像头仿真 1. 创建模型 2. 添加模型 3. 添加Gazebo插件 4. Gazebo仿真 1. 创建模型 除了雷达这种传感器外,平时还会用到摄像头传感器 简单的构建一个长方体 ...

最新文章

  1. svm c++实现_机器学习笔记——SVM向量机
  2. 用7ch中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移位移。
  3. python小项目案例-拯救Python新手的几个项目实战
  4. Eclipse连接MySQL数据库(傻瓜篇)
  5. 可口的JAVA-并发控制之CountDownLatch
  6. python展示数据库视图_在Django的视图中使用数据库查询的方法
  7. 新春拜年被亲戚问到成绩时,怎么办?学会这6法,情商上涨蹭蹭蹭!
  8. VMware vSphere 文档--总目录vSphere 5.5 6.0 6.5 6.7 7.0
  9. 编译安装http启动问题
  10. centos7.2 开发 部署 .net core
  11. 【转】一致性hash算法与server列表维护
  12. 三星宣布首款 PCIe 5.0 企业级 SSD:PM1743,将于 2022 年推出
  13. 计算机汉字录入技能怎么上,用手动录入怎么样把文件录入电脑?快速录入文字...
  14. 中国大陆身份证号码有效性验证
  15. 爬虫第四关——寻找周杰伦
  16. win2012 r2/win2016修改域密码复杂度策略
  17. APP运营推广,如何做到“饱和攻击”
  18. 快手视频艾特实操教学分享,什么是艾特脚本,评论区艾特引流脚本讲解!
  19. NC81 二叉搜索树的第k个结点
  20. C++写一个内存清理软件(四、垃圾清理)

热门文章

  1. css td中画斜线,css 模拟表格斜线
  2. VBlog 的代码结构, 使用 element, vant 组件开发的纯前端博客
  3. torch.optim
  4. 服务器性能监控之WMI
  5. 系统wmi服务器,wmi的服务器实时监控系统
  6. ajax2 cors跨域,Koa2框架应用CORS完成跨域ajax要求
  7. cass坡度土方计算案例_四面放坡且坡度不同的工程土方,CASS怎么算?
  8. 多通道振弦传感器VTN416采集仪应用工程项目安全监测实用性强
  9. d2crub学习2 算合计
  10. 【数据分析实战】北京租房数据统计分析