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.

[参考译文] MSP430F6779A:关于 PMM26、已将 RST 引脚设置为 NMI 并拉至低电平

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1313314/msp430f6779a-about-pmm26-with-setting-rst-pin-setting-to-nmi-and-pull-low

器件型号:MSP430F6779A

在勘误表#2中,

 如果在对 SVSMLCTL 进行写访问期间将 RST 引脚拉低、并且仅当
在没有超时的情况下执行 SVSMLDLYIFG=1的检查。 器件将卡在
在轮询循环中、因为 SVSMLDLYIFG 将永远不会被清除。

如果我的源代码没有 SVSMLDLYIFG 的超时、并设置 RST 引脚设置 NMI、拉引脚。

_system_pre_init

// set RST/NMI pin as NMI (Disable reset pin)
SFRRPCR = SYSNMI | SYSNMIIES | SYSRSTRE;


SVSMLCTL    =   0x4703;
// SVMLE = 0b1 (SVM low-side enable)
// SVSLE = 0b1 (SVS low-side enable)
// SVSLRVL = 0b11 (SVS low-side reset voltage level 2.16 V)
// SVSMLRRL = 0b101 (SVS low-side reset release voltage 2.25 V)
while ((SVSMLCTL & SVSMLDLYST) != 0)
{
 // SVSMLDLYST: wait until the status finished
}

上述源代码是否会产生 PMM26勘误表(卡在循环中或保持在复位状态)?

我找到了有关此问题的旧信息

e2e.ti.com/.../msp430f5172-how-does-mcu-operate-in-case-of-errata-pmm26

"没有问题、但仍应在回路中执行300us 超时、

打造稳健的解决方案"


如果没有机具300us 超时、会发生什么情况? (它可以卡在循环中还是保持在复位状态)?

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

    使 MCU 将复位功能切换到 NMI 功能。 需要一些时间。 因此、实际的 NMI 功能启用可能晚于寄存器设置。 我认为这就是 为什么仍然建议你添加一个超时。 您还可以测量上升时间。 我建议您参考之前的建议。

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

    、您好!

    感谢您的建议。

    1) 1)如果我们通过库访问 SVSMLCTL
    驱动程序库版本2_91_11_01

    在 PMM.c 中

    PMM_setVCoreUp
    PMM_setVCoreDown

    该库是否实现了300us 的超时?
    如果没有、我们如何实现超时?

    2)超时后,我们应该做什么,比如重置或其他事情?

    3) 3)在这种情况下、我们可以检查 SVSMLDLYIFG 或 SVSMLDLYST 可以互换使用是否正确?

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

    1) 1)我认为您可以自己检查源代码。 实际上、它没有实现该功能。 我建议用于这部分代码、直接控制寄存器。

    2)你不需要做任何事情,检查  SVSMLDLYIFG 标志是确保延迟完成。 不添加超时则无法更改。 您可能受困于 SVSMLDLYIFG ==1检查。  

    3)不是真的、 在 SVSMLDLYST 之后 SVSMLDLYIFG 被置位 。 此外、对于勘误表、它只参考 SVSMLDLYIFG。 因此、我建议您遵循该指南、因为我只能根据用户指南和勘误表中的文字来分享评论。 我没有更多其他信息。

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

    、您好!

    感谢您的信息。

    1) 1)如果库中发生了勘误表(PMM_setVCoreUp、PMM_setVCoreDown。

    程序是否卡在库中的轮询循环中?

        //Wait until SVM, SVS low side is settled
        while ((HWREG16(PMM_BASE + OFS_PMMIFG) & SVSMLDLYIFG) == 0) ;

    3) 3)在我的当前源代码中检查 SVSMLDLYST、是否有必要将其更改为 SVSMLDLYIFG?

    SVSMLCTL    =   0x4703;
    // SVMLE = 0b1 (SVM low-side enable)
    // SVSLE = 0b1 (SVS low-side enable)
    // SVSLRVL = 0b11 (SVS low-side reset voltage level 2.16 V)
    // SVSMLRRL = 0b101 (SVS low-side reset release voltage 2.25 V)
    while ((SVSMLCTL & SVSMLDLYST) != 0)
    {
     // SVSMLDLYST: wait until the status finished
    }

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

    1) 1)不是、问题是它将通过检查  while ((HWREG16 (PMM_BASE + OFS_PMMIFG)& SVSMLDLYIFG)=1)来在循环中进行陷阱访问

    2) 2)我建议您进行如下更改:

    while ((HWREG16 (PMM_BASE + OFS_PMMIFG)和 SVSMLDLYIFG)=  0);

    while ((HWREG16 (PMM_BASE + OFS_PMMIFG)和 SVSMLDLYIFG)= 1)

    {

     计数++;

     如果(计数>200)  //asume 频率为1MHz

       中断;

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

    、您好!

    这个建议的代码旨在等待300us、对吧?

    while ((HWREG16(PMM_BASE + OFS_PMMIFG) & SVSMLDLYIFG) == 0);
    
    while ((HWREG16(PMM_BASE + OFS_PMMIFG) & SVSMLDLYIFG) == 1)
    
    {
    
      count++;
    
      if (count>200)   //Asume the freq is 1Mhz
    
         break;
    
    }

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

    为了获得准确的时间、您需要参考汇编代码以了解一个周期中有多少个命令。 这里只是一个示例。