另一件需要考虑的事情是您最终得到的编译代码。特别是像禁用中断这样的事情,像Arduino接口这样的编译器并不总是(读作“从不”)最终得到整洁的编译代码,即所有未使用的东西都被正确绑定。
因此,我认为您实际上正在运行的代码所做的事情与您认为的完全相同。如果你正在使用Arduino工具,我保证你不会遇到这种情况。在端口控制器和来自Arduino代码隐藏部分的任何DMAC硬件上,可能还会有可能导致中断控制器上的活动的不良交互。
从信号完整性的角度来看,除非你的工作频率是几十兆赫兹,或者锁相环频率远高于100兆赫兹,或者芯片超频,否则你应该能够在不做任何特别奇异的事情的情况下将抖动降低到相当低的水平。只要确保走线是漂亮的和短的,没有90度弯曲在晶体和osc引脚。
就我个人而言,我认为除非你在振荡器的布局上犯了一个学生错误,否则问题更有可能是软件相关的。像Arduino这样的工具是为业余爱好者/学生设计的。它们绝对不适合高端、计时关键的应用程序。我再怎么强调这一点也不为过。你必须明确地关闭,或设置为一个已知的状态,每一个外设/输出/中断,否则你会遇到问题。即便如此,如果你使用的是业余爱好者的工具,不管在某些控制器上,你做的顺序是很重要的。
最后一点,我想说的是,确保你的瞄准镜设置正确。尽管您可能已经正确地将其识别为抖动,但当您捕获波形时,您可能会在触发器中看到(在上面的图像中)人工制品。如果作用域上有无限持久性特性,那么使用这种模式会更好。(我是Techtronix的人,不太了解Rigol的范围…)
祝你好运。