小猫爪:S32K3学习笔记13-S32K3之CMU

小猫爪:S32K3学习笔记13-S32K3之CMU

1 前言

  这一节来看看S32K3在时钟方面的安全监测,那就是CMU(Clock Monitor Unit),这个模块就是专门来监测时钟的。

2 CMU介绍

  S32K3总共有6个CMU通道,按照功能分为CMU_FC(Frequency Check)通道和CMU_FM(Frequency Meter)通道,而这6个通道则分为了CMU_FC_0,CMU_FM_1,CMU_FM_2,CMU_FC_3,CMU_FC_4,CMU_FC_5这6个通道,所以S32K3有4个监测通道和2个测量通道。另外还有一点就是这6个通道所监测的时钟对象也是一开始就定死了,如下图:
在这里插入图片描述

2.1 CMU_FC

  下图为CMU_FU的功能框图:
在这里插入图片描述
  CMU_FU的功能非常简单,就是用一个参考时钟去监控一个被检测时钟,如果两者的频率相差超过最高High阈值或超过最低Low阈值(两个阈值皆可配置),那么就会触发中断或者破坏性复位(同一时间二选一)。在这里需要注意一点的就是,只有CMU_FC_0才能触发中断或者破坏性复位,而CMU_FC_3, CMU_FC_4, CMU_FC_5只能触发破坏性复位,所以在中断向量表中找不到CMU_FC_3, CMU_FC_4, CMU_FC_5的中断号,只有CMU_FC_0的中断号CMU0_IRQn。

2.1 CMU_FM

  下图为CMU_FM的功能框图:
在这里插入图片描述
  CMU_FU的功能也是非常简单,就是用一个参考时钟去测量另外一个时钟,简单至极,这里就不用多说什么,当完成一次测量后就会触发一个测量完成中断,CMU_FM_1和CMU_FM_2分别对应中断向量的CMU1_IRQn,CMU2_IRQn。

2.3 总结

  下面列出一个表格总结一下6个CMU通道的特征:

通道名功能被监测时钟参考时钟特征
CMU_FC_0检测FXOSC(8~40MHz)FIRC异常时触发中断或者破坏性复位
CMU_FM_1测量FIRC (48MHz)FXOSC测量完成后触发中断
CMU_FM_2测量SIRC (32KHz)FXOSC测量完成后触发中断
CMU_FM_3检测CORE_CLKFXOSC异常时触发破坏性复位
CMU_FM_3检测AIPS_PLAT_CLKFIRC异常时触发破坏性复位
CMU_FM_3检测HSE_CLKFIRC异常时触发破坏性复位

3 MCAL配置

  CMU的MCAL配置被集成到了Mcu模块中,首先第一步使能CMU的时钟:
在这里插入图片描述
  接下来先完成CMU_FC的配置,先在McuClockSettingConfi->McuCLKMonitor中添加CMU_FC通道,之前说过,CMU最大支持4个FC通道,如下:
在这里插入图片描述
  随后对每个通道进行配置,我以一条为例,如下:‘
在这里插入图片描述
  前面提到了CMU_FC_0是可以支持异常时是触发中断还是触发破坏性复位,在这里的表现就是Enable FHH/FLL Asynchronous Event即发生异常时触发破坏性复位,而Enable FHH/FLL interrupt为发生异常时触发中断,同一时间这两者只能选择一个。

  随后还需要在Mcu->Generate中配置一些关于CMU的选项,首先使能错误报告回调函数,如下:
在这里插入图片描述
  在这里需要注意的是这里的McuCmuNotification并不是单单为CMU_FM_0的错误中断服务的,而是给整个时钟初始化使用的,如果在时钟初始化过程中,发现时钟初始化错误或者失败MCAL都会调用这个错误回调函数,这个通知函数是需要用户自己去实现的,可以添加一些适当的处理方法,这个通知函数会传递一个参数,为出现错误的时钟名,如下:

void McuCmuNotification(Clock_Ip_NameType clockName)
{
	Clock_Ip_NameType tempclockName;
	tempclockName = clockName;
	switch(tempclockName)
	{
		case FXOSC_CLK:
			
			break;
		case SIRC_CLK:
			
			break;
		case FIRC_CLK:
			
			break;
			
	    //.......
		//.......		
			
		default:
			while(1);
			break;
	}
}

  随后再使能Clock Failure Notification,如下:
在这里插入图片描述
  如果配置CMU_FC_0为异常时触发中断,那么我们还需要在Platfrom中使能CMU0_IRQn的中断并注册其对应的服务函数,如下:
在这里插入图片描述
在这里插入图片描述
  到这里关于CMU_FC的MCAL配置就结束。这个时候就有人要问了,那CMU_FM呢?答案是,我在当前的RTD1.0.0中也没找到CMU_FM的驱动,所以我也不知道。

END

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值