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.

[参考译文] MSP430F5310:验证 XT1CLK 振荡器是否确实在使用 P5.4/XIN 和 P5.5/XOUT 引脚上的外部晶振...

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1230300/msp430f5310-verifying-that-the-xt1clk-oscillator-is-indeed-using-the-external-crystal-on-p5-4-xin-and-p5-5-xout-pins

器件型号:MSP430F5310

您好!

非常感谢您的帮助和支持。  我叫 Alberton Berry、是一名高级固件工程师、就职于 VT Hinesburg 的 NRG Systems 公司。  我们的某款产品中使用了 MSP430F5310微控制器、有一些关于 XT1振荡器外设的问题/疑问。

我们希望在关键时序应用中使用连接到引脚 P5.4/XIN 和 P5.5/XOUT 的外部32.768kHz (高精度)晶振。  我们在内部有原型硬件、并且在使用 XT1振荡器以及使其正确设置方面遇到了一些困难。  我认为 XT1振荡器已经被正确配置、并且从我看到的 UCS 寄存器来看、当前被设置使用外部晶体。  不过、通过使用外部32kHz 晶体而非内部 REFO (32kHz)时钟源来验证振荡器实际上是否存在(很难在示波器上辨别出差异)。  在帮助/寻找测试方法时、我将一个外部40kHz 晶体(ECS pn# ECS-.400-12.5-13X)焊接到 MSP430F5310上的 XIN 和 XOUT 引脚、以查看是否能使 XT1CLK 以40kHz 的频率运行(仅作为测试)。  我非常惊讶地看到 XT1CLK 仍然以32.768kHz 的频率运行。  UCSCTL6寄存器中的 XTS、XT1BYPASS、XCAP 和 XT1OFF 位都是正确的。  在寄存器 UCSCTL7中、XT1LFOFFG 或 DCOFFG 都没有被置位、这表明 DCO 和 XT1振荡器运行没有故障。  我使用(10X 探针)探测了 XIN 和 XOUT 引脚、并且在外部晶体上看到了小的交流40kHz 正弦波激励信号;XT1CLK 仍在32.768kHz 下运行。  我正在使用 GPIO 端口 P1.0 (P1.0/TA0CLK/ACLK)和一个示波器(配置为(x000)的 SELA 位以将 XT1CLK 连接到 ACLK)来监视 ACLK 信号。

我有以下问题: 您能否告诉我为什么 XT1振荡器将/不能使用40kHz 的外部晶体以40kHz 的频率运行(仅测试)?  是否有办法明确地判断 XT1振荡器是否确实在使用外部晶体而不是 REFO?

非常感谢!

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

    您好!

    只是仔细检查一下、您的引脚(P5SEL 寄存器)是否配置为外设功能而不是 I/O 功能?  此外、您能否向我发送您的时钟配置代码以便我进行再次检查?

    谢谢!

    苏珊

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

    感谢你的帮助。  我已经验证与 P5.4和 P5.5相关的 P5SEL 引脚已设置为针对 XT1配置这些引脚。  我认为这无关紧要、但已将 P5DIR5设置为将 XOUT 配置为输出。  您能否确认是否需要进行此设置?  为了进行测试(仅限此目的)、是否可以使 XT1振荡器以40kHz 的频率运行?

    根据您的请求、请找出下面的 XT1振荡器(UCS)初始化代码:

    int main (空)

    //ErrorCodeT Ecode;
    ErrorCodeT Ecode = NO_ERR;

    uint16_t i = 0;
    uint16_t CRC;
    uint8_t * pUint_8;
    //uint8_t toggle = 0;


    //静态 uint16_t u16TestNum = 0;


    const char * const abc ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";//测试字符串

    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

    /*初始化所有引脚*/
    Ecode = Svc_initialio();


    //AAB -将所有时钟初始化都移至这里???
    UCSCTL6 |= XT2OFF;//XT2振荡器关闭、检查!

    //UCSCTL6 &=~XT1DRIVE_3;//XT1驱动设置、模式0是最低驱动/功耗
    //UCSCTL6 &=~XT1DRIVE_3 | XT1DRIVE_1;//XT1驱动设置、模式1被增加驱动超过模式0
    //UCSCTL6 &=~XT1DRIVE_3 | XT1DRIVE_2;//XT1驱动设置、模式2被增加到模式1之上
    //XT1驱动设置默认为模式3,最大驱动

    UCSCTL6 &&~XCAP_3;//清除所有 XCAP 位
    UCSCTL6 |=(0x3 << 2);//设置 XCAP 位、检查!

    UCSCTL6 &=~XT1OFF;//XT1振荡器打开、检查!

    //默认情况下 ACLK 使用 XT1CLK,除非下面选择了其它源...
    //UCSCTL4 |= SELA _VLOCLK;//ACLK 使用 VLOCLK
    //UCSCTL4 |= SELA __DCOCLKDIV;//ACLK 使用 DCOCLKDIV
    //UCSCTL4 |= SELA __DCOCLK;//ACLK 使用 DCOCLK
    //UCSCTL4 |= SELA _REFOCLK;//ACLK 使用 REFOCLK

    UCSCTL4 &=~SELM_7;//清除所有 SELM 位
    UCSCTL4 |= SELM__DCOCLK;//MCLK 使用 DCOCLK

    UCSCTL4 &=~SELS_7;//清除所有 SELS 位
    UCSCTL4 |= SELS__DCOCLK;//SMCLK 使用 DCOCLK


    __ bis_SR_register (SCG0);//禁用 FLL 控制环路
    //立即结束复位(PUC),DCO 设置为提供 DCOCLKDIV=1.048576MHz 和 DCOCLK=2.097152MHz
    //导致 FLLD 位默认设置为2,使 DCOCLKDIV 乘以2x...

    __delay_cycles(500000UL);//延迟一个位,因为根据经验,这是需要的...

    UCSCTL1 &=~DCORSEL_7;//清除所有 DCORSEL 位
    UCSCTL1 |= DCORSEL_4;//通过 MSP430F5310数据表 DCOCLK 频率范围是12.3MHz - 28.2MHz

    UCSCTL2 &=~FLLD_7;//清除所有 FLLD 位
    UCSCTL2 |= FLLD__16;//将 DCOCLK 设置为16.8MHz 运行(基本为 DCOCLKDIV x 16)


    __ BIC_SR_register (SCG0);//启用 FLL 控制环路

    __delay_cycles (1000000UL);//稳定延迟

    //重置已(临时)设置的任何标志...
    if (UCSCTL7 && XT1LFOFFG){
    UCSCTL7 &=~XT1LFOFFG;
    }

    if (UCSCTL7 && XT2OFFG){
    UCSCTL7 &=~XT2OFFG;
    }

    if (UCSCTL7 && DCOFFG){
    UCSCTL7 &=~DCOFFG;
    }

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

    您好!

    在您的晶振稳定且故障标志已清除后、您需要让 ACLK 再次从 XT1获取时钟。 这是因为当发生故障时、ACLK 在不更改位的情况下切换到 REFO、但没有任何东西通知 ACLK 切换回 XT1时钟。  

    有关从 XT1采购 ACLK 的示例、请参阅以下示例代码(TI Resource Explorer > MSP430F530x_UCS_06.c)

    此外、我要确保在初始化时钟之前将 P5.5和 P5.4设置为 XT1功能(P5SEL |= BIT4|BIT5;)、因为这些引脚的默认状态(复位时)是 GPIO 功能。  

    遗憾的是、由于我们没有使用40kHz 晶体来测试我们的器件、因此我不知道它是否适用于40kHz 晶体、或者它是否会继续复位故障标志并从 XT1切换到 REFO。

    谢谢!

    苏珊