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.

[参考译文] MSP430F5419A:PMM / SVS / SVM "介于"区域

Guru**** 2537290 points
Other Parts Discussed in Thread: MSP430F5419A, MSP430F5419

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/721169/msp430f5419a-pmm-svs-svm-in-between-zones

器件型号:MSP430F5419A
主题中讨论的其他器件:MSP430F5419

  1. MSP430F5419A 的数据表不包含 PMM、SVS 和 SVM 低侧的电压电平规格。 可以提供吗? (适用于 MSP430F5419)
  2. 在上电期间、CPU 在 VCC 大于1.74V (由 V (SVSH_IT+)控制)之前不会运行。 然而,MSP430F5419A 的建议运行电压为1.8V 以上。 如何避免 CPU 在1.74V 至1.8V 的电压范围内运行?
  3. 我提到这句话:“VCORE 电平必须一次只增加一个电平。” –(slau208q,第108页)

参阅 TI 的驱动程序库,..\MSP430_driverlib_2_91_07_07\driverlib\MSP430F5xx_6xx\PMM.c -> PMM_setVCoreUp (),PMMCOREV (Vcore)按比例增加到 SVSMHRRL (V (SVSH_IT+))。

其中:-

    1. SVSMHRRL = 1 -> Vcc 达到阈值-> PMMCOREV = 1
    2. SVSMHRRL = 2 -> Vcc 达到阈值-> PMMCOREV = 2
    3. SVSMHRRL = 3 -> Vcc 达到阈值-> PMMCOREV = 3

 

通过这样做、V (SVSH_IT+)电压阈值不符合不同 Vcore 电平所需的建议 Vcc。

其中:-

    1. SVSMHRRL = 1 -> Vcc 范围为1.94V -> PMMCOREV = 1 (建议2.0V)
    2. SVSMHRRL = 2 -> Vcc 范围2.14V -> PMMCOREV = 2 (建议2.2V)
    3. SVSMHRRL = 3 -> Vcc 范围2.30V -> PMMCOREV = 3 (建议2.4V)

 

这会导致问题吗?

我应该使用 SVSMHRRL = 4 (2.4V)来设置 PMMCOREV = 3吗?

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

    您好、Eddie、

    首先、让我提醒您、MSP430F5419A 有几个与 PMM 相关的勘误表。 根据版本的不同、可能会有或多或少的勘误表、但检查与您的版本关联的勘误表仍然很重要。

    [引用用户="Eddie Koh ]MSP430F5419A 的数据表 中不包含 PMM、SVS 和 SVM 低侧的电压电平规格。 可以提供吗? (适用于 MSP430F5419)

    我很抱歉。 我不确定该测试数据是否可用、因此我建议使用 MSP430F5419A 数据表中提供的值作为基准。

    [引用 USER="Eddie Koh ]]在上电期间、CPU 将在 VCC 大于1.74V (由 V (SVSH_IT+)控制)之前运行。 然而 ,MSP430F5419A的建议运行电压为1.8V 以上。 如何避免 CPU 在1.74V 至1.8V 的电压范围内运行?[/QUERP]

    在    第40页的 MSP430F5419A 数据表 www.ti.com/lit/gpn/msp430f5419a 中、在建议运行条件下、您将找到针对 CVcore 的470nF 技术规格。 此外、同一个表中还有另一个指定 CVcc 与 CVcore 之比的要求: CVcc (DVcc 上的去耦电容器)必须至少是 CVcore 值的10倍。

    如果 CPU 在 VCC 小于1.8V 时运行、改变 SVSMHRRL = 1可能会有所帮助。 但是、可用的 SVSH 设置取决于 VCORE (PMMCOREVx)设置。

    [引用 user="Eddie Koh ]]我提到这句话:“VCORE 电平必须一次只增加一个电平。” –(slau208q,第108页)

    这非常重要。 我建议使用'msp430x54xA_UCS_3.c'中的"SetVcoreUp()"函数、并使用 针对 PMMCOREV_1、 PMMCOREV_2和 PMMCOREV_3的函数。

    SetVcoreUp (PMMCOREV_1);
    SetVcoreUp (PMMCOREV_2);
    SetVcoreUp (PMMCOREV_3); 

    这是代码示例(在 此处找到)。

    /*-版权所有-、BSD_EX
    *版权所有(c) 2012、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430F543xA 演示-具有12MHz DCO 的软件切换 P1.0
    //
    //说明:通过软件循环内的 XOR'ing P1.0切换 P1.0。
    // ACLK 在引脚 P11.0上被压掉,SMCLK 在 P11.2上被引出,MCLK
    //在引脚 P11.1上被引出。
    // ACLK = REFO = 32kHz、MCLK = SMCLK = 12MHz
    // PMMCOREV = 1以支持高达12MHz 的时钟
    //
    // MSP430F5438A
    // --------
    // /|\| |
    // || P11.0|->ACLK
    // -|RST P11.1|->MCLK
    // | P11.2|->SMCLK
    // | |
    // | P1.0|->LED
    //
    注:
    //要以高达12MHz 的频率运行系统,必须将 VCORE 设置为1.6V
    //或更高。
    ////
    F. Chen
    // Texas Instruments Inc.
    // 2012年12月
    //使用 CCS 生成版本:5.2.1和 IAR 嵌入式工作平台版本:5.51.1
    //*********
    #include 
    
    void SetVcoreUp (unsigned int level);
    
    int main (void)
    {
    WDTCTL = WDTPW+WDTHOLD; //停止 WDT
    SetVcoreUp (PMMCOREV_1); //针对12MHz 时钟
    P1DIR |= BIT0设置 VCORE = 1.6V; // P1.0输出
    P11DIR |= 0x07; // ACLK、MCLK、SMCLK 设置为引脚
    P11SEL |= 0x07; // P11.0,1,2,用于调试。
    
    UCSCTL3 |= SELREF_2; //设置 DCO FLL 基准= REFO
    UCSCTL4 |= SELA _2; //设置 ACLK = REFO
    
    __bis_SR_register (SCG0); //禁用 FLL 控制环路
    UCSCTL0 = 0x0000; //设置可能的最低 DCOx、MODx
    UCSCTL1 = DCORSEL_5; //选择 DCO 范围24MHz 操作
    UCSCTL2 = FLLD_1 + 374; //将 DCO 乘法器设置为12MHz
    //(N + 1)* FLLRef = Fdco
    //(374 + 1)* 32768 = 12MHz
    //设置 FLL Div = fDCOCLK/2
    __BIC_SR_register (SCG0); //启用 FLL 控制环路
    
    // DCO 范围位已
    更改时最坏情况下的稳定时间//为 n x 32 x 32 x f_MCLK /f_FLL_reference。
    有关优化、请参阅5xx // UG 中的 UCS 一章。
    // 32 x 32 x 12 MHz/32、768Hz = 375000 = MCLK 周期、以便 DCO 稳定
    __DELAY_CYCLLES (375000);
    
    //循环、直到 XT1、XT2和 DCO 故障标志被清除
    DO
    {
    UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG; //清除故障标志
    } while (SFRIFG1&OFIFG); //测试振荡器故障标志
    
    while (1)
    {
    P1OUT ^= BIT0; //切换 P1.0
    _DELAY_CYCLES (600000); //延迟
    }
    
    
    void SetVcoreUp (unsigned int level)
    {
    //打开 PMM 寄存器以写入
    PMMCTL0_H = PMMPW_H;
    //设置 SVS/SVM 高电平新电平
    SVSMHCTL = SVSHE + SVSHRVL0 *电平+ SVMHE + SVSMHRRL0 *电平;
    //将 SVM 低电平设置为新电平
    SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 *电平;
    //等待 SVM 稳定
    ,而 SVSMLCTL = SVSMLCTL (SVSMLLY0)= SVSMLPMIFG = SVSMLPM0);//等待 SVSMLPMIFG (= SVSM
    //清除已设置的标志
    PMMIFG &=~(SVMLVLRIFG + SVMLIFG);
    //将 VCORE 设置为新的电平
    PMMCTL0_L = PMMCOREV0 *电平;
    //如果
    ((PMMIFG & SVMLIFG)))、则等待达到新的电平
    while (((PMMIFG & SVMLVLRIFG)=0);
    //将 SVS/SVM 低电平设置为新的电平
    SVSMLCTL = SVSLE + SVSLRVL0 *电平+ SVMLE + SVSMLRRL0 *电平;
    //锁定 PMM 寄存器以进行写访问
    PMMCTL0_H = 0x00;
    }