S32K3学习笔记—S32K3之MCU模块
1、前言
后续关于MCAL的配置都是基于EB29.0,RTD3.0的配置,MCU是基于S32K324。前期312、344也都使用过,也是第一次使用NXP的多核,后续将记录各个模块学习过程。
环境安装及参考资料如下:
芯片手册:S32K3XXRM.pdf
EB工具 :EB29.0安装包
RTD及demo路径:RTD3.0和Demo
EB安装步骤:该博主写的很详细,参考一下[S32K3从0入门]NXP S32K3 环境安装及配置
2、模块作用
对于刚开始接触MCAL来讲,MCU模块算是比较基础且重要的一个模块,因为基本上所有的外设都和MCU模块相关联。此模块很大如果不搞清楚可能导致很多问题,因此单独记录一下这个模块。MCU模块最主要的作用就是配置时钟、设置工作模式等。此模块主要是根据芯片手册来配置,一定要多看芯片手册。
3、EB配置
关于这个模块的配置,可以按照以下顺序来进行配置。先分总的几个大类时钟源,再具体到某些特定的模块。否则要做很多无用功。
3.1.通用配置
对于不同模块的general都差不多是使能一些API,整个模块的通用配置啥的,如果没啥特殊需求就按照demo来配置就好
1.对于时钟源,我们不用的就需要失能,比如SXOCS如果不失能,会影响GPI功能
2.如果我们需要对多核做些操作,需要使能Core Boot Address Control
1.这个模块主要是外部晶振配置,按照实际项目修改就好了
3.2.时钟配置
根据芯片手册第六章Clocking得知,MCU的时钟源可由FIRC、SIRC、FXOCS、SXOCS、(锁相环)PLL生成,这些时钟都可以按照手册推荐的配置。下面是这几种时钟源的配置
1.如果FIRC在MCU控制下,则将其设置为TRUE。如果为FALSE,则MCU驱动程序将不会写入相应的寄存器
2、3.根据FIRC时钟分频因子,就可以得到时钟频率
4.是否支持standby模式使用
1.这个是特定的,供其他参考时钟使用,如果没用到,可以失能
1.默认使能晶振功能。如果我们需要用到GPI功能的IO,一定要失能该功能,否则功能不正常
2.指定了“计数值结束”,用于在重置后或开启时由振荡器稳定计数器进行比较。
3、4. 晶振断电控制,使能需要外接晶振
接下来就是PLL时钟的配置。
1.使能PLL时钟
3.调制类型选择-以标称频率为中心
4.StepSize = [McuPllFdMdp * (Mfi + McuPllFdMfn / 18432) * 18432] / (100 * McuPllFmStepNo).
5.StepNo=McuPllClockSelection)/(2McuPllFdFmodMcuPllDvRdiv)
6、7、8.使能PHI0、PHI1,并设置分频系数
9、2. PLL_VCO = 16M/2*120 = 960M
PLL_PHI0 = 960M / ( 5 + 1) = 160M
PLL_PHI1 = 960M / ( 5 + 1) = 160M
接下来关于MC_CGM mux 0 clocks的时钟树,在EB里面选择时钟来源,和选择对应的分频系数得到我们所需要的频率就好。
1.选择时钟源,按需选择,我此处选择PLL_PHI0_CLK
2.从PLL_PHI0_CLK 给到CORE_CLK的时钟需要的分频系数
3.默认Common trigger divider update,两种触发更新手册有详细的介绍,包括具体流程
4.PLL_PHI0_CLK时钟/分频系数 = 你需要的频率
其他的几个时钟也是类似,按照芯片手册设置好分频系数就行
从McuCgm0ClockMux1 到McuCgm0ClockMux11的配置都一样,我们只需要选择对于的时钟来源,设置好分频系数得到我们想要的频率就好。
1.选择STM0_CLK的时钟源,从芯片手册看有三个FXOSC_CLK、FIRC_CLK、AIPS_PLAT_CLK
2.使能STM0_CLK时钟输出
3、4.根据你需要的频率去配置分频系数
在配置完MCU模块之后,就需要将这些时钟给到其他模块使用,EB里面是在McuClockReferencePoint里面操作,类似于索引
此处的时钟参考点是和其他模块建立连接的,可以根据具体用到哪个模块来添加对应的时钟参考点。
至此,MCU的时钟树配置基本完成,对于S32K3的时钟有个大的了解,之后在新增模块啥的,也知道怎么去配置时钟。主要是提供一种思路,具体细节还需要多看手册,具体到需求去配置。
3.3.模式配置
S32K3模式有两种,正常模式和低功耗模式,主要看MCU休眠方案,一般MCU断电就可不考虑低功耗模式,下面介绍一种正常工作的配置,低功耗模式后续再记录
1.选择工作模式: RUN
2.只有在 Mode为SOC_STANDBY才可以选择主核
3.是否使能锁步核,该配置只用古S32K39X
1.使能Partition0的所有配置
2.CM7_0默认配置,不受MCU控制
3、4、5 :主要是从核的启动流程决定的,使能CM7_1时钟以及启动地址
外设时钟使能,这个地方很容易遗忘,前期在刚开始配置的时候可以全部外围时钟先使能,负载率会高点而已,等后期将负载率或优化的时候把不用的外围时钟再使能。本人前期再此犯过错,最后调试的时候看寄存器发现时钟没使能,挺难查的。
3.4.其他
有些比较细节的东西都是犯过错才总结出来的。如果用到高速的时钟我们需要使能LMAUTOEN,不使能可能导致大量的热量积攒导致MCU烧掉,这个NXP论坛也是提出了解决方案。具体参考如下:S32K344 Last Mile Regulator
1.RTD3.0是支持单独使能LMAUTOEN的,此处使能就好了,如果不支持就像论坛那样,不进行电源管理初始化,给到默认值就行
3.5 展望
MCU模块很庞大,有很多的配置项启动没有用过,只能说后续有需要再继续研究。一般都是在出问题之后去查芯片手册,然后解决问题。文章来源:https://www.toymoban.com/news/detail-776737.html
后续将不会单独的以一个模块来记录,感觉这样比较空旷,不便于理解,后续将以实现某功能来记录各个模块。文章来源地址https://www.toymoban.com/news/detail-776737.html
到了这里,关于S32K3学习笔记---S32K3之MCU模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!