找回密码
 立即注册
查看: 111|回复: 3

Ai8H2K32U配置为外部时钟后,就不能再仿真,这是什么原因?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-24 16:10:29

1

主题

1

回帖

13

积分

新手上路

积分
13
发表于 2025-3-24 16:10:29 | 显示全部楼层 |阅读模式
void main(void)
{
        u16        crc;
        u8 a;
        u16 pre_temp = 0;
        delay_ms(1);
        EAXSFR();                /* 扩展寄存器访问使能 */
        Curr_Comp_JDQ1 = 1;                //关闭电流补偿       
    WorkState_JDQ2  = 0;

        Clock_init();
        delay_ms(1);       
     while(1);
}


void Clock_init(void)
{

        //使用外部晶振时, P1.6 P1.7被占用, PWM4没有功能.
        XOSCCR = 0xC0 + 0x00; // 0xc0 + 0x00 启动外部晶振
        while (!(XOSCCR & 0x01));          // 等待时钟稳定


        CLKDIV = 0x00; // 时钟不分频
        CLKSEL = 0x01;  // 选择外部晶振                                       
//        PLLCR = 0xa0;//将外部晶振频率2分频(PCKI=01),使能PLL倍频(ENCKM=1)

//  高速PWM时钟设置
        CLKSEL |= CKMS;  // 选择PLL的144M作为PLL的输出时钟
        PLLCR &= ~PCKI_MSK;
        PLLCR |= PCKI_D2;
        // 启动PLL
        PLLCR |= ENCKM;        //使能PLL倍频
        delay_us(500);  // 等待PLL锁频
        CLKSEL |= HSIOCK;         //
        HSCLKDIV = 0;        //HSPWM/HSSPI时钟源不分频
        HSPWMA_CFG = 0x03;        //使能PWMA相关寄存器异步访问功能(高速PWM,除PWMA_PS寄存器外,其他PWM寄存器读写都必须在异步模式下进行)

}

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-24 16:12:00 | 显示全部楼层
在配置Ai8H2K32U微控制器使用外部时钟后,无法进行仿真的问题,可能涉及以下几个方面的原因:

1. 时钟切换时序问题:
   在Clockinit()函数中,微控制器从内部时钟切换到外部时钟。这一过程需要确保外部晶振已经稳定运行。代码中通过while (!(XOSCCR & 0x01));等待外部晶振稳定,这是正确的做法。然而,仿真环境中可能存在时钟切换时序与硬件实际行为不一致的情况,导致仿真器无法正确同步时钟信号。

2. 仿真器支持限制:
   某些仿真器可能无法完全支持外部时钟源的仿真,尤其是在高频或复杂的时钟配置下。例如,代码中启用了PLL倍频(PLLCR |= ENCKM;)并将时钟频率提升至144MHz,这可能导致仿真器无法正确处理高频时钟信号,从而无法继续仿真。

3. 寄存器配置冲突:
   在Clockinit()函数中,配置了多个时钟相关寄存器(如CLKDIV、CLKSEL、PLLCR等)。如果这些寄存器的配置在仿真环境中与硬件实际行为存在差异,可能导致仿真器无法正确模拟时钟切换过程。例如,CLKSEL |= CKMS;和CLKSEL |= HSIOCK;的配置可能需要更详细的仿真支持。

4. 仿真环境初始化问题:
   仿真器在启动时可能默认使用内部时钟进行初始化。如果在仿真过程中切换到外部时钟,仿真器可能无法正确处理这一变化,导致仿真失败。建议在仿真前检查仿真器的时钟配置选项,确保其支持外部时钟切换。

5. 代码优化与调试:
   建议在仿真前对代码进行优化和调试。例如,可以逐步注释掉Clockinit()函数中的部分配置,排查具体是哪一步操作导致了仿真失败。此外,可以在仿真环境中添加调试信息,观察时钟切换过程中各寄存器的状态变化。

解决方案:
检查仿真器支持:确保仿真器支持外部时钟和PLL倍频配置。
优化时钟切换代码:在时钟切换过程中增加更多的稳定性检查和延时,确保外部晶振完全稳定后再进行后续操作。
分步调试:逐步启用Clockinit()函数中的配置,定位导致仿真失败的具体步骤。
使用内部时钟仿真:如果仿真器不支持外部时钟,可以暂时使用内部时钟进行仿真,待功能验证完成后再切换到外部时钟进行硬件测试。

通过以上分析和调整,可以有效解决Ai8H2K32U配置外部时钟后无法仿真的问题。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-24 16:10:29

1

主题

1

回帖

13

积分

新手上路

积分
13
发表于 2025-3-24 16:15:24 | 显示全部楼层
执行到:while (!(XOSCCR & 0x01));          // 等待时钟稳定
一直等不到时钟稳定标志,就卡这里了,是什么问题,怎么解决?

点评

必须用硬件仿真(制作仿真芯片) 外部时钟正常吗,外部时钟不正常就会卡死  详情 回复 发表于 2025-3-24 16:18
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-24 16:18:53 | 显示全部楼层
liuq*** 发表于 2025-3-24 16:15
执行到:while (!(XOSCCR & 0x01));          // 等待时钟稳定
一直等不到时钟稳定标志,就卡这里了,是什 ...

必须用硬件仿真(制作仿真芯片)
外部时钟正常吗,外部时钟不正常就会卡死
先不仿真,直接用外部时钟,写个简单的通过MCLKO输出分频时钟的方式测试外部时钟是否正常
外部时钟正常再仿真

DebugLab
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:25 , Processed in 0.123345 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表