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

[复制链接]
20346|125
必胜客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用法,并在帖子后参与内容学习与讨论,可以是对该例程的理解,也可以是相关疑问或问题。再来分享两个相关的程序
  1. //******************************************************************************
  2. //  MSP430i20xx Demo - PMM Module, Compare VMONIN to Internal 1.16V, Poll IFG
  3. //
  4. //  Description: Setup VMON to compare input from VMONIN to internally generated
  5. //  1.16V source. If VMONIN drifts below 1.16V, clear the LED. If VMONIN drifts
  6. //  above 1.16V, turn the LED on.
  7. //
  8. //  ACLK = 32kHz, MCLK = SMCLK = Calibrated DCO = 16.384MHz
  9. //  * Ensure low_level_init.c is included when building/running this example *
  10. //
  11. //               MSP430i20xx
  12. //             -----------------
  13. //         /|\|                |
  14. //          | |                |
  15. //          --|RST         P2.3|<-- VMONIN
  16. //            |            P1.4|--> LED
  17. //            |                |
  18. //
  19. //  T. Witt
  20. //  Texas Instruments, Inc
  21. //  September 2013
  22. //  Built with Code Composer Studio v5.5
  23. //******************************************************************************
  24. #include "msp430.h"

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

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

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

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

  36.     while (1) {
  37.         if(VCMONCTL&VMONIFG)
  38.             P1OUT &= ~BIT4;             // VMONIN < 1.16V, LED Off
  39.         else
  40.             P1OUT |= BIT4;              // VMONIN > 1.16V, LED On
  41.     }
  42. }



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

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

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

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

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

  36.     __bis_SR_register(GIE);             // Enable Interrupts

  37.     while (1) {
  38.         P1OUT |= BIT4;                  // VMONIN > 1.16V, LED On
  39.     }
  40. }

  41. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  42. #pragma vector=VMON_VECTOR
  43. __interrupt void VMON_ISR(void) {
  44. #elif defined(__GNUC__)
  45. void __attribute__ ((interrupt(VMON_VECTOR))) VMON_ISR (void)
  46. #else
  47. #error Compiler not supported!
  48. #endif
  49.     P1OUT &= ~BIT4;                     // VMONIN < 1.16V, LED Off
  50. }


必胜客A 发表于 2015-4-20 20:14 | 显示全部楼层
  1. //  MSP430i20xx Demo - PMM Module, Compare DVCC to 2.85V, VMON ISR
  2. //
  3. //  Description: Setup VMON to compare DVCC to internally generated
  4. //  2.85V. If DVCC drifts below 2.85V, clear the LED. If DVCC drifts
  5. //  above 2.85V, turn the LED on.
  6. //
  7. //  ACLK = 32kHz, MCLK = SMCLK = Calibrated DCO = 16.384MHz
  8. //  * Ensure low_level_init.c is included when building/running this example *
  9. //
  10. //               MSP430i20xx
  11. //             -----------------
  12. //         /|\|                |
  13. //          | |                |
  14. //          --|RST             |
  15. //            |            P1.4|--> LED
  16. //            |                |
  17. //
  18. //  T. Witt
  19. //  Texas Instruments, Inc
  20. //  September 2013
  21. //  Built with Code Composer Studio v5.5
  22. //******************************************************************************
  23. #include "msp430.h"

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

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

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

  33.     __bis_SR_register(GIE);             // Enable Interrupts

  34.     while (1) {
  35.         P1OUT |= BIT4;                  // DVCC > 2.85V, LED On
  36.     }
  37. }

  38. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  39. #pragma vector=VMON_VECTOR
  40. __interrupt void VMON_ISR(void) {
  41. #elif defined(__GNUC__)
  42. void __attribute__ ((interrupt(VMON_VECTOR))) VMON_ISR (void)
  43. #else
  44. #error Compiler not supported!
  45. #endif
  46.     P1OUT &= ~BIT4;                     // DVCC < 2.85V, LED Off
  47. }


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处的复位向量必须指向启动代码

注意在启动代码里面,就有TVL checksum检查,如果不正确进入LPM4模式,正确则校准参考量,参考量就是来自TVL,因此TVL是不可或缺的。

还有一个问题。LPM4 和LPM4.5是两种模式

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:“存储在闪存的表,包含特定于设备的信息。”
这里的这个“设备”具体指什么呢?哪位可以给我举个例子 ...


你看,它包含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模式下芯片功耗可以到多少啊?有哪些方式可以退出该模式进入正常运行模式? ...


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种:

谢谢你,知道了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部