我正在开发 MCXN236VNLT 定制板。当我启用 RTC0 外设时,单片机会挂起,而且当我启用时钟并访问 RTC0 上的任何寄存器时,我的 Cyclone 会失去连接。 clock_config.c有以下作用:
CLOCK_SetPLL0Freq(&pll0Setup); /*!< 将 PLL0 配置为所需值 */
CLOCK_SetPll0MonitorMode(kSCG_Pll0MonitorDisable); /* Pll0 监测已禁用 */
CLOCK_SetupOsc32KClocking(kCLOCK_Osc32kToVbat); /* OSC_32 kHz 输出时钟到 启用启用 */
vbat_osc_config_tg_vbatOscConfig_BOARD_BootClockPLL150M = {
.coarseAdjustment = kVBAT_OscCoarseAdjustment05,
.enableInternalCapBank = true、
.enableCrystalOscillatorBypass = true、
.xtalCap = kVBAT_OscXtal12pFCap,
.extalCap = kVBAT_OscExtal12pFCap,
};
VBAT_SetOscConfig(VBAT0,&g_vbatOscConfig_BOARD_BootClockPLL150M);
SYSCON->CLOCK_CTRL|= syscon_clock_ctrl_fro1mhz_clk_ena_mask; /*!< 启用 FRO_1M */
CLOCK_EnableClock(kCLOCK_Rtc0);
rtc0->ctrl |= rtc_ctrl_clk_sel_mask; (hangs here!)
如果在调试器中跳过这一行,MCU 将继续启动,直到其他代码尝试访问 RTC0 上的任何寄存器。
目前我能想到的办法都试过了。Systick 和 MRT 也在运行,具有更高的中断优先级,但即使禁用,似乎也只是 RTC0 的时钟问题。
奇怪的是,当 McuxPresso 停止连接时,它会在 0x0 " 处打开 " adc0_irqHandler () 的选项卡,并在 0x0 处显示 " 没有可用于 " adc0_irqHandler () 的来源 " "
我使用的是外置 32768 晶振,如果我将时钟改为内置 16k 时钟,代码就能运行得更远一些:
status_t IRTC_Init(RTC_Type*基础 常数 IRTC_CONFIG_T*config)
{
assert(NULL != config);
并在"断言" 失败。"config" = 配置,而不是 NULL,这是怎么回事?唉!
如果您有任何新的看法或想法,我们将不胜感激!
感谢您的来信。正如您在MCXN947 上使用 32k osc 初始化 iRTC 失败中提到的,造成这一问题的原因是要求在 RTC 初始化和访问 RTC 寄存器之前提供时钟源。
默认情况下,RTC CTRL[CLK_SEL] 位域选择 FRO16K 时钟源。因此,在 RTC CTRL[CLK_SEL] 切换到 OSC32K 时钟源之前,FRO16K 时钟必须保持启用状态。这是正确初始化 RTCCLKSEL 时钟选择器的唯一正确方法。
此外,我还将为 MCXN236 创建一个内部票据。在获得永久性修复之前,请参考该帖子中描述的解决方法。
希望对你有所帮助。
BR
西莱斯特
你好,@jmullen_condose、
如@Celeste_Liu 所述,MCXN947 已报告过该问题。在最新版本的配置工具版本 26.03 中,MCXN236 MCU 的问题也已得到修复。请参阅禁用 FRO16K 和访问 RTC0->CTRL寄存器时提供的以下代码:
使用最新的配置工具 26.03 版本,该版本可为这种使用情况提供正确的初始化代码。
顺祝商祺!
马雷克-诺伊齐尔