小猫爪:S32K3学习笔记03-S32K3之eMIOS

  • 1 前言
  • 2 eMIOS资源介绍
  • 3 CNT和Counter Bus
  • 4 UC的工作模式
    • 4.1 General-Purpose Input and Output (GPIO) mode
    • 4.2 Single Action Input Capture (SAIC) mode
    • 4.3 Single Action Output Capture (SAOC) mode
    • 4.4 Input Pulse Width Measurement (IPWM) mode
    • 4.5 Input Period Measurement (IPM) Mode
    • 4.6 Double Action Output Compare (DAOC) mode
    • 4.7 Pulse Edge Counting (PEC) mode
    • 4.8 Modulus Counter (MC) mode
    • 4.9 Modulus Counter Buffered (MCB) mode
    • 4.10 Output Pulse Width and Frequency Modulation Buffered (OPWFMB) mode
    • 4.11 Center Aligned Output PWM with Dead Time Insertion Buffered (OPWMCB) mode
    • 4.12 Output PWM Buffered (OPWMB) mode
    • 4.13 Output PWM with Trigger (OPWMT) mode
  • 5 MCAL配置
    • 5.1 MCU
    • 5.2 MCL
    • 5.3 PWM
    • 5.4 ICU
    • 5.5 周期频率的计算
  • END

1 前言

  这几天简单的学习了一下K3的eMIOS,这应该也算是K3相比较K1的一个大升级吧,因为eMIOS比FlexTimer强,常常得用它来进行信号测量啊,PWM波生成啊之类的。下面就简单的介绍一下这个模块吧。

2 eMIOS资源介绍

  下面两个表对eMIOS的资源情况做了简单详尽的介绍,大家仔细观看。

  可以看到每个eMIOS模块都有24个通道(UC),这些通道都是相互独立的且又是互相配合,但是这些通道在结构上并不是一模一样,而是分成了4种通道类型,分别是TypeX,TypeY,TypeG,TypeH。这4种通道类型的区别就在于它们所支持的工作模式不同,下表显示了每种通道所支持的工作模式。


  下表显示三个eMIOS模块的24个通道分别是那种类型:

  为啥要设计不同结构的通道呢,这就是由eMIOS的工作原理来决定了,虽然说每个通道相互独立,但是eMIOS强大的功能需要由数个通道相互组合才能完全发挥。

3 CNT和Counter Bus

  eMIOS的通道,通道又叫Unified channels(UC)。eMIOS各个UC之间是怎么相互合作的呢,其中一个最重要的点就是Counter Bus。什么是Counter Bus呢?

  举个例子,在传统PWM生成模块中,里面都会有一个内部计数器,如果让其生成想要的PWM波则需要设置这个内部计数器的计数方式以及周期等,而eMIOS的Counter Bus则就是代替了这个内部计数器。而这个Counter Bus信号则就是另外一个UC的内部计数器CNT(每个UC内部都有一个内部计数器CNT)。

  所有,如果我们需要使用eMIOS生成PWM信号的话,首先则需要先配置通道A内部计数器CNT的计数方式和周期,让通道A的CNT变成其他通道的Counter Bus;随后再配置通道B以Counter Bus代替自己的CNT作为计数器,两者结合就可以生成PWM信号了,也就是说生成一个PWM信号需要两个通道相互配合才能生成。

  那么就有人问了,只使用一个通道不行吗,通道里面不是有一个CNT吗?答案是:当然可以。使用一个通道也是可以产生PWM的,这取决于通道的工作模式。因为每个通道是相互独立的,所以使用单个通道生成PWM做不到和别的通道生成的PWM同步,但是Counter Bus则完美的解决了这一点,因为多个通道可以共用一个Counter Bus。

  当然也不是所有的通道都可以生成Counter Bus,还记得前面提供eMIOS的24个UC的结构是不同的,只有TypeX型UC可以生成Counter Bus。

  经过上面的讲解,下面这副图就非常清晰了。

  TypeX型通道CH0,CH8,CH16分别生成局部Bus Counter_bus_B,Counter_bus_C,Counter_bus_D,局部Bus只能供给部分通道;TypeX型通道CH22,CH23生成全局Bus Counter_bus_A,Counter_bus_F,全局Bus可以为其他所有通道提供Bus。

4 UC的工作模式

  从上面的介绍中得知eMIOS的通道,支持很多种模式,接下来就对这些模式进行简单的介绍。

4.1 General-Purpose Input and Output (GPIO) mode

  这种模式属于UC的默认模式,或者叫初始状态吧,没啥暖用,唯一的作用就是用来作为过渡模式,也就说如果把一个UC由工作模式A变成工作模式B,那么就必须先UC变成GPIO模式,然后再将其配置成工作模式B。

#mermaid-svg-4kjf67zbTYZBE4SI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4kjf67zbTYZBE4SI .error-icon{fill:#552222;}#mermaid-svg-4kjf67zbTYZBE4SI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4kjf67zbTYZBE4SI .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-4kjf67zbTYZBE4SI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4kjf67zbTYZBE4SI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4kjf67zbTYZBE4SI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4kjf67zbTYZBE4SI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4kjf67zbTYZBE4SI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4kjf67zbTYZBE4SI .marker.cross{stroke:#333333;}#mermaid-svg-4kjf67zbTYZBE4SI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4kjf67zbTYZBE4SI .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4kjf67zbTYZBE4SI .cluster-label text{fill:#333;}#mermaid-svg-4kjf67zbTYZBE4SI .cluster-label span{color:#333;}#mermaid-svg-4kjf67zbTYZBE4SI .label text,#mermaid-svg-4kjf67zbTYZBE4SI span{fill:#333;color:#333;}#mermaid-svg-4kjf67zbTYZBE4SI .node rect,#mermaid-svg-4kjf67zbTYZBE4SI .node circle,#mermaid-svg-4kjf67zbTYZBE4SI .node ellipse,#mermaid-svg-4kjf67zbTYZBE4SI .node polygon,#mermaid-svg-4kjf67zbTYZBE4SI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4kjf67zbTYZBE4SI .node .label{text-align:center;}#mermaid-svg-4kjf67zbTYZBE4SI .node.clickable{cursor:pointer;}#mermaid-svg-4kjf67zbTYZBE4SI .arrowheadPath{fill:#333333;}#mermaid-svg-4kjf67zbTYZBE4SI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4kjf67zbTYZBE4SI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4kjf67zbTYZBE4SI .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-4kjf67zbTYZBE4SI .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-4kjf67zbTYZBE4SI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4kjf67zbTYZBE4SI .cluster text{fill:#333;}#mermaid-svg-4kjf67zbTYZBE4SI .cluster span{color:#333;}#mermaid-svg-4kjf67zbTYZBE4SI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4kjf67zbTYZBE4SI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

工作模式A
GPIO模式
工作模式B

4.2 Single Action Input Capture (SAIC) mode

  这个就是最简单的传统意义上的输入捕捉功能,检测到一个上升沿或者下降沿,UC就生成一个Flag信号Sn[FLAG],同时捕捉当前Counter Bus的值到AS2。

  1. 单边沿捕捉如下:

  2. 双边沿捕捉如下:

4.3 Single Action Output Capture (SAOC) mode

  这个也就是最简单的匹配匹配输出功能,给AS2写入一个值,当Counter Bus的值与AS2相等时,这个时候就会产生一个Flag信号,同时控制输出跳变或者翻转。

  1. 信号跳变

  2. 信号翻转

4.4 Input Pulse Width Measurement (IPWM) mode

  这个模式就是用来测量两个连续不同沿之间的宽度,即测量一个电平宽度。当检测到第一个沿(上升沿或者下降沿),捕捉Counter Bus的值,当检测到第二个沿(与第一个沿相反),再捕捉Counter Bus的值并产生一个Flag信号。

4.5 Input Period Measurement (IPM) Mode

  这个模式用来测量两个连续相同沿的宽度,通常用来测量信号周期,即检测到第一个沿(上升沿或者下降沿),捕捉Counter Bus的值,当检测到第二个沿(与第一个沿相通),再捕捉Counter Bus的值并产生一个Flag信号。

4.6 Double Action Output Compare (DAOC) mode

  这个模式通常用于生产一段固定长度的电平。这个模式相比较SAOC,就是它可以有两个比较输出,最常见的应用就是当第一个匹配事件发生时,输出信号翻转,第二个匹配事件发生时,输出信号再次翻转。第一个匹配成功后可生产Flag信号也可以不生成Flag信号(可配置),而第二个匹配成功后则肯定会产生Flag信号。

4.7 Pulse Edge Counting (PEC) mode

  这个模式通常用来测量信号的脉冲数或者边沿数。外部信号输入后,检测到有效信号后计数器累加,并且在当计数器CNT值发生匹配事件A后,复位计数器CNT并启动计数,发生匹配事件B后,停止计数并且输出Flag信号。

4.8 Modulus Counter (MC) mode

  这个模式就是典型的把一个通道变成一个传统定时器的功能了,或者可以为其他通道生成一个Counter base信号。可以工作在UP计数模式和Up Count-Down计数模式。中途可以随意修改匹配值AS1。

  1. 在UP计数模式下,可产生一个溢出Flag信号,如下图所示:
  2. 在Up Count-Down计数模式下,可产生两个匹配事件并产生Flag信号,分别是高低峰处AS1和BS1,如下图所示:

4.9 Modulus Counter Buffered (MCB) mode

  这个模式就是单纯的为了生成一个Counter Bus信号。它也有两种模式,跟MC模式一样,直接贴图:

  1. Up Count
  2. Up Count-Down Count

  个人猜测:至于它与MC模式有什么区别,我也不知道,反反复复研究了好久都不知道这个buffered代表了什么,如果后面我悟了,会回来更新的,我个人觉得就是使能了寄存器双缓存机制,让改变寄存器值得速度变得更加的快。)

4.10 Output Pulse Width and Frequency Modulation Buffered (OPWFMB) mode

  这个模式通常用来生成单个PWM信号,因为这种模式没有采用Counter Bus作为自己的计数器,至于原理很简单,直接贴图:

  CNT与AS1匹配后输出翻转,CNT与BS1匹配后输出再翻转,一个周期结束。也就是说AS1决定PWM的占空比,BS1则决定PWM的周期。

4.11 Center Aligned Output PWM with Dead Time Insertion Buffered (OPWMCB) mode

  这个模式通常用来生成同步PWM信号,因为这种模式使用了Counter Bus作为计数器,至于原理很简单,直接贴图:

  可以看到在这个模式下,还可以插入死区时间。AS1决定占空比,BS1决定死去时间,至于周期则由Counter Bus来决定。

4.12 Output PWM Buffered (OPWMB) mode

  这个模式也是用来生成同步PWM信号,如下图所示:

  这个模式与OPWFMB的区别就是它的周期是由选择的Counter Bus来决定的,而占空比则是由AS1和BS1共同决定。

4.13 Output PWM with Trigger (OPWMT) mode

  这个模式不仅能生成PWM,还可以用来生成触发信号,通常用其来配合其他通道生成同步触发信号来触发ADC。而这个模式必须选择外部计数器,而且还必须是MC up和MCB up驱动生成的Counter Bus。

5 MCAL配置

  下面就结合MCAL配置来把eMIOS模块用起来。首先设置完PORT的复用之后,接下来就是:

5.1 MCU

  首先得在MCU模块中使能eMIOS模块得时钟,以及设置参考时钟。

5.2 MCL

  然后得需要在MCL模块中激活eMIOS的支持,以及设置相应的counter bus。


  添加counter bus,如下图:

  这里需要注意以下,就是如果这个counter bus是给ICU使用的,即给输入捕获使用的,则必须设置成65535。

5.3 PWM

  如果是要产生PWM,则需要在PWM里面增加eMIOS的通道:


  设置完相应的工作模式,参考Counter bus之后,添加PWM通道:

  在这里需要注意的是,周期必须设置成与eMIOS通道相等,另外对于占空比,则是将占空比100等比变成了0x8000,举个例子,如果你要设置占空比为50%,那么这里的占空比则是要设置成0x4000。

  到这里为止,PWM就可以产生了。

5.4 ICU

  如果要使用eMIOS的输入捕获功能,则需要配置ICU模块,首先同样的在ICU中添加参考eMIOS通道:

  设置好通道的工作模式,参考counter bus:

  在这里需要注意的是,如果需要测量周期占空比,IPWM模式支持测量频率更大的信号,SAIC模式则小一点。之后就是添加ICU通道:

  到这里还没有完,还需要去在platfrom模块中使能eMIOS的中断以及注册相应的中断服务函数,因为ICU是需要中断来做的:

  至于通道数核服务函数名之间的对应关系如下:

中断服务函数 通道数
EMIOSx_0_IRQ 20~23
EMIOSx_1_IRQ 16~19
EMIOSx_2_IRQ 12~15
EMIOSx_3_IRQ 8~11
EMIOSx_4_IRQ 4~7
EMIOSx_5_IRQ 0~3

  当然也可以通过轮询的方式来实现,这种方式就不介绍了,此外还可以通过DMA的方式来实现,但是这种方法我觉得挺鸡肋的,这个数据量太小了。这里也不多做介绍了。

5.5 周期频率的计算

  下面来看一看周期频率的计算,举个例子来看一下计算过程。

  1. 首先第一步去看这个通道的Counter Bus来源是啥,比如这里选择的BUS_F,如下:
  2. 找到这个被引用的Counter Bus的配置,并且记住如下所示的三个参数:分别是MasterBusPrescaler, DefaultPeriod, MasterBusModeType。
  3. 找到eMIOS模块的总分频系数ClockDividerValue,如下:
  4. 找到eMIOS的参考时钟,并记录其参考时钟源,其实就是CoreClock,为160MHz,如下:

  得到这些参数就可以计算累加频率了,如下:累加频率 = CoreClock / ClockDividerValue / MasterBusPrescaler / DefaultPeriod。
所在在这里所设置的累加频率为:
160M / 32 / 1 / 50000 = 1000。

  最后再看看MasterBusModeType,也就是看看它的工作模式,如果是Up模式,则最后的频率为1000,如果是Up-Down模式,则最后的频率则为2000。

END

小猫爪:S32K3学习笔记03-S32K3之eMIOS相关推荐

  1. 小猫爪:S32K3学习笔记09-S32K3之Safety简介

    小猫爪:S32K3学习笔记09-S32K3之Safety简介 1 前言 2 Safety相关硬件介绍 3 Safety相关软件介绍 4 Safety文章目录 END 1 前言   接下来,就要开始进学 ...

  2. 小猫爪:S32K3学习笔记05-S32K3之ADC

    小猫爪:S32K3学习笔记05-S32K3之ADC 1 前言 2 资源简介 3 ADC功能详解 3.1 ADC mux-mode channels 3.2 ADC内部框架 3.3 时钟源 3.4 通道 ...

  3. 小猫爪:S32K3学习笔记10-S32K3之EIM和ERM

    小猫爪:S32K3学习笔记10-S32K3之EIM和ERM 1 前言 2 EIM(Error Injection Module) 3 ERM(Error Reporting Module) 4 MCA ...

  4. 小猫爪:S32K3学习笔记11-S32K3之FCCU

    小猫爪:S32K3学习笔记11-S32K3之FCCU 1 前言 2 FCCU的功能框图 2.1 错误输入 2.2 时钟输入 2.3 FSM 2.4 FOSU 3 FCCU的状态机 4 MCAL配置 5 ...

  5. 小猫爪:S32K3学习笔记04-S32K3之LCU

    小猫爪:S32K3学习笔记04-S32K3之LCU 1 前言 2 LCU的框架 3 LC逻辑运算单元 3.1 input&output&sync&force 3.2 LUT b ...

  6. 小猫爪:S32K3学习笔记21-S32K3之SAF及其应用

    小猫爪:S32K3学习笔记21-S32K3之SAF及其应用 1 前言 2 SAF简介 3 SAF框架 4 SAF组件 4.1 eMcem和Bist 4.2 sReco 4.3 mSel 4.4 sBo ...

  7. 小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段

    小猫爪:S32K3学习笔记17-S32K3之数据完整性的保障和手段 1 前言 2 三个保障 2.1 EDC 2.2 XBIC 2.3 ECC 3 一个手段 END 1 前言   大家都知道,怎样保证数 ...

  8. 小猫爪:S32K3学习笔记18-S32K3之Safety外设总结

    小猫爪:S32K3学习笔记18-S32K3之Safety外设总结 总结 END 总结   在前面已经对S32K3对功能安全这一块相关的外设大致都介绍了一遍,这篇文章就来对S32K3与Safety有关的 ...

  9. 小猫爪:S32K3学习笔记20:S32K3之SCST及其应用

    小猫爪:S32K3学习笔记20:S32K3之SCST及其应用 1 前言 2 SCST简介 3 移植 4 应用 4.1 启动测试 4.2 使能FPU相关测试项 4.3 49号测试项中的MPU配置 4.4 ...

最新文章

  1. Loss曲线震荡分析
  2. 心电信号去噪(part2)--中值滤波器
  3. tp5怎么生成短链接_请问在tp5中怎样才能使用url函数?
  4. MySQL高可用架构对比
  5. tcpdump: no suitable device found
  6. 中颖内带LED资源驱动代码
  7. 安卓自动滑屏脚本_【按键精灵】开发抖音全自动养号脚本!可实现自动滑屏
  8. YVU420PackedSemiPlanar32m4ka与YUV420PackedSemiPlanar64x32Tile2m8ka
  9. C#委托四(匿名方法)
  10. mysql5.7bka_mysql 5.7中的MRR和BKA算法
  11. python socks代理 命令行_python socks5 代理无法使用
  12. Javascript设计模式-18-状态模式
  13. 许奔创新社-第27问:创新者们如何进行跨界交流?
  14. linux ping -w 命令,Linux ping 命令
  15. vue中xlsx导出多个sheet页
  16. 无法安装64位版本的微软Office
  17. syx278250658
  18. 攻城狮应该明白的浏览器工作原理~
  19. Python正则表达式——数量词
  20. 瑞萨单片机之开发环境的搭建(一)

热门文章

  1. JBOSS整套开发组件整合和配置方法
  2. NSIS:静默释放文件并运行 制作绿色单文件软件
  3. UctoX for Mac v2.8.8 发票管理软件
  4. wms系统让仓库管理作业标准化
  5. 涉密信息系统集成甲级资质需要什么条件?
  6. [SAP] MRP MD01 无法运行MRP结果, MD02可运行问题查核及解决方法
  7. 继承属性:定义交通工具类Vehicle,一个小车类Car,一个公共汽车Bus类,实现Car、Bus对Vehicle的继承
  8. Immo Tool ECU软件 可对发动机ECU和防盗锁进 行维修和编码
  9. 电源专栏 | 硬件工程师常用的5V转3.3V方法
  10. Mifare Classic漏洞原理之一