【Autosar】MCAL - WDG(NXP - S32K14x)

2023-11-11 06:41
文章标签 autosar nxp wdg mcal s32k14x

本文主要是介绍【Autosar】MCAL - WDG(NXP - S32K14x),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • MCAL - WDG(NXP - S32K14x)
    • 1. 概述
      • 1.1 看门狗工作原理
      • 1.2 看门狗时钟源
      • 1.3 软件超时时间介绍
    • 2. API
    • 3. 配置介绍
      • 3.1 General
      • 3.4 WdgSettingsConfig
        • 3.4.1 General
        • 3.4.2 WdgSetting(Fast / Slow / Off)

MCAL - WDG(NXP - S32K14x)

MCAL - 汇总

配置工具:EB Tresos Studio
芯片类型:S32K146

1. 概述

看门狗是为了程序能够按照预期执行,不会出现死循环、程序跑飞等异常情况发生。在设置的规定时间内用户需要对看门狗进行喂狗操作,否则发生看门狗复位。看门狗有三种工作模式:Fast、Slow、Off。

1.1 看门狗工作原理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 硬件部分

如上图所示,看门狗模块中,将Counter Register寄存器与Timeout Value Register寄存器进行比较,当计数值>超时时间时,会控制CPU Reset。通过设置Refresh Sequence Write Control寄存器进行喂狗,喂狗后Counter Register会被清0。这里的喂狗操作由GPT(定时器)配合,GPT中断回调函数配置看门狗喂狗(用户无需关心),GPT的触发时间为超时时间的一半。由于设计关系,GPT的时钟频率需要与看门狗的时钟频率保持一致

  • 软件部分

由于看门狗的寄存器为16Bit,最大值为65535,假设时钟频率为8MHz,最大超时时间 = 65535 / 8000000 ≈ 0.008s,NXP为了放大超时时间,在RAM中设置了一个超时时间变量让用户去设置,对于用户来说,这个才是看门狗。

1.2 看门狗时钟源

在这里插入图片描述
WDG的时钟源可选择的有:LPO_CLKSOSC_CLKSIRC_CLK

1.3 软件超时时间介绍

在这里插入图片描述
关注点:

  1. Gpt超时时间(硬件喂狗)
  2. 软件周期喂狗时间(软件喂狗)
  3. 软件周期设置超时时间(这个超时时间是软件看门狗的超时时间

个人总结:公式:软件超时时间 >= n * (X/2) && n * (X/2) > 周期任务)

Wdg_ChannelTrigger函数中可以找到如下代码,每一次Gpt定时中断触发进行喂狗的时候,都会对软件超时时间进行操作,当剩余超时时间 < Gpt周期触发时间的时候停止定时器(停止喂狗),否则剩余超时间减去Gpt周期触发时间

if( Wdg_au32Timeout[Wdg_Instance] < Wdg_au32GptPeriod[Wdg_Instance])
{MCAL_FAULT_INJECTION_POINT(T_WDG_INJ_TG_0);SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_00();Gpt_StopTimer(Wdg_apConfigPtr[Wdg_Instance]->Wdg_TimerChannel);
}
else
{u32TempTimeout = Wdg_au32Timeout[Wdg_Instance] - Wdg_au32GptPeriod[Wdg_Instance];Wdg_au32Timeout[Wdg_Instance] = u32TempTimeout;SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_00();          Wdg_IPW_Trigger(Wdg_Instance);
}

Wdg_ChannelSetTriggerCondition函数中可以找到如下代码,当用户去设置超时时间的时候,系统会判断Gpt_Elapsed>剩余超时时间,则停止定时器(停止喂狗),当下一次看门狗超时了就会发生复位。

/** @violates @ref Wdg_c_REF_7 MISRA 2004 Required Rule 10.1, The value of expression of integer type shall not be implicilty */
uElapsedTime =  Gpt_GetTimeElapsed(Wdg_apConfigPtr[Wdg_Instance]->Wdg_TimerChannel);
if (((uint16)(uElapsedTime) > Wdg_au32Timeout[Wdg_Instance]) || ((uint16)0 == u16Timeout))
{Wdg_au32Timeout[Wdg_Instance] = (uint32)0;SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_03();Gpt_StopTimer(Wdg_apConfigPtr[Wdg_Instance]->Wdg_TimerChannel);
}

看门狗超时后CPU发生复位,跳转至Reset_Handler:
在这里插入图片描述

2. API

函数描述
Wdg_Init看门狗初始化
Wdg_SetMode看门狗模式设置
Wdg_SetTriggerCondition看门狗超时时间设置(非寄存器值)

3. 配置介绍

3.1 General

在这里插入图片描述

Wdg Initial Timeout:初始超时时间

​在Wdg_ChannelInit函数中可以看到WDG_INITIAL_TIMEOUT_U16,在Wdg初始化的时候,超时时间的初始值为该值:

/**
* @brief  This variable will indicate the Wdg Initial Timeout parameter in miliseconds
*/
#define WDG_INITIAL_TIMEOUT_U16 ((uint16)1000)
Wdg_au32Timeout[Wdg_Instance] = (uint32)(WDG_INITIAL_TIMEOUT_U16 *(Wdg_apConfigPtr[Wdg_Instance]->Wdg_u32TriggerSourceClock));

Wdg Max Timeout:最大可设置的超时时间,用于合法性检查

从下面这段代码可以看到,设置超时时间的时候,会去与该值进行比较,若超出范围则报错:

/**
* @brief  This variable will indicate the Wdg Max Timeout parameter in miliseconds
*/
#define WDG_MAX_TIMEOUT_U16     ((uint16)65000)
LOCAL_INLINE FUNC(Std_ReturnType, WDG_CODE) Wdg_ValidateTimeout(VAR(uint16, AUTOMATIC)u16Timeout,CONST(Wdg_IPW_InstanceType, WDG_CONST) Wdg_Instance)
{VAR(Std_ReturnType, AUTOMATIC) valid = (Std_ReturnType)E_OK;if (u16Timeout > WDG_MAX_TIMEOUT_U16){(void)Det_ReportError((uint16)WDG_CHANNEL_MODULE_ID, (uint8)Wdg_au8Index[Wdg_Instance],(uint8)WDG_SETTRIGGERCONDITION_ID,(uint8)WDG_E_PARAM_TIMEOUT);valid = (Std_ReturnType)E_NOT_OK;}return valid;
}

Wdg Reconfiguration Success Timeout:看门狗初始化超时时间

Wdg_Wdog_Init函数中可以看到WDG_RECONFIGURATION_TIMEOUT,对WDG配置后,检查是否配置成功,若配置失败则报告错误:

/** 
* @brief  This is a timeout value which is used to wait till WDG_CS[RCS] is reset to show that the WDOG is reconfigured
*/
#define WDG_RECONFIGURATION_TIMEOUT  (65535UL)
u32Timeout = (uint32)WDG_RECONFIGURATION_TIMEOUT;/* @violates @ref Wdg_Wdog_c_REF_4 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*/
/* @violates @ref Wdg_Wdog_c_REF_6 Violates MISRA 2004 Rule 11.3, Cast from unsigned long to pointer.*/
REG_WRITE32(WDOG_CS_ADDR32(Wdg_Instance),(Wdog_pConfigPtr->Wdog_u32Config));/* Check if reconfiguration was done in the timeout */
/* @violates @ref Wdg_Wdog_c_REF_4 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*/
/* @violates @ref Wdg_Wdog_c_REF_6 Violates MISRA 2004 Rule 11.3, Cast from unsigned long to pointer.*/
u32TempRec = REG_READ32(WDOG_CS_ADDR32(Wdg_Instance)) & WDOG_REC_SUCCESS_U32;
while ((u32Timeout > 0UL) && (u32TempRec != WDOG_REC_SUCCESS_U32))
{u32Timeout--;/* @violates @ref Wdg_Wdog_c_REF_4 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*//* @violates @ref Wdg_Wdog_c_REF_6 Violates MISRA 2004 Rule 11.3, Cast from unsigned long to pointer.*/u32TempRec = REG_READ32(WDOG_CS_ADDR32(Wdg_Instance)) & WDOG_REC_SUCCESS_U32;
}if (0UL == u32Timeout)
{#if (WDG_DISABLE_DEM_REPORT_ERROR_STATUS == STD_OFF)if((uint32)STD_ON == Wdg_E_Timeout_Expired.state){Dem_ReportErrorStatus((Dem_EventIdType)Wdg_E_Timeout_Expired.id, DEM_EVENT_STATUS_FAILED);}#endif
}

3.4 WdgSettingsConfig

3.4.1 General

配置看门狗的默认模式

在这里插入图片描述

Wdg Default Mode:看门狗默认模式配置(Fast/Slow/Off)

Wdg External Trigger Counter:配置关联的Gpt(WDG控制GPT来实现启/停喂狗)

3.4.2 WdgSetting(Fast / Slow / Off)

不同模式下的Wdg配置

在这里插入图片描述

Wdg Clock Value:时钟频率值(选择完时钟参考点后,自动计算即可)

WdgClkSecRef:Wdg时钟参考点

Wdg Operation Mode:超时处理模式(Interrupt / ResetOnTimeOut)

Wdg Clock Selection:S时钟源选择

Wdg Timeout Period:定时周期(因为硬件最大计数为65536,所以0.008 * 8000000 = 64000已接近最大值)

在这里插入图片描述


参考资料:

S32K-RM.pdf - NXP

AUTOSAR_MCAL_WDG_UM[1].pdf - NXP

这篇关于【Autosar】MCAL - WDG(NXP - S32K14x)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/388236

相关文章

基于Hypervisor智能驾舱的AUTOSAR解决方案

MENTOR嵌入式管理程序 目前,通常使用两种类型的管理程序(图6): Type 1本机管理程序:一种在硬件上本机运行的管理程序,因为它充当核心中的操作系统。Type 2托管虚拟机监控程序:此类型的虚拟机监控程序必须由另一个操作系统托管,并且仅负责使用主机操作系统可用的资源来虚拟化客户操作系统。 图6:虚拟机管理程序 虚拟化的工作原理是从硬件上运行的应用程序中抽象出物理硬件和设备。虚拟化流程管理

Autosar(Davinci) --- 创建一个S/R类型的port(下)

前言:         前面章节我们讲解了S/R类型的Port如何创建,这一章节,我们着重讲一下生成的代码,以及我们如何添加代码让这些门与灯之间的关系产生连接。 一、CtSaDoor.c 在【Rte.c】的【IO_TASK】中我们可以看到,反复的判断Rte_Ev_Cyclic_IO_Task_0_200ms这个条件是否成立,当200ms到达时,调用RCtSaDoorReadDoor函数,去读

NXP,S32K1XX汽车通用微控制器开发笔记

文章目录 1. 概述2. 开发环境配置2.1 S32 Design Studio2.2 安装SDK2.3 新建demo工程2.4 字体配置2.5 按需求修改demo2.5.1 修改pin脚定义2.5.2 增加串口打印功能 2.6 编译代码2.7 debuger 配置 参考 1. 概述 S32K1系列32位微控制器(MCU)提供基于Arm® Cortex®-M的MCU,以及基

NXP S32DS IDE设置背景护眼色

NXP的S32DS是基于eclipse开发的,因此可以搜eclipse的一些配置,基本上可以设置。

AUTOSAR Adaptive与智能汽车E/E架构发展趋势

AUTOSAR Adaptive是一个面向现代汽车应用需求的标准,特别适用于那些需要高计算能力和灵活性的应用。以下是AUTOSAR Adaptive的典型特性: 高计算能力:AUTOSAR Adaptive支持使用MPU(微处理器),这些处理器的性能与PC或智能手机中的处理器相当。这样的高计算能力是实现半自动驾驶和其他复杂功能所必需的。动态更新和管理:AUTOSAR Adaptive的架构允

LIN协议栈 AUTOSAR架构下 状态管理

一、LIN State Manager 概述 功能 :负责控制 LIN 总线的通信状态,包括切换调度表(仅 LIN 主节点)、处理睡眠和唤醒操作、通知上层新状态等。约束 :每个 ECU 中最多有一个实例;所有关于调度表的操作仅适用于 LIN 主节点;适用于所有使用 LIN 的汽车领域。依赖关系 :依赖于 Communication Manager(ComM)和 LIN Interface(Lin

Autosar OS基础知识导图

Autosar OS基础 概述 Autosar简介 定义 Autosar(汽车开放系统架构)是由汽车制造商,软件供应商及其他相关厂商专为汽车软件合作指定的规范、标准、架构。 目标 建立一个独立于硬件的分层软件架构‌:‌实现高内聚、‌低耦合,‌提高软件的可重用性、‌可扩展性和互操作性。为应用实施提供一套方法论‌:‌包括制定无缝的软件架构堆叠流程,‌并将应用软件无缝整合至ECU中。制定统一的车

AUTOSAR开源OS——Trampoline的编译与使用(一)

环境准备 本人环境 CentOS7 代码下载 GitHub上去clone对应的代码到本地 git clone https://github.com/TrampolineRTOS/trampoline.git 编译goil 进入到如下目录/trampoline/goil/makefile-unix cd /trampoline/goil/makefile-unix 使用如下命令

【MCAL】TC397+EB-tresos之SPI配置实战 - (同步/异步)

本篇文章首先从理论讲起,从AUTOSAR规范以及MCAL手册两个不同角度(前者偏理论,后者偏实践)介绍了SPI模块的背景概念与理论,帮助读者在实际配置之前能有个理论的框架。然后详细的介绍了在TC397平台使用EB tresos对SPI驱动模块进行配置与调试的实战过程,帮助第一次接触这个模块的读者能够更快的上手来实现符合自己项目要求的开发工作,完成SPI通信。文章分别从同步和异步两种方式介绍了配置

AUTOSAR_EXP_ARAComAPI的5章笔记(1)

5.1 High Level API Structure ara::com提供了一个支持AUTOSAR服务模型的API。服务有Method、Event、Filed和Trigger。 Method:在服务应用程序中执行一个可以返回值的函数(如校准方法)。 Event:当特定条件发生时(例如制动事件),服务应用程序发送一个事件(也可能包括一个值)。客户端应用程序可以订阅事件。 Filed:在