前言
本文介绍CP AUTOSAR 架构下的Wdg组件,基于S32K144芯片、NXP提供的MCAL包,使用EB Tresos工具进行配置的经验,不具体介绍芯片看门狗外设的功能。
Wdg组件实现MCU的内部看门狗驱动,提供给上层组件WdgIf,给予看门狗的开启、关闭、喂狗、喂狗时间设置功能。
Wdg组件位于Microcontroller Drivers层里。
一、原理解析
Wdg为了给上层组件WdgM实现功能安全功能,与常规的看门狗功能不同,使用了Gpt组件进行配合,喂狗行为发生在Gpt定时器中断里,用来自定义超时时间。
Wdg分为三种模式,OFF、SLOW、FAST,OFF下看门狗和定时器通道是关闭的,SLOW和FAST区别主要根据用户进行的配置,如时间配置、是否为窗口模式。
Wdg实际看门狗触发时间体现在SLOW和FAST模式下的配置参数里,在调用Wdg_Init和Wdg_SetMode时进行更新,平常不可修改,喂狗时间由定时器进行触发,如在FAST模式里实际的触发时间设置了100MS,调用Wdg_SetTriggerCondition接口后设置超时时间,如设置了110MS,那么Wdg组件将喂狗定时器时间设置为50MS(为实际触发时间的一半),在50MS触发后判断超时时间为110MS,大于喂狗时间,那么进行一次喂狗,并将超时时间变为60MS,下一次喂狗时间到发现还是大于50MS,再进行一次喂狗,将超时时间变为10MS,下一次再进时,发现大于超时时间便停止喂狗,直到看门狗触发进行了复位动作。
Wdg_Init和Wdg_SetTriggerCondition函数能更新超时时间,因此若想看门狗不触发,需一直调用Wdg_SetTriggerCondition来更新超时时间。
二、代码架构
Wdg_Wdog.c实现内部寄存器的操作,Wdg_Channel.c实现WDG的基本功能,Wdg.c封装Wdg_Channel.c供给外部用户使用。
Gpt组件里生成Wdg_Cbk_GptNotification0回调,用来给Wdg喂狗。
Wdg_au32GptPeriod是定时器的喂狗时间,Wdg_au32Timeout是用户设置的Wdg超时时间,每次Gpt中断触发后,如果Wdg_au32Timeout大于Wdg_au32GptPeriod就进行喂狗操作然后Wdg_au32Timeout时间减少,除非用户调用Wdg_SetTriggerCondition更新Wdg_au32Timeout,如果Wdg_au32Timeout小于Wdg_au32GptPeriod就停止定时器然后狗溢出。
三、主要变量和类型描述
Wdg_Channel.c里的Wdg_au32GptPeriod用来记录定时器的时间,Wdg_au32Timeout用来记录当前超时时间,当Wdg_au32Timeout小于Wdg_au32GptPeriod时定时器停止和不喂狗,大于Wdg_au32GptPeriod时进行喂狗,并减去Wdg_au32GptPeriod时间,下一次再进行判断。
四、主要代码描述
供外部使用的接口为:
(一)、FUNC(void, WDG_CODE) Wdg_Init(P2CONST(Wdg_ConfigType, AUTOMATIC, WDG_APPL_CONST) pConfigPtr)
实现MCU内部看门狗的驱动初始化,根据入参pConfigPtr进行看门狗寄存器的配置,如模式设置、时间设置等,还有设置初始模式,初始超时时间。
(二)、FUNC(Std_ReturnType, WDG_CODE) Wdg_SetMode(WdgIf_ModeType Mode)
使看门狗进入OFF、SLOW、FAST模式。SLOW和FAST模式下看门狗才进行工作
(三)、FUNC(void, WDG_CODE) Wdg_SetTriggerCondition(uint16 u16Timeout)
更新看门狗超时时间,不是实际的触发时间,超时时间应该要比触发时间要大。
五、EBTresos配置
主要配置如下:
Wdg Initial Timeout为设置WDGDRV初始超时时间,一般要大于Wdg Timeout Period,在调用Wdg_Init后起作用。
Wdg MaxTimeout为设置最大超时时间限值,平时设的超时时间不能大于这个时间,不然上报错误。
Wdg Default Mode为设置初始模式,在调用Wdg_Init后起作用。
Wdg Clock Selection为时钟源,一般为MCU的内部低频时钟LPO128KHZ。
Wdg Timeout Period为看门狗的触发时间。
Wdg_Cbk_GptNotification0需要在Gpt组件里添加。
六、使用范例
在调用Wdg_Init()后,需要不断调用Wdg_SetTriggerCondition()进行更新超时时间。
七、参考资料
https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SRS_WatchdogDriver.pdf
https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SWS_WatchdogDriver.pdf
https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf
总结
占用定时器资源,只适合在AUTOSAR架构里使用。