IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 小猫爪:S32K3学习笔记19-S32K3之如何集成SPD进自己的工程 -> 正文阅读

[嵌入式]小猫爪:S32K3学习笔记19-S32K3之如何集成SPD进自己的工程

小猫爪:S32K3学习笔记19-S32K3之如何集成SPD进自己的工程

1 前言

??前面已经将S32K3的与功能安全相关的硬件外设大致都梳理了一遍,前面在Safety简介中提到了NXP针对S32K3不同的安全机制共发布了免费的RTD和SPD,以及收费的SAF和SCST,如果恰逢你手头拮据,只能用免费的软件,而RTD和SPD又是两个独立的软件包,那么怎样将二者集成一下呢?

??首先下载SPD包并安装,有如下内容:
在这里插入图片描述
??我们需要用到的是SafetyBase, eMcem, Bist这三个模块。其中SafetyBase没啥东西,就是一些头文件,Bist模块实现了STCU2 BIST的功能,eMcem模块实现了FCCU, ERM, EIM, XBIC, DCM的功能。

2 EB的配置

??首先将SafetyBase, eMcem, Bist这三个模块对应的文件夹复制到EB的安装目录plugins下,让EB可以找到相关的模块。然后就是在自己的EB工程中添加这三个模块,如下:
在这里插入图片描述
??这样EB这边的配置就完成了。

3 S32DS的配置

??对于S32DS这边的配置,就更简单了,把EB生成的代码以及RTD,SPD的源代码加入到自己的工程里面去,然后还需要修改一下链接文件,具体修改的地方如下:
在这里插入图片描述

4 代码的集成

??接下来就是怎样在代码中集成SPD了,如果需要用SPD来实现一个基本的程序设计,那么在理想情况下,软件设计的基本流程如下:
在这里插入图片描述
??下面贴出SPD初始化的代码:

void Spd_Init(void)
{
	Mcu_ResetType  ResetReason = MCU_RESET_UNDEFINED;
	ResetReason = Mcu_GetResetReason();
	switch(ResetReason)
	{
		case MCU_POWER_ON_RESET:
			break;
	    //.....
		default:
			break;
	}
	/****************************************************************************
	 * if BIST(STCU) is not run yet, run LBIST and MBIST,
	 * this will trigger a ST_DONE functional reset.
	 * BIST must run with PLL enabled and CPU run in full-performance mode.
	 * BIST must run with FCCU faults detection disabled.
	 ***************************************************************************/
//#define DEMO_ENABLE_BIST
#ifdef DEMO_ENABLE_BIST
	Bist_StatusType bistStatus;
	uint32 stcuStatus;
	Std_ReturnType retStatus;
	Bist_LBistRDListType Bist_LBistRDList = 0U;
	Bist_MBistRDListType Bist_MBistRDList = 0U;

	bistStatus = Bist_GetExecStatus(BIST_SAFETYBOOT_CFG);

	if( bistStatus != BIST_OK )
	{
		if(bistStatus == BIST_ERROR)
		{
			/* Reads STCU ERR_STAT register to identify what HW error occured */
			stcuStatus = Bist_GetRawErrorStatus();
			(void) stcuStatus;
		}
		else if(bistStatus == BIST_FAILED)
		{
			/* Analyze which reset domain is failing */
			retStatus = Bist_GetFailRDs ( &Bist_LBistRDList, &Bist_MBistRDList );
			(void) retStatus;
		}
		else if(bistStatus == BIST_BUSY)
		{
			while( 1U );   /* Handle BIST HW busy state */
		}
		else if(bistStatus == BIST_NORUN)
		{
			/* Bist execution was not successfully performed due to HW hazard state. */
			Bist_Run(BIST_SAFETYBOOT_CFG);   /* Re-start execution */
		}
		else if(bistStatus == BIST_INTEGRITY_FAIL)
		{
			while( 1U );   /* Handle the integrity fail state */
		}
	}
#endif

	/* enable MemManageFault, BusFault, UsageFault in SCB to use individual exception handler. Otherwise, the HardFault handler is used */
	//S32_SCB->SHCSR |= (S32_SCB_SHCSR_MEMFAULTENA_MASK|S32_SCB_SHCSR_BUSFAULTENA_MASK|S32_SCB_SHCSR_USGFAULTENA_MASK);

	/**************************************************/
	/* eMcem example code                             */
	/**************************************************/
	/* User can get FCCU fault first if previous reset is FCCU FUNC Reset which is caused by certain FCCU fault */
	eMcem_GetErrors( &faultContainer );
	if(faultContainer.au32Faults[0] | faultContainer.au32Faults[1] | faultContainer.au32Faults[2])
	{
		printf("faultContainer = 0x%08X, 0x%08X, 0x%08X. \r\n", (unsigned int)faultContainer.au32Faults[0], (unsigned int)faultContainer.au32Faults[1], (unsigned int)faultContainer.au32Faults[2]);
	}

	/* Initialize eMcem */
    if( eMcem_Init( &eMcem_Config_0 ) != (Std_ReturnType)E_OK )
    {
		/* Handle initialization failure */
		printf("FCCU init failure.\r\n");
		printf("DCMROD3=0x%08X, DCMROD4=0x%08X, DCMROD5=0x%08X.\r\n", (unsigned int)IP_DCM_GPR->DCMROD3, (unsigned int)IP_DCM_GPR->DCMROD4, (unsigned int)IP_DCM_GPR->DCMROD5);
		printf("Trigger software destructive reset.\r\n");
		while( 1U );
	}
	printf("FCCU init completed.\r\n");
}

END

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:35:28  更:2022-04-01 23:37:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:22:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码