NXP S32K3xx Fast Wakeup 与 Normal Wakeup 的区别与配置

文章对比了S32K3微控制器的Fastwakeup和Normalwakeup两种唤醒方式,强调Fastwakeup不支持HSE功能,而Normalwakeup则会初始化HSE。配置过程中涉及DCM_GPR模块的DCMRWF5寄存器,该寄存器的bit0决定唤醒方式。在Fastwakeup中,需要自定义唤醒后的执行地址并处理紧急任务,然后跳转到正常启动代码。高版本的EB工具简化了这一配置过程。
摘要由CSDN通过智能技术生成

关于S32K3的具体休眠唤醒配置,以及一些注意事项,在之前的文章中已经介绍过了:
S32K3_Power(低功耗) standby模式配置与唤醒(wakeup)-- 基于Mcal层
NXP S32K3 用PIT的RTI定时器来唤醒MCU
本文主要对比两种唤醒方式,从应用层面,Fast wakeup方式不能使用HSE功能,因为通过Fast wakeup起来没有初始化HSE。而normal wakeup起来则是初始化了HSE的。HSE的初始化大概需要22ms左右的时间。

对于fast、normal wakeup,我们需要关注DCM_GPR模块的DCMRWF5寄存器,如下图所示:
在这里插入图片描述
在休眠之前,我们配置上述寄存器,此寄存器的bit0决定采用那种方式唤醒,1为fast wakeup,0为normal wakeup。如果是我们将bit0置1,即采用fast wakeup的方式,那么就需要同时配置bit1–bit31,这是一个用户自定义的向量表地址,表示fast wakeup起来后,我们从这个地址开始执行。
对于fast wakeup的配置,在S32K3的SDK前期的版本是通过直接写寄存器配置的,而非使用EB生成。如下所示:

	if(Mcu_GetResetReason() < MCU_WAKEUP_REASON )
	{
#if(WKUP_USE_FAST)
		IP_DCM_GPR->DCMRWF5 = (uint32_t )VectorTable |  /* Vector table address for Fast Standby Exit */
						   0x00000001UL;             /* Enable Fast Standby Exit */
		IP_PMC->CONFIG |= PMC_CONFIG_FAST_RECOVERY_ENABLE;/*Enable capacitor fast charging after standby exit*/
		IP_DCM_GPR->DCMRWF2 |= DCM_GPR_DCMRWF2_SIRC_TRIM_BYP_STDBY_EXT_MASK |  /* Bypass SIRC trimming on standby exit */
							DCM_GPR_DCMRWF2_PMC_TRIM_RGM_DCF_BYP_STDBY_EXT_MASK |  /* bypass the PMC trimming and RGM DCF loading on standby exit */
							DCM_GPR_DCMRWF2_FIRC_TRIM_BYP_STDBY_EXT_MASK |  /* Bypass FIRC trimming on standby exit */
							DCM_GPR_DCMRWF2_DCM_SCAN_BYP_STDBY_EXT_MASK;  /* bypass the DCM scanning on standby exit */
#else
		IP_DCM_GPR->DCMRWF5 = 0x00000000UL;             /* Enable Normal Standby Exit */
#endif
	}

if中时fast wake up的配置,else中时normal wake up的配置。在后面的高版本EB中,可直接配置,不用用户手写上述代码,EB配置如下所示:
在这里插入图片描述
其中Boot Base Address即代码中的这段

IP_DCM_GPR->DCMRWF5 = (uint32_t )VectorTable

但EB配置中是以十进制的方式来配置的,4202496对应的十六进制为0x20408000。也就是说fast wake唤醒后是从0x20408000这个地址开始执行的。
fast wake起来,我们需要定义一个向量表,让代码从这里开始执行,0x20408000为栈地址的开始,然后我们可以定义一个用户函数FastWkup_EntryAddress,来执行一些比较紧急的事,比如发送个CAN报文出去(需要直接操作寄存器,初始化CAN,因为这个时候什么都还没有初始化),还包括失能pad keeping功能,改变时钟为FIRC等。
在这里插入图片描述
在FastWkup_EntryAddress函数的最后,我们在执行

__asm("bl Reset_Handler");

跳转到正常的MCU启动代码,重新开始。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NXP的S32K1xx系列芯片的配置包括以下几个方面。首先,S32K1xx系列芯片具有用作系统RAM的FlexRAM或SRAM_L位置,其大小为4 KB(对于S32K14x系列)或2 KB(对于S32K11x系列)(引用\[1\])。其次,S32K1xx系列芯片可以使用S32DS作为集成开发环境(IDE),该IDE使用GCC编译器,并支持Lauterbach、P&E和Jlink等调试器。此外,S32DS还集成了NXP芯片底层和一些中间层的SDK,以及可以免费试用的AUTOSAR的MCAL(引用\[2\])。最后,如果S32K1xx芯片在其状态寄存器中发出内部故障信号,系统可能会切换到安全状态并禁用或重置设备作为对错误指示的反应(引用\[3\])。 #### 引用[.reference_title] - *1* *3* [S32K1xx 系列安全手册](https://blog.csdn.net/LIAOYUANGANG/article/details/125922906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [S32K1XX系列单片机 ——(1)开发环境搭建](https://blog.csdn.net/weixin_42967006/article/details/121806156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值