增强型模块化IO子系统(eMIOS)
对于S32K324,有3个eMISO模块
Local Channel prescaler width:通道分频因子的位数,最大可以分16
Number of global counter buses:全局counter的通道数,一般是最后两个Channel
Global channel prescaler width:全局分频系数的位数,最大可以到256
eMIOS包含4种不同类型的通道,如下所示
通道23产生Counter_bus_A,通道22产生Counter_bus_F,这两个Counter可以作为其他通道的基准
通道0可以产生Counter_bus_B,通道8可以产生Counter_bus_C,通道16可以产生Counter_bus_D,这三个Counter可以作为其他7个通道的基准
除了通道23之外,其他的通道都可以触发BCTU
eMIOS提供独立通道UCs,您可以对其进行配置,以生成或测量不同芯片应用程序中不同功能的时间事件。也就是可以生成counter供其他通道使用,已达到同一参考源,实现PWM同步输出
和上面那个通道配置图一样,通道23产生Counter_bus_A,通道22产生Counter_bus_F,作为全局时钟
每个UC包含以下内容:
•两个双缓冲数据寄存器An和Bn,允许在需要软件干预之前发生最多两个事件(输入捕获、输出比较或两者同时发生)
•两个比较器A和B,指示所选计数器总线何时等于An和Bn中的值
•一种内部计数器(CNTn[C]),在除GPIO以外的所有模式下运行。(只有Type x和Type h的通道具有)
您可以使用此计数器作为本地时基或对输入事件进行计数。如果当前模式未使用CNTn[C],则可以将其用作时间基。
•一种输出触发器,用于保存应用于输出引脚的逻辑电平
•一个状态寄存器,UC status n (S0 - S23),标记输入捕获和匹配事件,指示标志溢出和溢出,并显示输入和输出引脚状态
•控制寄存器UC control n (C0 - C23),用于控制UC操作
您可以控制每个UC的以下操作特性:
•指定UC行为的逻辑(Cn[MODE])(参见UC模式)
•计数器总线(Cn[BSL]),为所有计时功能提供时基
•时钟分频CP寄存器(Cn[UCPRE] and C2_n[UCEXTPRE])
•用于确定有效引脚转换的输入滤波器的最小输入脉冲宽度(Cn[IF])
•要检测哪些输入边沿(Cn[EDSEL])
•四个输出禁用输入信号(Cn[ODISSL])中哪一个用于禁用输出
•除GPIO外的所有输出模式,是否关闭输出触发器(Cn[ODIS])
UC框图展示了UC的基本架构。
缓存模式有点像之前英飞凌GTM模块中的同步与异步模式
该模式禁用所有UC输入捕获和输出比较功能,并重置和禁用内部计数器(Cn[C])。所有控制字段仍可访问。
当UC需要切换到另一种工作模式时,需要先切换到GPIO模式,再切换到最终的工作模式。为了使UC适应新的运行模式,在退出GPIO模式并进入所需的最终模式(参见AS1、AS2、BS1和BS2阴影寄存器)之前,必须配置AS1、BS1、AS2和BS2。具体地说:
•在An[A]写入AS1和AS2中存储相同的值。
•在Bn[B]写入BS1和BS2中存储相同的值。
•在ALTAn[ALTA]写入AS2中存储值。
一般不会这么用
在此模式下,当输入引脚上发生触发事件时,eMIOS:
•将选择的时间基础捕获到AS2中
•将Sn[FLAG]更改为1,表示发生了输入捕获
An[A]返回AS2的值。UC退出GPIO模式后,一旦进入SAIC模式,通道就可以捕获事件。
eMIOS在事件发生时立即捕获事件。因此,读取An[A]总是返回最新捕获的事件的值。无论您是否从An[A]读取前一个事件,后续捕获事件都会发生。每个新的捕获事件设置输入捕获标志(写入1到Sn[flag])。
输入捕获由Cn[EDPOL]和Cn[EDSEL]配置的输入引脚上的边缘转换触发。
一种是只捕获时间戳,一种是捕获时间戳同时在AS2 bit 31显示输入的电平
Cn[EDPOL]:0b -在下降边缘触发
1b -在上升边缘触发
SAIC with rising edge triggering:
通过输入信号的上升沿跳变触发,在AS2中记录Counter bus的值,此处对应的Cn[MODE]应该是000_0010b,如果是100_0010b的话,最高位显示电平状态,最高位,应该为1
SAIC with both edges triggering
上升沿和下降沿都捕捉,通过配置Cn[EDSEL]=1
在此模式下,eMIOS将匹配值加载到AS2,然后立即将其传输到AS1,以便与所选时基进行比较。当输出比较匹配发生时,eMIOS:
•由Cn[EDSEL]决定,切换输出触发器或将Cn[EDPOL]传输到输出触发器。
•设置输入捕获标志(将Sn[flag]更改为1)。
随着匹配,Sn[FLAG]变成1,表示输出比较匹配已经发生。写入An[A]将值存储在AS2中,读取An[A]将返回AS1值。
SAOC模式下的通道内部计数器是自由运行的。一旦UC进入SAOC模式,它就开始计数
您可以通过在Cn[FORCMA]中写入1来强制输出比较匹配。强制输出比较匹配不设置输入捕获标志(Sn[flag])。
当UC退出GPIO模式后进入SAOC模式时,输出的触发器值成为Cn[EDPOL]的补码。
使用Cn[BSL]选择内部或外部计数器总线。
SAOC with Cn[EDPOL] transferred to the output flip-flop
在捕获发生时将EDPOL值通过eMIOS输出
SAOC toggling the output flip-flop
通过配置Cn[EDSEL] =1使Counter匹配时输出翻转
SAOC with flag behavior
输出在匹配后Flag set event后翻转,通过Flag clear清除flag output,允许继续翻转
此模式允许您测量正脉冲或负脉冲的宽度。选择从边缘极性(Cn[EDPOL])的上升沿或下降沿测量。
第一边沿:
•触发第一个输入捕获,它将所选时基的计数值锁存到BS2中(参见AS1、AS2、BS1和BS2阴影寄存器)
•不设置输入捕获标志(Sn[flag])
•启用AS2捕获
下一个边沿:
•锁定所选的时间基础到AS2
•设置输入捕获标志(Sn[flag])
•将BS2传输到BS1和AS1
eMIOS在极性相反的连续边缘上捕捉连续的值。如果您在设置输入捕获标志(Sn[flag])时发起后续输入捕获事件,eMIOS将使用最新捕获的值更新AS2、BS1和AS1,并保持该标志设置
Timing example: measure pulse width
通过AS2减去BS1得到脉冲宽度
Timing example: AS1 and BS1 updates on channel reads
读An时会用AS1更新BS1,读取Bn时会用AS1更新BS1
此模式允许您测量输入信号的周期。选择是否从边缘极性(Cn[EDPOL])的上升边或下降边测量。
所选极性的第一个边:
•将所选时基锁存到AS2和BS2中(参见AS1、AS2、BS1和BS2阴影寄存器)
•将BS2传输到BS1
•不设置输入捕获标志(Sn[flag])
同极性的第二个边沿
•将计数器总线值锁存到AS2和BS2中
•将BS2传输到BS1和AS1
•设置输入捕获标志(Sn[flag])
Timing example: measure input period
用AS2减去BS1即可得到输入信号的周期
Timing example: AS1 and BS1 updates on channel reads
读An时会用BS2更新AS1和BS1,读取Bn时会用BS2更新BS1
如果使能输出(write 0 to OUDIS[OUn]),在下一个时钟周期,UC会将AS2和BS2分别传输给AS1和BS1(参见Timing example: leading dead time insertion)。如果禁用输出(将1写入OUDIS[OUn]),则不会发生传输。
eMIOS独立地启用和禁用A和B比较器。它只在传输到AS1完成后启用比较器A,并在下一次匹配时禁用比较器A。类似地,eMIOS仅在向BS1传输完成后启用比较器B,并在下一次B匹配时禁用比较器B。
当比较器a上出现匹配时,输出触发器获得边缘极性(Cn[EDPOL])的值。当比较器B上出现匹配时,输出触发器获得边缘极性(Cn[EDPOL])的补码。
Force Match A (Cn[FORCMA])和Force Match B (Cn[FORCMB])允许您将输出触发器强制到与比较器对应的电平,A匹配的Edge Polarity (Cn[EDPOL])或B匹配的Edge Polarity的补码。强制匹配操作不设置输入捕获标志(Sn[flag])。
Timing example: flag on both matches
Counter匹配时输出翻转,且触发Sn[FLAG]
Timing example: flag on second match
Counter匹配时输出翻转,且只有在B时触发Sn[FLAG]
该模式计算所需时间窗口中在输入端检测到的脉冲或边的数量。Cn[EDSEL]和Cn[EDPOL]决定UC的哪些边计数。
在AS1中指定窗口开始时间,在BS1中指定窗口结束时间。写入AS1后,当所选时基与比较器A匹配时,eMIOS将重置内部计数器并开始计数输入事件。当时间基准与比较器B匹配时,eMIOS:
•禁用内部计数器。
•将计数器的内容传输到AS2。
•设置输入捕获标志(将Sn[flag]更改为1)。
通过读取Cn[C]或AS2可以获得检测到的脉冲数。
Timing example continuous
可以连续采集AS1到BS1的Counter
Timing example single-shot
只采集一次Counter
在这种模式下,UC为计数器总线或通用定时器产生一个时间基。内部计数器(Cn[C])从当前值开始计数,直到匹配AS1。
选择外部时钟源(参见MC子模式和MODE字段值)导致UC使用输入信号引脚作为源。使用“edge polarity (Cn[EDPOL])”和“edge select (Cn[EDSEL])”选择触发极性的边缘。
您必须只向An[A]写入非零值。写入一个[A]或内部计数器可能会导致错过匹配,计数器将在下一个周期中翻转并恢复操作。通道写0到BS1,这是MCU不能访问的。您可以读写BS2,但在此模式下不使用BS2。
Timing example: Up Count submode
写入AS2来更新AS1,counter达到AS1时产生Sn[FLAG]
Up Count-Down Count submode operation
在Up Count- down Count子模式下:
•当内部计数器匹配AS1时,计数器开始递减,UC设置输入捕获标志(Sn[flag])。
•当内部计数器匹配BS1时,计数器开始递增,如果在clear on match end operation (Cn[1] = 1)中,UC设置输入捕获标志(Sn[flag])。
Up Count with delayed reload operation
通过配置(C2n[UCRELDEL_INT])的值,可以设置匹配对应的次数之后再触发信号,配置为1时需要2次匹配
在这个模式下,UC生成一个timebase,可以通过内部计数器总线与其他通道共享
AS1是双缓冲的,所以你可以在任何时候用平滑过渡来改变AS2。UC在计数器周期边界处更新AS1,此时内部计数器(CNTn[C])过渡到1h。
必须确保内部计数器在1h到AS1值的范围内;否则,An[A]匹配不发生,这将导致内部计数器以最大计数器值换行(24位计数器为FF_FFFFh)。发生计数器溢出后,UC将计数器重置为1h,并恢复正常操作。
Timing example: Up Count submode
改变AS2后,本次匹配还是按之前的AS1触发,下一次按写入的AS2触发
和英飞凌的GTM中的同步模式有点像
Timing example: Up Count submode flag assertion
跟上面的区别是通过flag set event来触发flag output和Sn[FLAG]
Up Count-Down Count submode
计数器周期为:(2 * AS1) - 2。计数器在AS1匹配时改变方向并向下计数(递减),直到达到1h,然后再次向上计数(递增)。
UC在计数器周期边界更新AS1。如果用户在第n周期内写入AS2 (write An[A]), UC将使用第n+1周期的新值进行AS1匹配。可以禁用AS1 (OUDIS[OUn])的更新。
跟上面的区别是通过flag set event来触发flag output和Sn[FLAG]
Up Count mode with delayed reload operation
通过配置(C2n[UCRELDEL_INT])的值,可以设置匹配对应的次数之后再触发信号,配置为1时需要2次匹配
在这种模式下,UC产生一个输出信号,具有:
•AS1确定占空比。
•BS1确定周期。
内部计数器范围为1h ~ BS1。写入BS1时,必须只写入大于1h的值。写0h或1h会导致不可预测的结果。
选择该方式时,UC会自动选择内部通道计数器作为时基。该模式支持占空比从0%到100%。
当比较器a出现匹配时,UC将Cn[EDPOL]驱动到输出触发器上。当比较器B上出现匹配时,UC将Cn[EDPOL]的补码驱动到输出触发器上。BS1匹配还会导致内部计数器转换到1h,从而重新启动计数器周期。
Timing example: AS1 and BS1 match
Counter匹配AS1时,输出电平翻转,Counter匹配BS1时再次翻转
当UC从GPIO模式进入OPWMCB模式时:
•UC驱动输出触发器上的边缘极性(Cn[EDPOL])的补充。
•使用总线选择(Cn[BSL])选择时间基。所选择的时基必须以Up Count-Down Count mode运行。必须在UC进入OPWMCB模式后启动MCB timebase,以避免在第一个占空比时错过匹配。
•在AS1中存储PWM信号的理想占空比(写入An[A]), UC将其与所选时基进行比较。
•将失效时间值存储在BS1中(写入Bn[B])
内部计数器可以使用内部预分频比,而所选时基可以使用不同的预分频比。当AS1匹配发生时,UC总是将内部计数器重置为1h。
Timing example: leading dead time insertion
这个例子说明了一个中心对齐的PWM信号的两个周期。AS1和BS1值在同一时间内发生变化,这允许您同时更改占空比和死区时间值。
AS1决定占空比,BS1决定死区时间。Counter bus达到AS1后触发内部计数,计数到BS1时触发输出电平翻转,Counter bus再次达到AS1后触发电平翻转。
有效输出一直是中心对齐的,且带一段时间的死区
在这种模式下,UC产生具有可编程的前端和后缘位置的PWM脉冲。你必须从一个计数器总线上选择一个在MCB Up模式下驱动的外部计数器。AS1和BS1分别定义第一边和第二边。Cn[EDPOL]定义输出信号的极性。如果Cn[EDPOL] = 0,则AS1匹配所选计数器总线时为负边,BS1匹配所选计数器总线时为正边。
以下规则适用于OPWMB模式:
•如果在同一计数周期内,AS1和BS1同时出现,则BS1优先于AS1。
•周期n内AS1 = 0的匹配优先于周期n-1内BS1的匹配。
•如果AS1匹配发生在同一时间段内的BS1匹配之后,则UC会屏蔽AS1匹配
•当用户在第n周期内向AS2或BS2写入任何值时,UC会在下一个周期边界(假设OUDIS (Output Update Disable))对应的OUn字段为0)将其加载到AS1和BS1中,因此UC使用AS1的新值,BS1在第n+1周期内匹配。
Timing example: matches and flags
AS1和BS1共同决定占空比,此模式下没有内部计数器,所以没法修改周期。设置该模式的PWM通道共用一个计数器,可以做到PWM同步触发。
上图使用的触发模式是AS1和BS1都触发,也可以选择只在BS1触发
在这种模式下,UC产生PWM脉冲,当UC输出信号时,周期不改变,但占空比改变。当占空比发生变化时,它不能产生故障。该模式支持多个UCs在同一模式下执行,并共享一个公共的时基。每个UC相对于其他UC具有固定的PWM前沿位置。它还可以在周期的任何时间点产生触发信号。eMIOS可以输出这个触发信号来启动芯片其他部分的活动——例如,启动ADC转换。
UC只在AS2匹配处设置输入捕获标志(Sn[flag])。AS1、BS1或BS2匹配对标志没有影响。
PIF以时钟周期为单位指定可以通过滤波器的最小输入脉冲宽度。它支持旁路操作(Cn[IF]),输入信号在到达数字滤波器之前同步,或以2的幂为单位从2到16个时钟周期。
PIF是一个5位可编程上升计数器。所选时钟源在输入过滤器(Cn[IF]0)指定的时钟周期数之后递增递增计数器。
输入信号发生改变后,只有在5-bit计数器超过设定的cycle之后,才会改变输出状态。起到一个滤波的效果
eMIOS将GCP输出信号除以UC CP (Cn[UCPRE] + 1),生成UC内部计数器的时钟使能。参见全局时钟预标器(GCP)。在Cn[UCPREN]后写入1使能UC CP。如果关闭CP(对同一字段写入0),eMIOS将停止UC内部计数器
BIU提供IIB和外设总线之间的接口,允许所有子模块和IP接口之间的通信。BIU支持在一个时钟周期内通过32位数据总线进行8位、16位和32位访问
eMIOS将系统时钟除以GCP (MCR[GPRE] + 1),并将结果的预标时钟输出路由到通道CPs。通过向MCR[GPREN]写入1使能GCP。如果禁用GCP(将0写入同一字段),eMIOS将清除预分频计数器并停止预分频时钟。
eMIOS_0 base address: 4008_8000h
eMIOS_1 base address: 4008_C000h
eMIOS_2 base address: 4009_0000h
MDIS:通过停止时钟禁用eMIOS。
FRZ:准备eMIOS进入冻结状态(参见冻结和芯片调试模式)。eMIOS不会进入冻结状态,直到出现以下两种情况:
•芯片处于调试模式。
•每个UC都启用冻结(写1到Cn[FREN])。
GTBE:使能全局Timebase
GPREN:使能时钟全局预分频
GPRE:全局时钟预分频因子。分频为8,写111b。预分频器的取值范围为1 (0b) ~ 256 (11111111b)。
将所有通道的标志字段分组到一个寄存器中,以提高中断处理。
对于UCs,每个字段都映射对应的通道标志(Sn[flag])。
通过停止UC时钟禁用UC。每个字段控制对应UC的时钟。
FREN:使UC处于冻结状态。
ODIS:当运行除GPIO以外的任何输出模式时禁用输出引脚。
ODISSL:选择四个输出禁用输入信号之一。
UCPRE:内部分频系数
UCPREN:使能分频
DMA:使能DMA,否则触发中断
IF:输入滤波
FCK:滤波时钟选择
FEN:启用输入捕获标志(Sn[flag])以生成中断请求或DMA请求
FORCMA:强制匹配比较器A
FORCMB:强制匹配比较器B
BSL:选择Counter_bus
EDSEL: