目 录CONTENT

文章目录

S32K3学习笔记13-S32K3之CMU

moke
2024-08-05 / 0 评论 / 0 点赞 / 31 阅读 / 0 字

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.2 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

博主关闭了所有页面的评论