S32K312 MCAL 外设时钟使能 Peripheral clock enbale

背景

  • 由于前期开发板迟迟未到,故在S32K312收件验证时现场调试盲配的MCAL,将调试过程和知识做一个简单的记录

bug描述

  • 调试过程中执行到初始化DMA,读DMA寄存器时就会触发硬件错误,程序跑飞到HardFault_Handler()

调试过程

  • 单步调试过程中发现在外设寄存器监控窗口中,clock monitoring下面的寄存器不可读,考虑是时钟配置问题,查找MCAL模块配置。

  • 在S32DS IDE中,MCAL MCU模块 -> McuModwuleConfiguration -> McuModeSettingConf -> McuPeripheral 中,相应的eDMA0的外设时钟没有enable,勾选后更新代码,问题解决。

Lesson&Learn

  • 配置一个外设,首先要配置时钟树能够给出时钟信号到该外设模块,其次要使能该外设时钟,接下来外设的功能配置才是有效的

  • 查询S32K3xx的用户手册,在45章介绍了Mode Entry Module(MC_ME),下图表明了外设初始化的流程,需要通过配置PRTN _COFB _CLKEN[REQ] 来使能外设时钟。对应的外设模块和寄存器控制位在 45.1.5 Peripheral clock gating 可以找到

  • 通过修改S32DS外设时钟使能后,查看更新代码的变更,可以发现就是在MC_ME中(eDMA0)对应的外设时钟寄存器掩位中增加了对应的控制位

### S32K312 微控制器时钟配置步骤 对于S32K312微控制器而言,其时钟系统的配置至关重要。为了确保各个外设能够正常工作并达到预期性能,必须按照特定的顺序来设置内部与时钟相关的参数。 #### 1. 初始化模式进入模块 (MC_ME) 在外设初始化之前,需先通过配置`PRTN_COFB_CLKEN[REQ]`位以激活所需的外围设备时钟[^2]。此操作允许访问后续用于调整频率和其他特性的寄存器。 #### 2. 设置系统振荡器 由于S32K312不支持外部晶体连接至SXOSC引脚,因此应考虑采用其他方式获取稳定的时间基准信号。可以选择内置RC振荡器作为初始源,并根据需求切换到更精确的选择如FRO(固定参考振荡器)或IRC(内部电阻电容网络)。具体实现方法取决于应用场景的要求以及是否有可用的外部组件接口[^1]。 #### 3. 构建完整的时钟树结构 构建合理的时钟分配路径是优化功耗和提高效率的关键所在。这涉及到多个层次上的分频/倍频处理: - **PLL**:相位锁定环路可以用来放大输入频率; - **AHB/APB预分频器**:这些机制负责降低高速总线的速度以便适应不同速度等级下的外设运作条件; - **局部外设时钟门控**:仅当某个功能单元被实际调用时才开启相应的供电线路,从而减少不必要的能量消耗。 以上各项设定均应在官方提供的软件包指导下完成,比如利用MCAL库函数简化编程过程[^4]。 ```c // 示例代码片段展示如何启用 CAN 模块的时钟供应 void enable_CAN_clock(void){ /* Enable the clock gate for CAN module */ PCC->PCCn[PCC_INDEX_CAN].CGR |= PCC_PCCR_CLOCK_GATE_ENABLE_MASK; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值