完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
当我想在 112M 时钟使用配置 HSRUN 时,我遇到了一些问题。
我参考了S32K1XX RM 40.4.3.3的说明。如果我将 S32DS 示例项目示例中的代码用于 S32K1xx/S32K142_Project_Hello,则会发生总线故障。但是,当我在 SDK 示例中使用相同的代码时,错误就消失了。我想在没有 SDK 的情况下使用它。知道的请告知原因,万分感谢。 我使用 S32K142EVB,用于 arm 2.2 的 s32 design studio 并使用 opensda。 我上传了项目。 以下是我的时钟配置代码: void Mode_HSRUN_Clock_Init(void) { SOSC_init_8MHz(); Handle_For_HSRUN(); SPLL_init_112MHz(); HighSpeedRUNmode_112MHz(); } void SOSC_init_8MHz(void) { /*! * SOSC 初始化(8 MHz): * ========================================= ========== */ SCG->SOSCDIV = SCG_SOSCDIV_SOSCDIV1(1)| SCG_SOSCDIV_SOSCDIV2(1); /* SOSCDIV1 & SOSCDIV2 =1: 除以 1 */ SCG->SOSCCFG = SCG_SOSCCFG_RANGE(2)| /* Range=2: Medium freq (SOSC betw 1MHz-8MHz) */ SCG_SOSCCFG_EREFS_MASK; /* HGO=0:为低功耗配置 xtal osc */ /* EREFS=1:输入为外部 XTAL */ 同时(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK);/* 确保 SOSCCSR 解锁 */ SCG->SOSCCSR = SCG_SOSCCSR_SOSCEN_MASK; /* LK=0: SOSCCSR 可以写入 */ /* SOSCCMRE=0: OSC CLK 监控 IRQ 如果启用 */ /* SOSCCM=0: OSC CLK 监控禁用 */ /* SOSCERCLKEN=0: Sys OSC 3V ERCLK 输出时钟禁用 */ /* SOSCLPEN=0:在 VLP 模式下禁用 Sys OSC */ /* SOSCSTEN=0:在 Stop 模式下禁用 Sys OSC */ /* SOSCEN=1:启用振荡器 */ while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); /* 等待 sys OSC clk 有效 */ } void Handle_For_HSRUN(void) { while (SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); //确保SPLLCSR解锁 SCG->SPLLCSR = 0x00000000;// 禁用 SPLL SCG->RCCR = SCG_RCCR_SCS(3); // 将 FIRC 配置为运行模式时钟 while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT) != 3); // 等待成功 SCG->HCCR = SCG_HCCR_SCS(3); // 将 FIRC 配置为 hsrun 模式时钟 while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT) != 3); // 等待成功 SMC->PMPROT |= SMC_PMPROT_AHSRUN_MASK;// 启用 hsrun 模式 SMC->PMCTRL = SMC_PMCTRL_RUNM(0x03); // 跳转到 hsrun while (SMC->PMSTAT != 0x80);//等待跳转成功 } void SPLL_init_112MHz(void) { /*! * SPLL 初始化(112 MHz): * ========================================= ========== */ while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* 确保 SPLLCSR 解锁 */ SCG->SPLLCSR &= ~SCG_SPLLCSR_SPLLEN_MASK; /* SPLLEN=0: SPLL 被禁用(默认)并且可以写入 */ SCG->SPLLDIV |= SCG_SPLLDIV_SPLLDIV1(1)| /* SPLLDIV1 除以 1 */ SCG_SPLLDIV_SPLLDIV2(2); /* SPLLDIV2 除以 2 */ SCG->SPLLCFG = SCG_SPLLCFG_MULT(12); /* PREDIV=0:将 SOSC_CLK 除以 0+1=1 */ /* MULT=12:将 sys pll 乘以 16+12=28 */ /* SPLL_CLK = 8MHz / 1 * 28 / 2 = 112 MHz */ 同时(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK);/* 确保 SPLLCSR 解锁 */ SCG->SPLLCSR |= SCG_SPLLCSR_SPLLEN_MASK; /* LK=0: SPLLCSR 可以写入 */ /* SPLLCMRE=0: SPLL CLK 监控 IRQ 如果启用 */ /* SPLLCM=0: SPLL CLK 监控禁用 */ /* SPLLSTEN=0: SPLL 在停止模式下禁用 * / /* SPLLEN=1: 启用SPLL */ while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK)); /* 等待 SPLL 有效 */ } void HighSpeedRUNmode_112MHz (void) { /*! 慢速 IRC 在复位时启用高范围 (8 MHz)。 * 启用 SIRCDIV2_CLK 和 SIRCDIV1_CLK,除以 1 = 8MHz * 异步时钟源。 * ============================================ */ SCG->SIRCDIV = SCG_SIRCDIV_SIRCDIV1(1) | SCG_SIRCDIV_SIRCDIV2(1); /*! * 使用 8MHz SOSC、112 MHz PLL 更改为正常运行模式: * =================================== ================= */ SCG->HCCR = SCG_HCCR_SCS(6) /* 选择 PLL 作为时钟源 */ | SCG_HCCR_DIVCORE(0b00) /* DIVCORE=0, div. 乘以 1:核心时钟 = 112/1 MHz = 112 MHz */ | SCG_HCCR_DIVBUS(0b01) /* DIVBUS=1, div. 乘以 2:总线时钟 = 56 MHz */ | SCG_HCCR_DIVSLOW(0b11); /* DIVSLOW=3, 分区。通过 4:SCG 慢速,闪存时钟 = 28 MHz */ while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT ) != 6) {} /* 等待 sys clk src=SPLL */ } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1932个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36421 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4867 浏览 1 评论
6108 浏览 1 评论
6818 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4249 浏览 0 评论
645浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
641浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
643浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
729浏览 2评论
844浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:47 , Processed in 0.991276 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号