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.

[参考译文] MSP430FR2476:无法启动 ACLK、已安装 XT1

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/937580/msp430fr2476-not-able-to-start-the-aclk-xt1-is-mounted

器件型号:MSP430FR2476

大家好、

由于论坛的帮助、我能够让我们的定制板正常运行、从而使用 driverlib 在 I2C 模式下正确配置 eUSCI。

现在、我们需要尽可能降低功耗、因此我首先要做的是使用 ACLK 而不是 SMCLK 作为时钟

I2C。 嗯,一块蛋糕 我想…

由于某种原因,我的 ACLK 似乎没有正确启动..... 我的代码基于我在 Resource Explorer 中找到的示例、这是我配置 ACLK 的操作

int main (void)
{
volatile uint32_t j;
PMM_unlockLPM5 ();

WDT_A_HOLD (WDT_A_base);

//为 XIN 和 XOUT 配置引脚
//将 P2.0和 P2.1设置为模块功能输入。
GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P2、
GPIO_PIN0 + GPIO_PIN1、
GPIO_PRIMARY_MODULE_FUNCTION
);


PMM_unlockLPM5 ();
//初始化 XT1晶体振荡器而不超时
//如果出现故障,代码将在此处挂起。
//对于超时而不是代码挂起,请使用 CS_TurnOnXT1LFWithTimeout ()
CS_TurnOnXT1LF (
CS_XT1_DRIVE_0
);

cs_initClockSignal (
CS_ACLK、
CS_XT1CLK_SELECT、
CS_CLOCK 分频器_1
);


//清除所有 OSC 故障标志
CS_clearAllOscFlagsWithTimeout (1000);
//启用振荡器故障中断
SFR_enableInterrupt (SFR_oscillator_FAULT_INTERRUPT);

uint32_t clkValue = CS_getACLK ();

/*应用程序继续使用 I2C 读数
...
(笑声)
(笑声)
* 

问题是、稍后在代码中、我卡在 I2C 操作中、这只是因为 clkValue = 0。 因此、我假设 ACLK 未启动。

假设晶振正确安装在 PCB 上(XT1是32K 晶振、在 P2.0和 P2.1之间、请参阅说明)、您对我应该检查什么内容有什么建议以查看这里有什么问题吗?

提前感谢、

Lorenzo

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

    作为一个附带问题,我可以补充说 eUSCI I2C 不能正常工作,即使我尝试使用 ACLK 作为 DCO 的时钟源....在使用 ACLK 进行 I2C 操作时是否有任何限制?

    在这种情况下,clkValue 参数正确设置为预期值(32768),但不执行 I2C 操作.....

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

    您好!

    I2C 频率通常为100kHz 或400kHz、因此使用32.768kHz 时钟源可能无法正常工作。 如果您遇到 XT1晶振问题、则可能会由于未对晶振使用正确的有效负载电容而出现振荡器故障。

    此致、

    James

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

    您好 James、

    谢谢提示、电容器是正确的、因为我没有遇到任何故障...但我也没有得到任何计时器。 正如我在初始帖子中所写的、我在使用时获得的 clkValue

    晶体为0,而在第二种情况下我得到32768......

    不过,我对你的第一个发言很好奇。。。。 相反、我在 TI 文档中的任何地方都找不到 ACLK 不能用于 I2C 通信

    在 driverlib 指南和其他任何地方、这作为一种可能性列出。 此外、在其他生产商的其他芯片上(例如 nRF52)、始终可以使用

    I2C 上用于400k 通信的32k 时钟……这是 MSP430的限制吗? 您对此是否完全确定?

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

    您好!

    [引用用户="Lorenzo Bergamini">不过我对您的第一条陈述很好奇..... 我在 TI 文档中的任何地方都找不到 ACLK 不能用于 I2C 通信;相反、我[/引述]

    ACLK 可被用作 eUSCI 模块的时钟源。 然而、对于 I2C、eUSCI 时钟源(BRCLK)被 UCBRx 分频、这意味着 BRCLK 必须大于位时钟频率(SCL)。 因此、对于400kHz SCL、您不能使用32kHz。

    您可以参阅用户指南、了解有关 eUSCI 模块的更多信息。

    此致、

    James

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

    洛伦佐:

    只需补充 James 的说法:

    • 在程序的早期放置一个循环指令、该指令读取外部振荡器故障标志并产生一个延迟、直到标志被清除。 这将允许振荡器在需要之前斜升并稳定下来。
    • PMM_unlockLPM5配置完所有模块后,将端口解锁指令()放入程序中的一行。