内部高速IRC切换成内部32.768K,怎么查不到状态标志IRC32KST为1
P_SW2 |= 0x80;IRC32KCR |= 0x80;
停在这一步,运行不过去,另外怎么才能看到IRC32KCR的值
while(!(IRC32KCR&1));
CLKSEL |= 0x03;
HIRCCR &= 0x7f;
P_SW2 &= 0x7f;
PCON |= 0x01;
您好,关于您在使用国芯人工智能芯片(假设为基于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
[本文内容由国芯人工智能辅助生成,仅供参考] 使用软件调试的话是不能调试硬件的,, 不能仿真时钟复位看门狗等功能,请直接实际运行测试
由于切换时钟,串口printf也不可用,可以在等待时钟稳定的循环里直接用IO并口输出寄存器的值,然后用逻辑分析仪看,当然低速信号也可以直接接LED看
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
页:
[1]