当前位置: 首页 > backend >正文

TC3xx学习笔记-启动过程详解(二)

文章目录

    • 前言
    • ILLD-StartupSW启动流程
      • Startup Software: Phase 1-Reset Evaluation
      • Startup Software: Phase 2-PMS, LBIST, MBIST Handling
      • Startup Software: Phase 3-Enabling Function Calls @ CPU0
      • Startup Software: Phase 4-PLL and Clocks
      • Startup Software: Phase 5-Multicore Startup
      • Startup Software: Phase 6-C Initialization
    • 总结

前言

上一篇介绍了TC3xx硬件firmware的启动过程,链接:TC3xx学习笔记-启动过程详解(一)
,本文接着基于英飞凌ILLD库介绍软件的启动过程

ILLD-StartupSW启动流程

整体启动流程如下图所示:
在这里插入图片描述
在这里插入图片描述
不同的复位方式所运行的启动模块不同,所花的时间也不一样,复位原因可以从RSTSTAT寄存器读取在这里插入图片描述
SW就是软件复位,PORST就是上电复位

Startup Software: Phase 1-Reset Evaluation

在这里插入图片描述

void __StartUpSoftware(void)
{/* Set the PSW to its reset value in case of a warm start,clear PSW.IS */Ifx_Ssw_MTCR(CPU_PSW, IFX_CFG_SSW_PSW_DEFAULT);Ifx_Ssw_MTCR(CPU_PCXI, IFX_CFG_SSW_PCXI_DEFAULT);Ifx_Ssw_MTCR(CPU_FCX, IFX_CFG_SSW_FCX_DEFAULT);/* This phase is executed only if last reset is not of type application reset */if (Ifx_Ssw_isApplicationReset() != 1){Ifx_Ssw_jumpToFunction(__StartUpSoftware_Phase2);}else{Ifx_Ssw_jumpToFunction(__StartUpSoftware_Phase3ApplicationResetPath);}
}

设置PSW,PCXI,FCX寄存器为默认值,判断复位原因是否为Application复位,如果不是,则进入Phase2,否则进入Phase3ApplicationResetPath

Ifx_Ssw_isApplicationReset函数执行流程如下:
在这里插入图片描述

Startup Software: Phase 2-PMS, LBIST, MBIST Handling

在这里插入图片描述
›仅当上次复位为上电复位时,才执行此部分
在这一阶段的开始,电源的相关配置已经完成
›上次启动LBIST,导致电源热复位。这个阶段再次被执行。
›在LBIST错误的情况下触发回调应用程序
›CPU0 Stack和CSA触发MBIST (100MHz SPB)

static void __StartUpSoftware_Phase2(void)
{/* Power and EVRC configurations */IFX_CFG_SSW_CALLOUT_PMS_INIT();/* LBIST Tests and evaluation */IFX_CFG_SSW_CALLOUT_LBIST();/* MONBIST Tests and evaluation */IFX_CFG_SSW_CALLOUT_MONBIST();Ifx_Ssw_jumpToFunction(__StartUpSoftware_Phase3PowerOnResetPath);
}

实际是否执行BISI检测,需要对宏定义进行确认

Startup Software: Phase 3-Enabling Function Calls @ CPU0

在这里插入图片描述
›所有类型的重置都会执行此阶段
初始化CPU0 USTACK(用户栈指针)
-建立CPU0 CSA链表(上下文保存区)
—首次处理CPU0看门狗和Safety看门狗
;注意:
从这个时间点开始允许函数调用。但是Stack和CSA并没有经过完全的测试。
-还不能使用全局变量

static void __StartUpSoftware_Phase3PowerOnResetPath(void)
{IFX_SSW_INIT_CONTEXT();Ifx_Ssw_jumpToFunction(__StartUpSoftware_Phase4);
}

USTACK和CSA在IFX_SSW_INIT_CONTEXT进行初始化,实际并没有对看门狗处理

Startup Software: Phase 4-PLL and Clocks

在这里插入图片描述

static void __StartUpSoftware_Phase4(void)
{/* This is for ADAS chip, where clock is provided by MMIC chip. This has to be* implemented according the board.*/IFX_CFG_SSW_CALLOUT_MMIC_CHECK();{/* Update safety and cpu watchdog reload value*/unsigned short cpuWdtPassword    = Ifx_Ssw_getCpuWatchdogPasswordInline(&MODULE_SCU.WDTCPU[0]);unsigned short safetyWdtPassword = Ifx_Ssw_getSafetyWatchdogPasswordInline();/* servicing watchdog timers */Ifx_Ssw_serviceCpuWatchdog(&MODULE_SCU.WDTCPU[0], cpuWdtPassword);Ifx_Ssw_serviceSafetyWatchdog(safetyWdtPassword);}/* Initialize the clock system */IFX_CFG_SSW_CALLOUT_PLL_INIT();/* MBIST Tests and evaluation */IFX_CFG_SSW_CALLOUT_MBIST();Ifx_Ssw_jumpToFunction(__StartUpSoftware_Phase5);
}

MMIC检测,PLL,MBIST目前都没有内容,该阶段实际只有看门狗处理

Startup Software: Phase 5-Multicore Startup

在这里插入图片描述

static void __StartUpSoftware_Phase5(void)
{/* SMU alarm handling */IFX_CFG_SSW_CALLOUT_SMU();Ifx_Ssw_jumpToFunction(__StartUpSoftware_Phase6);
}

实际代码中阶段5 SMU配置没有内容,也没有启动多核

Startup Software: Phase 6-C Initialization

在这里插入图片描述

static void __StartUpSoftware_Phase6(void)
{/* Start remaining cores as a daisy-chain */
#if (IFX_CFG_SSW_ENABLE_TRICORE1 != 0)Ifx_Ssw_startCore(&MODULE_CPU1, (unsigned int)__START(1));           /*The status returned by function call is ignored */
#endif /* #if (IFX_CFG_CPU_CSTART_ENABLE_TRICORE1 != 0)*/
#if (IFX_CFG_SSW_ENABLE_TRICORE1 == 0)
#if (IFX_CFG_SSW_ENABLE_TRICORE2 != 0)Ifx_Ssw_startCore(&MODULE_CPU2, (unsigned int)__START(2));           /*The status returned by function call is ignored */
#endif
#endif /* #if (IFX_CFG_SSW_ENABLE_TRICORE1 == 0) */Ifx_Ssw_jumpToFunction(__Core0_start);
}

这个阶段实际也没有使能cache,设置中断,初始化全局变量,这些操作在__Core0_start里进行,此处的启动从核也没有起作用,后面是通过OS来启动多核的。

总结

IFX中的启动流程,有很多都没有起作用,例如PLL,BISI,SMU,Cache等,在__Core0_start中还有一些初始化之后,才会跳转到main函数中,后面会继续介绍。

http://www.xdnf.cn/news/14484.html

相关文章:

  • 最新文章 支持一下!!
  • Datawhale---AI办公实践与应用---Cpt2-用讯飞智文做一个小案例
  • 一个高质量的社交电商APP客户端UI解决方案
  • Nginx 配置中·IP地址变量
  • 深度学习的优化⽅法
  • 李沐--动手学深度学习 LSTM
  • 父亲节:传承孝道,守护亲情
  • MySQL 数据库自动备份批处理工具介绍
  • Vue 项目路由模式全解析:从 hash 到 history 再到 abstract
  • Podman 安装与运行 Nginx 容器完整指南(含访问验证)
  • 北斗导航 | 基于matlab的提升卫星导航单点定位精度的算法总结
  • 2022年以来大模型技术及生态发展汇总文档
  • MongoDB文档查询:从基础到进阶的探索之旅
  • 【Dify系列】【一】【安装与部署】【ubuntu22.04安装docker部署dify1.4.2】
  • 先理解软件工程,再谈AI辅助研发
  • 如何在软件公司推行狼性文化?可能存在哪些困难?
  • VSCODE + EIDE 下 STM32 编程使用部分外设无法通过编译:undefined reference to ‘xxx‘
  • 智芯协同:AI与智能硬件产业深度前瞻
  • 综述|探究深度学习在园艺研究中的应用
  • 基础知识-军品软件六性
  • MCP案例 - 数据可视化客户端
  • Python基础教学:航天工程领域的精确计算和金融领域的精确计算,分别采用的小数保留位数的方法有哪些?有什么区别?-由Deepseek产生
  • 思科基本理论
  • 高标准通信,Ethercat与CANopen网关服务制药工厂生产线实际方案
  • Qt如何生成和使用DLL动态链接库
  • 大语言模型:提示词决定自我反思效果: “检查回答是否错误” “验证回答是否正确”
  • ubuntu 22.04 安装部署logstash 7.10.0详细教程
  • NGINX Plus 管理与上报模块`ngx_mgmt_module`
  • 25年泰康保险养老社招入职统一测评(心理、认知、潜质)北森真题题库、高分攻略
  • leetcode0187. 重复的DNA序列-medium