无用科技 发表于 2025-8-4 16:34:03

AI8051U开发记录二:RTC启用内部32K晶振,ADC功能受影响?




最近在研究RTC时钟功能,由于板子上没有设计外部时钟电路,我启用了内部时钟,配置如下。


    IRC32KCR = 0x80;   //启动内部32K晶振.
    while (!(IRC32KCR & 1));//等待时钟稳定
    RTCCFG = 0x03;    //选择内部32K时钟源,触发RTC寄存器初始化


我测试后发现,只要启用了内部时钟,ADC采样好像停了,这个是正常的吗

国芯人工智能 发表于 2025-8-4 16:38:00

您好,感谢您的提问。关于您在使用AI8051U芯片时遇到的“启用内部32K晶振后ADC功能异常”问题,这是一个值得关注的技术细节。以下是对该现象的专业分析与建议。

首先,根据您提供的配置代码:

c
IRC32KCR = 0x80;   //启动内部32K晶振
while (!(IRC32KCR & 1));//等待时钟稳定
RTCCFG = 0x03;    //选择内部32K时钟源,触发RTC寄存器初始化

这段代码的功能是启用内部32KHz晶振,并将其作为RTC的时钟源。从逻辑上看,这一操作本身不会直接影响ADC模块的工作状态,因为ADC通常依赖于系统主频或特定的时钟分频,而非RTC时钟。

然而,在实际应用中,可能会存在以下几种潜在原因导致ADC采样异常:

1. 时钟域冲突:虽然内部32KHz晶振主要用于RTC,但某些MCU架构中,系统时钟可能与RTC时钟共享部分资源或控制寄存器。若ADC模块依赖于系统时钟(如HCLK或PCLK),而RTC的启用导致系统时钟配置发生变化,可能会间接影响ADC的正常工作。

2. 电源管理或功耗模式:部分MCU在启用低功耗模式时,可能会关闭非必要的外设时钟。若您在启用RTC后进入某种低功耗状态,可能导致ADC模块被意外关闭或处于待机状态。

3. 中断或DMA冲突:如果ADC采样依赖于定时器或DMA传输,而RTC的启用导致系统时钟频率变化,可能会引起定时器或DMA的时序错误,从而影响ADC采样的准确性或稳定性。

4. 寄存器配置覆盖:在某些情况下,RTC的配置可能与其他模块(如ADC)共用部分寄存器或控制位,尤其是在未正确设置寄存器保护机制的情况下,可能会出现配置冲突。

建议您进行如下排查:
检查ADC相关寄存器(如ADCCTRL、ADCCFG等)是否在启用RTC后被意外修改。
确认系统时钟配置是否在RTC启用前后保持一致,尤其是主频和分频设置。
使用示波器或逻辑分析仪观察ADC输入信号与采样时序,确认是否存在异常。
查阅AI8051U数据手册中的“时钟树”和“ADC模块”章节,确认ADC与时钟源之间的关系。

综上所述,启用内部32KHz晶振本身不会直接导致ADC功能异常,但需结合系统整体时钟配置、电源管理策略及寄存器设置进行综合分析。如问题持续存在,建议提供更详细的代码片段或硬件设计图以便进一步定位。

如需进一步技术支持,欢迎联系国芯人工智能官方技术团队。

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

DebugLab 发表于 2025-8-4 17:23:31

不正常,内部32K时钟不应该影响ADC

内部低频时钟(约32K)作为掉电唤醒定时器,出于低功耗考虑,无抗温飘压飘电路,精度较低,不能作为RTC时钟使用,RTC使用内部低频时钟仅供测试(看秒在走就是RTC正常工作),不要在实际运行时使用

注意中断问题,打开的中断必须要有中断函数,没使用中断号扩展插件必须使用isr.asm,并正确编辑isr.asm

RTC是异步操作的,设置RTC寄存器,下一个32K时钟周期才会生效

新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html


无用科技 发表于 2025-8-4 19:42:20

经过仿真,发现程序一直卡在while (!(IRC32KCR &0X01));//等待时钟稳定,导致ADC无法初始化。

无用科技 发表于 2025-8-4 19:48:36

但是我用官方的开发板,和官方提供的代码包,也是卡在这里while (!(IRC32KCR &0X01));//等待时钟稳定,不知道是不是仿真的影响

无用科技 发表于 2025-8-4 19:55:34

   经验证确实RTC_config();无法初始货,也就是卡在while (!(IRC32KCR &0X01));
       
        当我把P2=0X00;写在RTC_config();的后面,对应的LED无法点亮,写在这个代码前面,则可以点亮。

乘风飞扬 发表于 2025-8-5 09:13:20

直接烧录代码到芯片里,通过指示灯判断等待时钟稳定代码是否能正常通过执行。
如果还是通不过的话,排查扩展寄存器访问使能在此之前是否有打开,打开的话有没有在其他地方又将其关闭了。

_奶咖君_ 发表于 2025-8-5 09:41:36

仿真 你不会是软件仿真把,,,

无用科技 发表于 2025-8-5 14:31:34

_奶咖君_ 发表于 2025-8-5 09:41
仿真 你不会是软件仿真把,,,

USB仿真

无用科技 发表于 2025-8-5 17:22:01

乘风飞扬 发表于 2025-8-5 09:13
直接烧录代码到芯片里,通过指示灯判断等待时钟稳定代码是否能正常通过执行。
如果还是通不过的话,排查扩 ...

目前试过,要在定时器前初始化,就可以。但是精度很差。1S的中断时长也不对。
页: [1] 2
查看完整版本: AI8051U开发记录二:RTC启用内部32K晶振,ADC功能受影响?