This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
尊敬的 Peter:
清除挂起中断是一种确保器件在开始时处于已知状态的方法、如果标志的原因仍然存在、则将再次设置该标志。 如果您的稳定时间太短、那么您可以再次发出标记。
等待时间用于确保 DCO 在继续 MCU 操作之前保持稳定。 您还需要外部晶体上的稳定时间、因为您需要在其通电后使用外部晶体稳定(在为 XT1打开 USCTL6位后、为晶体供电)。
故障标志应该是您检查以验证晶振是否已正确启动的标志。
此致、
Luke
尊敬的 Luke:
因此我应设置 XCAP 和 XDRIVE、然后使用 UCSCTL6 &=~μ H XT1OFF 打开外部晶体;而且要比我要等待晶体通过持续检查和复位稳定还要好
尊敬的 Peter:
您的晶体应该有启动时间、您也可以等待几微秒然后执行二进制搜索以找到最佳时间。 虽然 while 循环检查可以正常运行、但您正在执行比较操作并跳转、而不是_NOP。 但是、设置 XT1、DCO 的过程流程仍然可以工作。
此致、
Luke
因此、处理等待晶体开始运行的最好方法是使用_delay_cycle()设置一些时间;? 我的意思是比较和跳跃虽然不是最好的方式,我猜? 或?
尊敬的 Peter:
您可以使用 delay_cycles、周期延迟将基于 MCLK、在这部分、稳定调整不会导致任何错误的跳转。 如果您等到 Xft 稳定后再调整 DCO、这是更好的方法、以便实现稳定的晶体、并且可以将 DELAY_CYCLES 映射到实际时间。
如果调整 DCO、则使用延迟周期等待 DCO 稳定、时间将不是 CYCLES*CLK 频率、因为时钟频率将随着时间的推移而调整、以满足您的目标设置。
此致、
Luke
您好!
感谢您的回答。 由于时间可能会因温度条件等原因而异、因此我一直在等待晶体开始运行 for loop、并通过在循环中使用整数计数器来降低循环速率。 是不是更好的解决方案? 我是说 XT1可能迟早会稳定。 或者是否有任何副作用。
INT count = 50000;
应执行的操作
{
UCSCTL7 &=~μ H XT1LFOFFG;
SFRIFG1 &=~OFIFG;
_delay_cycles (50);
} while ((UCSCTL7 & XT1LFOFFG)&&--计数);
}
尊敬的 Peter:
这里还有更多的处理工作、我最初的想法是可以、但我建议用您的晶体进行测试以进行验证。 在您的项目中、您是否能够等待温度范围内的最坏情况并等待最长时间? 或者它是否会针对您的晶体发生显著变化?
此致、
Luke
您好!
我在晶体数据表中找不到任何温度漂移详细信息。
尊敬的 Peter:
如果您希望格外小心、可以输入晶体最大时间、如果晶体未列出任何启动 时间、则可以根据 ESR 和负载电容作为基准时进行计算、但您可能必须对启动时间进行实验才能找到适合系统的方法。
我们也有一个晶体振荡器文档、我建议阅读- MSP430晶体振荡器
此致、
Luke