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.

[参考译文] MSP430F5419A:XT1外部晶振不能#39;t 控制 ACLK/MCLK/SMCLK

Guru**** 2538950 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/711216/msp430f5419a-xt1-external-crystal-doesn-t-control-aclk-mclk-smclk

器件型号:MSP430F5419A

我尝试将 UCS 设置为从 XT 提供时钟,但未成功! 12MHz 晶体。  晶体以正确的频率振荡、并且电平似乎与其他看起来没有问题的设计相匹配。  输出时钟似乎总是与 DCO/FLL 设置相关(任何地方从2-18MHz、具体取决于设置)、并且不受我的初始化控制。  我已将上电时的 VCORE 电压 LEVe 设置为2、然后进行芯片初始化/设置。  XT1HFOFFG 和  XT1HFOFFG 标志在上电时置1、但在初始化后我复位它们并保持复位状态。  DCOFFG 始终保持置位。  我的设置有什么问题?  以下是初始化后所有 UCS 寄存器的值、为我提供了大约17.7Mhz 的时钟(抖动)。  

UCSCTL0 0x1F00 UCS 控制寄存器0 [存储器映射]  

DCO4 1 DCO 抽头位:4.
DCO3 1 DCO 抽头位:3.
DCO 1 DCO 抽头位:2.
DCO1 DCO 抽头位:1.
DCO0 1 DCO 抽头位:0
Mod4 0调制位计数器位:4.
Mod3 0调制位计数器位:3.
Mod2 0调制位计数器位:2.
MOD1 0调制位计数器位:1.
MOD0 0调制位计数器位:0

UCSCTL1 0x0050 UCS 控制寄存器1 [存储器映射]

DCORSEL 101 - DCORSEL_5 DCO 频率 范围选择位:0
DISMOD 0禁用调制

UCSCTL2 0x101F UCS 控制寄存器2 [存储器映射]

FLLD 001 - FLLD_1循环分频器位:0
FLLN9 0 FLL Multipier 位:9.
FLLN8 0 FLL Multipier 位:8.
FLLN7 0 FLL Multipier 位:7.
FLLN6 0 FLL Multipier 位:6.
FLLN5 0 FLL Multipier 位:5.
FLLN4 1 FLL Multipier 位:4.
FLLN3 1 FLL Multipier 位:3.
FLLN2 1 FLL Multipier 位:2.
FLLN1 1 FLL Multipier 位:1.
FLLN0 1 FLL Multipier 位:0


UCSCTL3 0x0000 UCS 控制寄存器3 [存储器映射]


SELREF 000 - SELREF_0 FLL 基准时钟选择位:0
FLLREFDIV 000 - FLLREFDIV_0基准分频器位:0


UCSCTL4 0x0000 UCS 控制寄存器4 [存储器映射]


SELA 000 - SELA _0 ACLK 源选择位:0
SELS 000 - SELS _0 SMCLK 源选择位:0
SELM 000 - SELM_0 MCLK 源选择位:0


UCSCTL5 0x0000 UCS 控制寄存器5 [内存映射]


DIVPA 000 - DIVPA_0来自引脚分频器位的 ACLK:0
DIVA 000 - DIV_0 ACLK 分频器位:0
DIVS 000 - DIVS_0 SMCLK 分频器位:0
DIVM 000 - DIVM_0 MCLK 分频器位:0

UCSCTL6 0x016C UCS 控制寄存器6 [存储器映射]

XT2DRIVE 00 - XT2DRIVE_0 XT2驱动电平模式位0
XT2BYPASS 0 XT2旁路模式:0:内部1:由外部引脚供源
XT2OFF 1高频振荡器2 (XT2)禁用
XT1DRIVE 01 - XT1DRIVE_1 XT1驱动电平模式位0
XTS 1 1:选择高频率 振荡器
XT1BYPASS 0 XT1旁路模式:0:内部1:由外部引脚供源
XCAP 11 - XCAP_3 XIN/XOUT 电容器位:0
SMCLKOFF 0 SMCLK 关闭
XT1OFF 0高频振荡器1 (XT1)禁用

UCSCTL7 0x0301 UCS 控制寄存器7 [存储器映射]

XT2OFFG 0高频振荡器2故障标志
XT1HFOFFG 0 XT1高频振荡器1故障标志
XT1LFOFFG 0 XT1低频振荡器故障标志
DCOFFG 1 DCO 故障标志

UCSCTL8 0x0707 UCS 控制寄存器8 [内存映射]

MODOSCREQEN 0 MODOSC 时钟请求使能
SMCLKREQEN 1 SMCLK 时钟请求使能
MCLKREQEN 1 MCLK 时钟请求使能
ACLKREQEN 1 ACLK 时钟请求使能



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Roger、

    我看到您花了时间进行寄存器设置。 如果我理解正确、您的 XT1将按预期工作。

    您能否确认您的问题是 MCLK、SMCLK 和 ACLK 似乎没有从 XT1运行? 输出时钟是指这种情况吗? 您是否通过测量输出引脚上的时钟频率或调试寄存器设置来确认该情况?

    在哪种工作模式下、您会看到意外的时钟设置?

    感谢您的澄清和致以最诚挚的问候、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我用示波器观察到 P2.0上的 MCLK 和 P2.6上的 ACLK。 两个输出的频率都是相同的错误频率、约为17.8MHz、且12MHz 晶体以正确的频率振荡。 我实际上观察 SMCLK 输出、但我假设它是相同的。 处理器处于运行模式、尚未对低功耗进行编码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Roger、

    您是否想与我共享代码的一部分、以便您实际配置时钟? 在理解之前粘贴的内容似乎是正确的、但代码中可能会有一些意外的内容。
    我只需要查看具有时钟设置的器件即可。

    谢谢、此致、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    除了在芯片初始化例程中、我通常不对时钟执行任何操作。  我在我的所有模块中搜索了任何带有"UCS "的内容、并且没有找到除以下内容以外的任何条目。  我确实设置了多个具有波特率等的 UART 通道、但我无法想象这会如何影响内核时钟功能。  初始化例程中有4条指令、它们是:

    UCSCTL1 = 0x0050;//测试
    
    UCSCTL4 &=~SELs_4 +~SELM_4; //到 XT1CLK
    
    UCSCTL6的所有时钟=0x016C;
    
    UCSCTL7 &=~XT1HFOFFG; //清除任何时钟启动故障似乎都不起作用。
    

    然后在 main.c 中、我添加了几行来调试该问题:

    UCSCTL7 = 0;//测试标志
    
    UCSCTL3 = 0的复位;
    

    由于时钟似乎在使用 DCO/FLL、我猜是因为处理器认为晶体不正确。  这些标志在初始化例程之后进行设置、即使我在结束初始化时将其清除  正如您看到的、我在初始化调用之后在 main.c 中添加了一个清除、然后在执行之后、它们将保持清除状态。   我订购了一些不同的晶体、并将在一天或两天内试用。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Britta: 我用不同供应商的部件更换了12MHz 晶体、没有任何影响或变化。  我的设置中必须有错误的内容、但我无法理解它可能是什么。  你看到什么、或者有什么其他我可以尝试的东西。  我一直在使用 UCB0 I2C 接口来调试某些接口、而这个问题仍有待解决。  我不知道这是否是线索、但为了在 UCB0通道中获取时钟、我必须选择 SMCLK 作为源。  我还将 DCORSEL 选择从 DCORSEL_5更改为_4、以便测试时钟频率约为10MHz。 。  现在有什么建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Roger、

    我再次浏览了提供的数据。

    您在高频模式下运行 XT1、能否快速验证您要设置的频率范围? 您将其设置为01b (范围为8MHz 至16MHz)、对吧?

    您如何验证晶体是否随意输出正确的频率? 您可以尝试我们 的 MSP430 32kHz 晶体振荡器应用报告、该报告为低频和高频振荡器提供了有价值的故障排除提示。

    添加到您的上述帖子:

    那么您的 SMCLK 设置是否起作用? 您是否尝试使用不同的预分频器对其进行修改、它是否起作用?

    您说您清除了 XT1HFOFFG、并清除了维生素、对吧? 您是否检查 了《MSP430x5xx 和 MSP430x6xx 系列用户指南》中的第5.2.12节 、以查看您的系统中是否出现了所描述的 UCS 模块失效防护运行指示? 可能是检测到故障并且您的所有时钟都自动源自 DCO、这与您看到的结果是否匹配?

    请检查上面所示的选项、并告诉我其中是否有任何一项有助于您继续。

    谢谢、此致、

    Britta

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Britta:XT1HFOFFG 和 XT1LFOFFG 以及 DCOFFG 在初始化后都被置位。 之后、向寄存器写入0会导致 DCOFFG 保持置位状态、这可能是因为 DCO 为31。 在没有对 UCS 模块设置进行任何进一步更改的情况下、两个 XT1标志保持复位状态。 我已经使用 XT2晶振连接完成了很多设计、但这是我第一次使用 XT1 (可能是我最后一次使用)。 一般文献似乎表明、这适用于低频振荡器、以实现低功耗运行。 我回顾了您提到的章节、似乎没有任何突出的内容可作为正在发生的情况的指示器。 我不能完全清楚处理器是否覆盖了 SERA_x 设置等设置。 为了尝试确定时钟来自何处、我执行了如下几项测试。 我的结论是、我的时钟来自具有各种倍频器的内部 REFO 振荡器。 我的12MHz 正弦波(在晶振上用示波器探针测量)外部晶振不会以某种方式被转换出来。 这些石英12MHz 晶振(基频模式)器件通常非常耐受负载电容等变化 我的最佳猜测是、它最初进入失效防护模式、并且即使在错误标志被复位后也保持在该模式。

    除 DCORSEL 设置为_4范围外、所有设置都与我原始文章中所述的设置相同。 更改 SELA_0设置会得到以下 ACLK 输出结果。 0=9.0Mhz、1=9.3kHz、2=32.5kHz、3=18MHz、4=18MHz 和5=9Mhz、这5设置也会设置 X2OFFG 标志。
    对于 SELA_0、我通过以下 ACLK 输出结果更改了 SELREF 时钟设置。 SELREF_0=9MHz、2=1.1Mhz、7=1.1Mhz。 当 SELREF = 7时、I 将 SELA 设置更改为以下结果:0=1.1Mhz、1=9.3kHz、3和4 =无时钟输出。 (请注意,1.1Mhz 频率大约是32.765kHz 内部晶振的31倍。)

    另一项测试是将 XT1OFF 设置为1、但对我的9Mhz 时钟信号没有影响。 将 X1BYPASS 设置为1会将输出频率从9Mhz 更改为1.1Mhz。

    我有一个100引脚演示板、并在其中安装了多个12MHz 晶体、其结果与使用试验电路板设计测量的结果相同。
    其他一些观察结果是:OFIFG 被置位、不会复位。 OFIE 为0、我不确定硬件/我的软件在启用时应该执行什么操作。 这可能与 DCO 错误标志保持置1相关。 最后一个问题:是否指定了最大晶体负载电容? 我看到了对18pf 的引用、但它不是规格。 我的晶体负载电容的额定值为20pF (并且我在外部并联两个33pF 电容以得出该值)。
    我的下一步可能是报废 XT1振荡器、并尝试使用一组切口和跳线切换到 x2振荡器!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Roger、

    仅供我确认:

    您是否对所有振荡器故障标志执行了任何代码检查以保持清零:

    //循环直到 XT1、XT2和 DCO 故障标志被清除
    DO
    {
    UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG; //清除故障标志
    } while (SFRIFG1&OFIFG); //测试振荡器故障标志 

    这将有助于排除晶体实际上仍然存在问题。

    之前在失效防护运行上显示的第一部分表示、如果在相应的时钟源上检测到故障、时钟将被切换(例如、如果 HF 模式中的 XT1将时钟提供给 ACLK、 然后、如果 XT1不能正常工作、ACLK 将自动切换至 REFO、而不改变 SELA 设置)。 您所说的内容、这似乎是正在发生的情况。

    因此、我建议再次检查晶振功能(例如、在顶部提供的代码)。

    回答您的问题:

    我们不指定最大晶体负载电容、但我们鼓励"振荡裕度基于推荐晶体的安全系数5。"

    希望这有助于解决问题。

    此致、

    Britta

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    因为我在一段时间内没有收到您的回复、所以我认为您的问题已经解决了。
    请继续验证给定的答案、以帮助可能遇到相同问题的其他用户。

    请注意、如果我没有听到您的反馈、我将在接下来的几天内关闭此主题。 如果有必要、回复该主题帖将在某个时间点重新打开。

    此致、
    Britta
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    布里塔: 我已经被这份工作拖了一会,可能再也不会回来了。  我无法在错误标志上循环、因为它们保持置位状态。  我尝试将 fll/DCO 设置为10MHz 的回流内部振荡器运行频率、但无法使其复位 DCO 错误标志或中断标志、无论我做什么、这些标志似乎都保持置位状态。  其他2个 xtal 振荡器标志复位和保持复位。  如果您需要关闭案例、只要有进一步的测试和错误、我就可以打开另一个案例、但我无法取得任何进展。

    Roger

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请注意、对于任何时钟(ACLK、MCLK、SMCLK 或 DCO FLL 基准)使用的时钟源或者未通过 XT1OFF/XT2OFF 禁用的时钟源、时钟模块会报告错误。 如果您没有使用某些源、请确保它未在任何位置进行配置。

    时钟初始化需要许多奇怪的细节。 最好从其中一个代码示例开始、检查它是否正常工作、然后根据需要进行更改。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Roger、

    我不知道您是否有时间遵循 Clemens 关于此问题的指导、但这对您来说是一个很好的起点。
    此外,有关错误标志的解释,也是我想强调的。

    现在、我将继续并关闭此主题。 请重新打开它或发布新主题、以防您有时间重新查看此主题、并发现它仍然无法解决问题。

    此致、
    Britta