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.

[参考译文] MSP430FR5994:CAN#39;t 使系统在16MHz 下工作

Guru**** 2577385 points
Other Parts Discussed in Thread: MSP-EXP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/609971/msp430fr5994-can-t-get-system-to-work-on-16-mhz

器件型号:MSP430FR5994
主题中讨论的其他器件:MSP-EXP430FR5994

您好!

我使用的是 MPS430FR5994 MCU。 正如我在文档中看到的、系统的最大工作频率为16MHz、我希望我的 sistem 能够在该频率上运行。

我已尝试使用提供的软件对其进行设置:

CS_setDCOFreq (CS_DCORSEL_1、DCOFSEL_4);
CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);

当我在 while (1)循环中对一个输出引脚进行齿状操作时、我的测量值仅为2 MHz!

对于选择了 DCORSEL_1和 DCOFSEL_6的 DCO 设置、我获得的输出频率约为3.1MHz。

不接近16 MHz!

我已经尝试过 MSP430示例代码:

//时钟系统设置
CSCTL0_H = CSKEY >> 8; //解锁 CS 寄存器
CSCTL1 = DCORSEL | DCOFSEL_4; //将 DCO 设置为16MHz
CSCTL2 = SELA_VLOCLK | SELESS_DCOCLK | SELM_DCOCLK;//设置 SMCLK = MCLK = DCO、
// ACLK = VLOCLK
CSCTL3 = DIVA__1 | DIVM__1; //设置所有分频
器 CSCTL0_H = 0; //锁定 CS 

同样、我会获得2MHz 的输出。

显然、我错过了一些东西。
能不能有人能帮我处理16MHz 的工作。
谢谢你。

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

    您好、Sladjan、

    感谢您发帖。 以下是一些问题和建议:

    1.在更改 MCLK 之前、您是否为 FRAM 设置了16MHz 的正确等待状态? 对于大于8MHz 的 MCLK 操作、您必须首先为 FRAM 设置等待状态、以便您不会对其进行超频(FRAM 访问限制为8MHz)。 代码示例  使用演示了正确的过程

    //根据 MCLK 的器件数据表的要求配置一个 FRAM 等待状态
    //在配置时钟系统之前在8MHz 以上运行。
    FRCTL0 = FRCTLPW | NWAITS_1; 

    以及在根据器件勘误表设置 DCO 之前设置 DIVM_4、以避免过冲:

    //时钟系统设置
    CSCTL0_H = CSKKEY_H; //解锁 CS 寄存器
    CSCTL1 = DCOFSEL_0; //将 DCO 设置为1MHz
    //设置 SMCLK = MCLK = DCO、ACLK = VLOCLK
    CSCTL2 = SELA_VLOCLK | SELESS__DCOCLK | SELM_DCOCLK;
    //每个器件勘误表在将频率更改为之前将分频器设置为4
    //防止因过冲瞬态而超出规格运行
    CSCTL3 = DIVA__4 | DIVM_4;//针对勘误表将所有相应的时钟源设置为4分频
    CSCTL1 = DCOFSEL_4 | DCORSEL; //将 DCO 设置为16MHz
    //延迟~10us 以使 DCO 稳定。 60个周期= 20个周期缓冲器+(10us /(1/4MHz))
    _DELAY_CYCLLES (60);
    CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;//针对16MHz 运行将所有分频器设置为1
    CSCTL0_H = 0; //锁定 CS 寄存器 //锁定 CS 寄存器
    

    2.您提到您正在使用代码切换引脚以测量时钟输出频率。 这不是测量时钟频率的最佳方法、因为代码的编写方式例如、执行汇编指令所需的数量最终会影响您的输出频率。 测量的最佳方法是使用 PxSEL 位在引脚上输出 MCLK 或 SMCLK。 如果您使用的是 MSP-EXP430FR5994 Launchpad、则看起来 P3.4上提供了 SMCLK、其中一个 Launchpad 接头上应提供 SMCLK。 您必须根据表6-28端口 P3 P3.4至 P3.7引脚功能来设置 P3DIR 寄存器以及 P3SEL1和 P3SEL0寄存器、以便在引脚上选择 SMCLK 功能。 然后、您可以直接测量引脚上的时钟。

    我希望这有助于为实现和测量16MHz 提供一些指导!

    此致、

    Katie

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

    尊敬的 Katie:

    非常感谢!

    它发挥了作用。

    我已经对频率做了一些介绍、我得到了24MHz 的输出 SMCLK。 文档中规定 f (SYSTEM)最大为16MHz。

    那么、我不知道如何在 SMCLK 上获得24MHz。

    此致、

    斯拉德詹

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

    f (系统)最大规格16MHz 指定了整个器件在规格内运行所允许的最大频率。 虽然时钟系统本身可能能够产生24MHz 的 DCO 频率、但在此频率下运行器件内核被视为超出规格运行、您无法确定器件将以该速度正确地长期运行 (在这种情况下、基本上是因为您对器件进行了超频、因此您可能会遇到不可预测的器件操作)。 因此、建议仅将 SMCLK 和 MCLK 配置为16MHz、以确保器件可靠运行。

    此致、
    Katie