【MSP430i2xx教程第四讲】电源管理模块 & TLV

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
必胜客A| | 2015-4-20 20:07 | 显示全部楼层
2.查找该家族手册了解calibrateReference是怎么回事。
关于这个问题,是否是Reference Calibration还是就是calibrateReference表示疑问
如果是Reference Calibration的话,字面的意思就是校准参考值,通过编程配置REFCAL0 和 REFCAL1 这两个寄存器,来实现校准参考电压和电流。

使用特权

评论回复
feiting94| | 2015-4-20 20:07 | 显示全部楼层
LPM4.5是一种额外的低功耗模式,这种模式中,PMM 校准器禁止工作来获得低功耗。因为没有电压提供给VCORE,CPU和所有数字模块包括RAM的内容都会丢失。因此建议在进入LPM4.5之前先将重要数据保存至Flash中。1、进入LPM4.5模式:将LPM45CTL寄存器的REGOFF位置1,并LPM4运行在CPU状态寄存器。

为避免IO口失控,LPM45CTL寄存器的LOCKLPM45位自动硬件置1,当重新上电时,该位只能软件或BOR(零功耗掉电复位)清零。否则IO脚状态仍会锁住。IO口预先必须都设置为GPIO口,不能复用,可以上拉输入,上拉或下拉输出,但不能浮空输入。此外,设置输入中断来唤醒LPM4.5。不是所有IO脚有这个功能,设置PxIES寄存器可以决定唤醒设备的沿跳变类型。进入LPM4.5模式后,只有引脚状态保留,其他寄存器内容都会丢失。


2、退出LPM4.5模式:将/RST脚提供一个低电平,或者上电循环,或者特定io脚(可以从datasheet中找到),任何从LPM4.5退出都会导致BOR。
感觉这种模式和STM32的睡眠模式很类似,可以显著降低功耗。

使用特权

评论回复
必胜客A| | 2015-4-20 20:09 | 显示全部楼层
另外,这个标准值的一些信息会存储在TLV中

使用特权

评论回复
必胜客A| | 2015-4-20 20:11 | 显示全部楼层
3.查看driverlib_2_00_00_16\examples\MSP430i2xx\pmm\ pmm_ex2_vmon1160mV.c例程,学习相关APP用法,并在帖子后参与内容学习与讨论,可以是对该例程的理解,也可以是相关疑问或问题。再来分享两个相关的程序
//******************************************************************************
//  MSP430i20xx Demo - PMM Module, Compare VMONIN to Internal 1.16V, Poll IFG
//
//  Description: Setup VMON to compare input from VMONIN to internally generated
//  1.16V source. If VMONIN drifts below 1.16V, clear the LED. If VMONIN drifts
//  above 1.16V, turn the LED on.
//
//  ACLK = 32kHz, MCLK = SMCLK = Calibrated DCO = 16.384MHz
//  * Ensure low_level_init.c is included when building/running this example *
//
//               MSP430i20xx
//             -----------------
//         /|\|                |
//          | |                |
//          --|RST         P2.3|<-- VMONIN
//            |            P1.4|--> LED
//            |                |
//
//  T. Witt
//  Texas Instruments, Inc
//  September 2013
//  Built with Code Composer Studio v5.5
//******************************************************************************
#include "msp430.h"

void main(void) {
    WDTCTL = WDTPW | WDTHOLD;           // Stop WDT

    // Setup P1.4 for LED
    P1DIR |=  BIT4;                     // LED Output
    P1OUT &= ~BIT4;                     // LED Off

    VCMONCTL |= VMONLVL_7;              // Compare VMONIN to 1.16V
    // When started up, VMON requires a settling time of 0.5us
    __delay_cycles(10); // MCLK = ~16MHz; 1 cycle = ~0.0625us

    // Setup P2.3 for VMONIN
    P2SEL0 |= BIT3;
    P2SEL1 |= BIT3;

    while (1) {
        if(VCMONCTL&VMONIFG)
            P1OUT &= ~BIT4;             // VMONIN < 1.16V, LED Off
        else
            P1OUT |= BIT4;              // VMONIN > 1.16V, LED On
    }
}



使用特权

评论回复
必胜客A| | 2015-4-20 20:13 | 显示全部楼层
再分享一个相关的
//  MSP430i20xx Demo - PMM Module, Compare VMONIN to Internal 1.16V, VMON ISR
//
//  Description: Setup VMON to compare input from VMONIN to internally generated
//  1.16V source. If VMONIN drifts below 1.16V, clear the LED. If VMONIN drifts
//  above 1.16V, turn the LED on.
//
//  ACLK = 32kHz, MCLK = SMCLK = Calibrated DCO = 16.384MHz
//  * Ensure low_level_init.c is included when building/running this example *
//
//               MSP430i20xx
//             -----------------
//         /|\|                |
//          | |                |
//          --|RST         P2.3|<-- VMONIN
//            |            P1.4|--> LED
//            |                |
//
//  T. Witt
//  Texas Instruments, Inc
//  September 2013
//  Built with Code Composer Studio v5.5
//******************************************************************************
#include "msp430.h"

void main(void) {
    WDTCTL = WDTPW | WDTHOLD;           // Stop WDT

    // Setup P1.4 for LED
    P1DIR |=  BIT4;                     // LED Output
    P1OUT &= ~BIT4;                     // LED Off

    VCMONCTL |= VMONLVL_7;              // Compare VMONIN to 1.16V
    VCMONCTL |= VMONIE;                 // Enable VMON interrupt
    // When started up, VMON requires a settling time of 0.5us
    __delay_cycles(10); // MCLK = ~16MHz; 1 cycle = ~0.0625us

    // Setup P2.3 for VMONIN
    P2SEL0 |= BIT3;
    P2SEL1 |= BIT3;

    __bis_SR_register(GIE);             // Enable Interrupts

    while (1) {
        P1OUT |= BIT4;                  // VMONIN > 1.16V, LED On
    }
}

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=VMON_VECTOR
__interrupt void VMON_ISR(void) {
#elif defined(__GNUC__)
void __attribute__ ((interrupt(VMON_VECTOR))) VMON_ISR (void)
#else
#error Compiler not supported!
#endif
    P1OUT &= ~BIT4;                     // VMONIN < 1.16V, LED Off
}


使用特权

评论回复
必胜客A| | 2015-4-20 20:14 | 显示全部楼层
//  MSP430i20xx Demo - PMM Module, Compare DVCC to 2.85V, VMON ISR
//
//  Description: Setup VMON to compare DVCC to internally generated
//  2.85V. If DVCC drifts below 2.85V, clear the LED. If DVCC drifts
//  above 2.85V, turn the LED on.
//
//  ACLK = 32kHz, MCLK = SMCLK = Calibrated DCO = 16.384MHz
//  * Ensure low_level_init.c is included when building/running this example *
//
//               MSP430i20xx
//             -----------------
//         /|\|                |
//          | |                |
//          --|RST             |
//            |            P1.4|--> LED
//            |                |
//
//  T. Witt
//  Texas Instruments, Inc
//  September 2013
//  Built with Code Composer Studio v5.5
//******************************************************************************
#include "msp430.h"

void main(void) {
    WDTCTL = WDTPW | WDTHOLD;           // Stop WDT

    // Setup P1.4 for LED
    P1DIR |=  BIT4;                     // LED Output
    P1OUT &= ~BIT4;                     // LED Off

    VCMONCTL |= VMONLVL_3;              // Compare DVCC to 2.85V
    VCMONCTL |= VMONIE;                 // Enable VMON Interrupt
    // When started up, VMON requires a settling time of 0.5us
    __delay_cycles(10); // MCLK = ~16MHz; 1 cycle = ~0.0625us

    __bis_SR_register(GIE);             // Enable Interrupts

    while (1) {
        P1OUT |= BIT4;                  // DVCC > 2.85V, LED On
    }
}

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=VMON_VECTOR
__interrupt void VMON_ISR(void) {
#elif defined(__GNUC__)
void __attribute__ ((interrupt(VMON_VECTOR))) VMON_ISR (void)
#else
#error Compiler not supported!
#endif
    P1OUT &= ~BIT4;                     // DVCC < 2.85V, LED Off
}


使用特权

评论回复
feiting94| | 2015-4-20 20:51 | 显示全部楼层
TLV就是64bytes,地址是Flash中的13C0h到13FFh。其中13C0h和13C1h是后面62字节的校验和,校验和在启动时对FLASH完整性检查很有帮助。
TLV主要包含设备信息和外设校准数据。
Start-up Code(SOC):启动代码。其实不管是什么CPU,都有一段启动代码(BIOS或者BootLoader),MSP430也不例外,它不是CPU自动具有的,也是用户必须完成的。在FFFEh处的复位向量必须指向启动代码
1.png
注意在启动代码里面,就有TVL checksum检查,如果不正确进入LPM4模式,正确则校准参考量,参考量就是来自TVL,因此TVL是不可或缺的。

还有一个问题。LPM4 和LPM4.5是两种模式
3.png
LPM4.5的功耗更低。
相比LPM4,LPM4.5其实就是电压校准器关闭了,

使用特权

评论回复
lvyunhua| | 2015-4-20 21:21 | 显示全部楼层
楼上讲解很详细!

使用特权

评论回复
lvyunhua| | 2015-4-21 09:22 | 显示全部楼层
LPM4.5模式下芯片功耗可以到多少啊?有哪些方式可以退出该模式进入正常运行模式?

使用特权

评论回复
uestc_zyd| | 2015-4-21 12:16 | 显示全部楼层
TLV:“存储在闪存的表,包含特定于设备的信息。”
这里的这个“设备”具体指什么呢?哪位可以给我举个例子?

使用特权

评论回复
uestc_zyd| | 2015-4-21 12:24 | 显示全部楼层
“bool TLV_performChecksumCheck (void)” 这里的bool是函数类型吧?是什么类型的函数呢?我先去百度一下。

使用特权

评论回复
uestc_zyd| | 2015-4-21 12:25 | 显示全部楼层
uestc_zyd 发表于 2015-4-21 12:24
“bool TLV_performChecksumCheck (void)” 这里的bool是函数类型吧?是什么类型的函数呢?我先去百度一下 ...

经百度:

bool  型的变量是c语言常用的变量之一,就是true和false,其实可以理解两者就是1和0表示。
一般用来判断函数的执行情况,一个子函数的返回值可以定义成bool值变量,这样的话返回值基本上就是表示此函数是否能运行成功。

使用特权

评论回复
uestc_zyd| | 2015-4-21 12:28 | 显示全部楼层
你们说为什么core的电压一般都比外面的电压低很多呢?

使用特权

评论回复
uestc_zyd| | 2015-4-21 12:29 | 显示全部楼层
uestc_zyd 发表于 2015-4-21 12:28
你们说为什么core的电压一般都比外面的电压低很多呢?

好像还这没见过core的电压值比外围电压高的。。。

core电压是从外围来的吧?是不是core需要的电压本来就低呢?将core的电源电压降低是为了降低功耗吗?

使用特权

评论回复
uestc_zyd| | 2015-4-21 12:30 | 显示全部楼层
数码小叶 发表于 2015-4-20 19:41
同时,由于LPM4.5的特殊性,如何保持IO的配置继续工作,也是要考虑的

哦?那一般是如何保持IO的配置继续工作的呢??

使用特权

评论回复
uestc_zyd| | 2015-4-21 12:32 | 显示全部楼层
112207301219 发表于 2015-4-20 19:12
TLV在开发过程中起什么作用啊?

使用和校准设备的,应该是在使用设备时能够获取设备的一些信息,然后利用这些信息可以校准设备。

但是我不明白的是具体来说这个设备一般会是什么呢?

使用特权

评论回复
112207301219| | 2015-4-21 12:35 | 显示全部楼层
uestc_zyd 发表于 2015-4-21 12:32
使用和校准设备的,应该是在使用设备时能够获取设备的一些信息,然后利用这些信息可以校准设备。

但是我 ...

手册讲得太抽象,不明白具体是干什么的。

使用特权

评论回复
feiting94| | 2015-4-21 13:09 | 显示全部楼层
uestc_zyd 发表于 2015-4-21 12:16
TLV:“存储在闪存的表,包含特定于设备的信息。”
这里的这个“设备”具体指什么呢?哪位可以给我举个例子 ...

1.png
你看,它包含REF Calibration,就是电压校准,还包含DCO校准,SD24校准,这些外设都是要基准信号的,都是来自TVL

使用特权

评论回复
feiting94| | 2015-4-21 13:23 | 显示全部楼层
本帖最后由 feiting94 于 2015-4-21 13:24 编辑
lvyunhua 发表于 2015-4-21 09:22
LPM4.5模式下芯片功耗可以到多少啊?有哪些方式可以退出该模式进入正常运行模式? ...

2.png
LPM4.5模式的功耗是 15 nA
退回到正常模式的方式有3种:
1、active-low event on RST/NMI pin,就是相当于硬件复位信号
2、a power-on cycle,一个上电周期,不知道什么意思,不懂
3、by specific I/O,这种方式要在进入LPM4.5模式之前将IO脚设置为上拉输入,且开启外部中断,中断触发的沿跳变模式是可以人为设定的,当特定IO,原文这么写的,Not all devices include wakeup from LPM4.5 via I/O, and not all inputs with interrupt capability offer wakeup from LPM4.5.
就是说不同型号的MSP430可能有的不具备这个功能,而且可以IO退出LPM4.5的MSP430型号不同,IO脚也不一样,注意不是所有的IO脚都可以触发LPM4.5模式退出的。

使用特权

评论回复
lvyunhua| | 2015-4-21 13:40 | 显示全部楼层
LPM4.5模式的功耗是 15 nA
退回到正常模式的方式有3种:

谢谢你,知道了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则