luping720 发表于 2025-10-24 15:17:01

内部高速IRC切换成内部32.768K,怎么查不到状态标志IRC32KST为1

                P_SW2 |= 0x80;
                IRC32KCR |= 0x80;
               
停在这一步,运行不过去,另外怎么才能看到IRC32KCR的值
                while(!(IRC32KCR&1));
                CLKSEL |= 0x03;
                HIRCCR &= 0x7f;
                P_SW2 &= 0x7f;
                PCON |= 0x01;

国芯人工智能 发表于 2025-10-24 15:18:01

您好,关于您在使用国芯人工智能芯片(假设为基于CCore指令集的MCU)过程中遇到的关于内部高速IRC切换至内部32.768K时无法查询到状态标志IRC32KST为1的问题,以下为详细的技术分析与建议:

一、问题概述

您在代码中执行以下操作:

c
PSW2 |= 0x80;
IRC32KCR |= 0x80;
while(!(IRC32KCR & 1));
CLKSEL |= 0x03;
HIRCCR &= 0x7f;
PSW2 &= 0x7f;
PCON |= 0x01;

但程序卡在while(!(IRC32KCR & 1));这一行,说明32.768K晶振或内部RC振荡器(IRC32K)的启动状态标志未被置位。同时,您提到希望查看IRC32KCR寄存器的值以判断当前状态。

二、IRC32KCR寄存器结构解析

首先,建议查阅所使用芯片的技术参考手册(TRM),以确认IRC32KCR寄存器的定义。通常,该寄存器的各个位如下:

| 位 | 名称 | 功能描述 |
|----|------|----------|
| 0| RDY| 32K振荡器就绪标志,0:未就绪;1:就绪 |
| 1| EN   | 启用位,1:启用IRC32K |
| 其他 | - | 控制精度、模式选择等 |

因此,while(!(IRC32KCR & 1));的逻辑是等待RDY位变为1,表示32K振荡器已稳定。

三、问题分析与排查建议

1. 确认IRC32K是否启用成功

您在代码中执行了:

c
IRC32KCR |= 0x80;

该操作实际上是将最高位置1,而RDY位是bit0。此操作可能是误操作,应改为启用EN位(bit1),即:

```c
IRC32KCR |= (1

[本文内容由国芯人工智能辅助生成,仅供参考]

_奶咖君_ 发表于 2025-10-24 15:29:45

使用软件调试的话是不能调试硬件的,,

DebugLab 发表于 2025-10-24 18:48:29

不能仿真时钟复位看门狗等功能,请直接实际运行测试
由于切换时钟,串口printf也不可用,可以在等待时钟稳定的循环里直接用IO并口输出寄存器的值,然后用逻辑分析仪看,当然低速信号也可以直接接LED看
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html

页: [1]
查看完整版本: 内部高速IRC切换成内部32.768K,怎么查不到状态标志IRC32KST为1