MCAL-MCU
1.概述
https://blog.csdn.net/qq_43629659/article/details/133050046
MCU模块提供了访问内核相关功能的API,如时钟配置、初始化RAM、设置低功耗模式、提供复位接口等等。
1.1 时钟
上图左边位输入时钟源,右侧为输出时钟,需要选择合适的时钟源并通过倍频,分频来得到需要的时钟源。
S32K14X时钟源:
1.2 运行模式
各运行模式下的时钟源及配置
1.3 时钟计算
如果选用CORE_CLK为80M,使用系统FIRC达不到,需要使用sosc通过SPLL倍频。
SPLL
SPLL_CLK = SOSC(8MHz)* 40(PLL倍频)/ 2(PLL分频)= 160MHz.
CORE_CLK \ SYS_BUS = SPLL_CLK / 2(DIVCORE分频)= 80MHz.
BUS_CLK = SPLL_CLK / 2(DIVCORE分频)/ 2 (DIVBUS分频)= 40MHz.
FLASH_CLK = SPLL_CLK / 2(DIVCORE分频)/ 4(DIVFLASH分频)= 20MHz.
通过上面的公式可以看到我们通过PLL倍频后,时钟频率达到了160MHz。后续再通过分频达到我们想要的频率。从上面公式可以得到配置参数:
1.4 复位源
系统的复位信息可以通过读取SSRS寄存器来获取。
1.5 复位
(AIRCR)Application Interrupt and Reset Control Register
Mcu_CortexM4.c
FUNC(void, MCU_CODE) Mcu_CM4_SystemReset(void)
{
ASM_KEYWORD(" dsb"); /* All memory accesses have to be completed before reset */
/** @violates @ref Mcu_CortexM4_c_REF_4 Required Rule 11.1, Conversion from integer to pointer */
/** @violates @ref Mcu_CortexM4_c_REF_5 The cast is used to access memory mapped registers.*/
REG_WRITE32( CM4_AIRCR_BASEADDR, (uint32)(CM4_AIRCR_VECTKEY(0x5FAU) | (REG_READ32(CM4_AIRCR_BASEADDR) & CM4_AIRCR_PRIGROUP_MASK) | CM4_AIRCR_SYSRESETREQ_MASK ));
ASM_KEYWORD(" dsb"); /* All memory accesses have to be completed */
}