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.

[参考译文] MSP430F2112:BCM初始化:设置FCPU=16MHz

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/662987/msp430f2112-bcm-initialization-setting-fcpu-16mhz

部件号:MSP430F2112

您好,

我的客户正在尝试将FCPU设置为16MHz。 但其固件在"DCOCTL = CALDCO_16MHz"后立即冻结

我的客户代码是:

(CPU重置)
 ...
 BCSCTL1 = CALC1_16MHz;
 DCOCTL = CALDCO_16MHz;  // >>在该行后立即冻结。

因此,请您提供一个初始化过程来设置FCPU=16MHz?


我的想法是:

(CPU重置)
 ...
 BCSCTL1 = 7; //勘误BCL12要求在DCOCTL更改期间选择7。
 DCOCTL = CALDCO_16MHz;
 BCSCTL1 = CALC1_16MHz;

我试图写我的想法,但我有以下顾虑:

一些示例代码显示“3步时钟启动序列”,但我不确定它是否适用于16MHz。 特别是,我担心DCOCTL=0是有害的。 应为7:
   自[msp430x21x2_CLKS.c]
   DCOCTL = 0;                              //选择最低DCOx和MODx设置
   BCSCTL1 = CALC1_8MHZ;                   //将DCO设置为8MHz
   DCOCTL = CALDCO_8MHZ;

严格地说,我的客户问题是“如何设置RSEL=15”。 我把它翻译成FPU=16MHz,但我不确定它是否完全相同。

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

    您好,

    阅读 了为MSP430F2112发布的BCL12勘误表后, 可以推断,如果在对BCSCTL1进行任何其他修改之前在设备重置之后执行,则MSP430x2xx系列用户指南的“TLV结构”一章中建议的加载特定DCO目标值的方法仍然适用。 因此,如果您的启动代码遵循初始化DCO的示例代码(如下)中所示的结构,则您的客户应该能够成功地将DCO设置为16MHz。

    #include <MSP430-h>
    
    int main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; //如果
    					校准常量被擦除
    ,则停止监视计时器(CALC1_16MHz=0xFF)//如果校准常量被擦除{ 											
    同时(1); //不加载,捕获CPU!	
    !}
    DCOCTL = 0; //选择最低DCOx和MODx设置
    BCSCTL1 = CALC1_16MHz; //将DCO设置为16MHz
    DCOCTL = CALDCO_16MHz; 

    //程序的其余部分

    需要记住的是,由于RSEL仍处于默认值7,因此将DCO设置为16MHz的过程仅在设备重置(PUC)后执行时才起作用。 如果客户想要在程序中更改DCO的速度,而不是在程序开始时更改,则必须遵循勘误表中所述的变通办法。 当它们从RSEL >13到<12以及RSEL <12到>13时,需要记住不同的变通办法。 如果遵循解决方法,则客户可以避免出现BCL12死机时间。

    此致,

    Matt Calvo

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

    Matt,

    感谢您的回复。

    请原谅我的再次确认。

    如果CALCBC_16MHz=15,则它将达到BCS12条件:“如果BSCTL1寄存器中的所有RSELx位均已设置”。 但我们 不必担心它。 在下一行,我们可以更改DCOx或MODx位

    (粗体字来自勘误表文档。)

    正确吗?

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

    不要担心要求澄清! 勘误表中的变通办法部分分为多个部分。 当客户将RSEL从>13切换到<12时,顶部的图表是参考的。 下一段是指将RSEL从<12切换到>13。 第三段是指RSEL=15的情况(如果您以16MHz运行,通常是这种情况)。

    如果RSEL=15,则勘误表中说明必须将其重置为默认值(RSEL=7),然后才能访问DCOCTL修改DCOx和MODx位。 因此,如果客户以16MHz运行并希望修改DCOx和MODx位,则必须降低RSEL,修改位,然后将RSEL重新设置为所需的值;所有操作都要遵循勘误表的指导。

    在提供的示例中,只有在设备重置开始时执行清除DCOCTL,加载BCSCTL1,然后加载DCOCTL的3步过程才有效。 任何其他时间,您都必须执行上述步骤。

    此致,

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