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.

[参考译文] MSP430I2031:OFIFG 位在时钟初始化后被置位

Guru**** 2513185 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/813878/msp430i2031-ofifg-bit-gets-set-after-clock-initialization

器件型号:MSP430I2031

只要我们调用只为时钟设置外部电阻器的 InitClock_g 函数、OFIFG 位就会被置位、前提是我们在之后将其清零。

 

/*-------------------------------------- *

/*

时钟初始化。

*

空 InitClock_g(空)

 CSCTL0 |= DCOR;           /*用于计时的外部电阻器*/

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

    Ashish、您好!

    查看 《MSP430i2xx 系列用户指南》第126页的用例3、您使用的外部电阻器值是多少?

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

    外部电阻值:20K

    此致、

    Ashish

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

    Ashish、您好!

    根据您的描述、

    " OFIFG 位被置位、如果我们在该位之后将其清零"

    这是预期的行为、如下所示:

    或者我是否误解了您的问题?

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

    Ashish、您好!

    几天以来,我没有听到您的声音,因此我假设您能够解决您的问题。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。

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

    您好、Lehman、

    很抱歉耽误你的答复。

    如红色环绕点的时序图所示,气象 OFIFG 位由 MSP 自动清零,或者我们需要将其清零?

    在设置时钟(CSCTL0 |= DCOR;  )后的代码中,我们观察到 OFIFG 位甚至在 1秒后被置位

    此致、

    Ashish

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

    Ashish、您好!

    好的、这告诉我有一个 DCO 故障。

    您是否设置了外部电阻器校准值?

    1秒后、如果您将 OFIFG 位清零、该位会保持清零还是永远保持置位?

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

    尊敬的 Dennis:

    以下是启动时调用的低级 init 函数(由 TI 提供)。 如果 BORIFG 位被置位、它将载入 TLV 表中的值。 这是否正常?

    #ifdef __TI_Compiler_version__
    int _system_pre_init (void)
    #Elif defined (_IAR_systems_icc_)
    int __low_level_init (void)
    其他
    错误编译器不受支持!
    #endif

     unsigned int Temp;
     unsigned long * jtagPwd =(unsigned long *) JTAG_DIS_PWD1;
     /*馈送看门狗计时器*/
     WDTCTL = WDTPW | WDTCNTCL;
     /*检查 JTAG 密码位置并在密码不匹配时禁用 JTAG。
      *否则 JTAG 将在复位后的第64个周期中启用。
      *
     if ((* jtagPwd!= 0x00000000u)&&(* jtagPwd!= 0xFFFFFFU))
     {
       /*禁用 JTAG */
       SYSJTAGDIS = JTAGDISKEY;
     }
     /*校准部分
      *检查 IFG1中的 BORIFG 标志。 如果这是 BORIFG、则执行校准。
      *否则跳过校准
      *
     temp =(IFG1 &(unsigned int) BORIFG);
     
     if (Temp!= 0U)
     {
      /*对62字节的 TLV 数据执行二进制补码校验和*/
       unsigned int 校验和= 0U;
       unsigned char * TLV_address_for_parse =(unsigned char *) TLV_start);
       unsigned int * TLV_address_for_CHECKSUM =(unsigned int *) TLV_START + 1);
       tUI16 StartAdd = TLV_START + 1U;
       tUI16 EndAddr = TLV_END;
       tUI16 Addr = StartAdd;
       操作
       {
         校验和^=* TLV_ADDRESS_for_CHECKSUM_+;
         地址++;
       } while (Addr <= EndAddr);
       校验和^= 0xFFFFFFU;
       校验和++;
       /*如果校验和不正确、请转至 LPM4 */
       if (*((unsigned int *) TLV_start)!=校验和)
       {
         /*如果校验和失败,则加载我们自己的值*/
         /*校准值 */
         CSIRFCAL = 0x80u;
         CSIRTCAL = 0xC0u;
         CSRFCAL = 0x72u;
         CACERTTM = 0x40u;
         SD24TRIM = 0x0Cu;
         REFCAL0 = 0x3FU;
         REFCAL1 = 0x00u;
         /* DiogReg.InfoCallibFlag = 0x0001u;*/
         /*SetBit_g (&DiogReg。InfoCallibFlag,0x01u);*/
       }
       其他
       {
         /*检查总和是否匹配,现在设置校准值*/
         /*校准 REF */
         REFCAL1 =*(TLV_ADDRESS_for_parse + TLV_CAL_REFCAL1);
         REFCAL0 =*(TLV_ADDRESS_for_parse + TLV_CAL_REFCAL0);
         /*校准 DCO */
         CSIRFCAL =*(TLV_ADDRESS_for_parse + TLV_CAL_CSIRFCAL);
         CSIRTCAL =*(TLV_ADDRESS_for_parse + TLV_CAL_CSIRTCAL);
         CSRFCAL =*(TLV_ADDRESS_for_parse + TLV_CAL_CSRFCAL);
         CSRTCAL =*(TLV_ADDRESS_for_PARSE + TLV_CAL_CSRTCAL);
         /*校准 SD24 */
         SD24TRIM =*(TLV_ADDRESS_for_parse + TLV_CAL_SD24TRIM);
         /*DiogRe.InfoCallibFlag = 0x0000u;*/
         /*ClearBit_g (&DiogReg。InfoCallibFlag,0x01u);*/
       }
         #pragma diag_suppress = Pm128 /* MISRA 10.1:*
         /*清除 BORIFG */
       IFG1 &=(tUI8)~(BORIFG);
     }
       /*馈送看门狗计时器*/
     WDTCTL = WDTPW | WDTCNTCL;

     /*返回值:
      * 1 -执行数据段初始化。
      * 0 -跳过数据段初始化。
      *
     返回1;

    此致、

    Ashish/Rakesh

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

    Ashish、您好!

    我认为示例初始化代码应该起作用。

    如果您不选择外部电阻器(例如、在内部电阻器上运行)、会发生什么情况?

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

    Ashish、您好!

    现在已经有几天了、我想知道您只使用内部电阻器发现了什么?

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

    尊敬的 Dennis:

    对于内部电阻器、 OFIFG 位不会被置位。

    此致、

    Ashish/Rakesh

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

    Ashish、您好!

    这告诉我您使用的20k 电阻器可能不够精确。 它是0.1%电阻器吗?

    用户指南第121页。

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

    我们使用的是20 K 欧姆、+/- 0.5%、1/16W、25ppm

    此致、

    Ashish

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

    您是否有机会按照数据表中的建议使用0.1%电阻器进行替换、看看这是否可以解决问题?

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

    Ashish、您好!

    几天以来,我没有听到您的声音,因此我假设您能够解决0.1%电阻器的问题。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。