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

[复制链接]
14751|125
手机看帖
扫描二维码
随时随地手机跟帖
xlhtracy|  楼主 | 2015-4-20 13:32 | 显示全部楼层 |阅读模式
本帖最后由 xlhtracy 于 2015-4-20 13:35 编辑

本教程作者为21ic网友@gaoyang9992006 ,回帖参与讨论、提问、分享,就能赢取超多丰厚奖励哦~  @gaoyang9992006 也将随时和大家交流学习中的问题。(PS:本教程未经允许,谢绝转载

活动说明详见:【学教程,送奖励】GET新技能,和gaoyang一起学习MSP430i2xx

前三讲链接:(错过的去补课


【MSP430i2xx教程第二讲】时钟系统 & EUSCI_A_UART

【MSP430i2xx教程第三讲】24-BitΣ-Δ ADC & FlashCtl-Flash存储控制器

下面正式开讲,不喜欢阅读帖子的亲可以直接下载第四讲的文档进行阅读:

MSP430I2XX 教程第四讲.pdf (409.06 KB)

相关帖子

xlhtracy|  楼主 | 2015-4-20 13:35 | 显示全部楼层
本帖最后由 xlhtracy 于 2015-4-20 14:11 编辑

第七章  电源管理模块PMM

7.1  本章引言
    PMM提供管理电源及监视其相关设备的所有函数。它的主要功能是:生成一个电源电压的核心逻辑;提供监督和监测设备的电压(VCC)和核心(VCORE)电压发生器的机制。
    PMM使用一个集成的低压差稳压器(LDO),用于从VCC提供的初级电压产生一个二级核心电压(VCORE)VCORE提供给CPU、内存(flash / RAM),和数字模块,而VCC提供给I / O模块和模拟模块。VCORE输出使用一个通过PMM内置的参考模块产生的电压基准维持。输入或调节器的初级侧被称为其高侧。输出或次级侧被称为其低侧。
    PMM特性包括
    电源电压(VCC)范围:2.2 V3.6 V
    高端掉电复位(BOTH
    针对VCC的阈值等级可编程电源电压监控和外部管脚VMONIN)对内部参考监控。
    1.8 V固定电压设备核心(VCORE)发生器
    电源电压监控器(SVS)的VCORE
    为整个器件和集成温度传感器提供精确的1.16-V参考。

7.2  函数总览
1
void PMM_setupVoltageMonitor( uint8_t voltageMonitorLevel )
设置电压监视器
2
void PMM_calibrateReference (void)
校准
3
void PMM_setRegulatorStatus (uint8_t status)
配置PMM校准器状态
4
void PMM_unlockIOConfiguration (void)
解锁IO
5
void PMM_enableInterrupt (uint8_t mask)
使能中断
6
void PMM_disableInterrupt (uint8_t mask)
关闭中断
7
void PMM_getInterrupt (uint8_t mask)
返回中断状态
8
void PMM_[size=9.0000pt]clearInterrupt (uint8_t mask)
清除中断掩码

    函数分类
    PMM API可以分成三组函数:那些设置PMM的,那些使用LPM4.5模式的,还有那些用于PMM中断的
设置PMM的有:
    void PMM_setupVoltageMonitor( uint8_t voltageMonitorLevel )SD24_initConverter()
    void PMM_calibrateReference (void)SD24_startConverterConversion()
用于使用LPM4.5模式的有:
    void PMM_setRegulatorStatus (uint8_t status)
    void PMM_unlockIOConfiguration (void)
用于PMM中断的有:
    void PMM_enableInterrupt (uint8_t mask)
    void PMM_disableInterrupt (uint8_t mask)
    void PMM_getInterrupt (uint8_t mask)
    void PMM_clearInterrupt (uint8_t mask)

详细描述
    void PMM_setupVoltageMonitor( uint8_t voltageMonitorLevel )
      校准。
      修改寄存器REFCAL0和REFCAL1.
      返回值:空。

    void PMM_clearInterrupt (uint8_t mask)
      清中断掩码。
    参数
mask
掩码值是下面数值的逻辑或
PMM_LPM45_INTERRUPT            LPM4.5中断
    返回:无。

    void PMM_disableInterrupt (uint8_t mask)
      关闭中断。
    参数
mask
掩码值是下面数值的逻辑或
PMM_VMON_INTERRUPT            电压监视器中断
    返回:无。

    void PMM_ensableInterrupt (uint8_t mask)
      开启中断。
    参数
mask
掩码值是下面数值的逻辑或
PMM_VMON_INTERRUPT            电压监视器中断
    返回:无。

    unit8_t PMM_getInterruptStatus (uint8_t mask)
      返回中断状态。
    参数
mask
掩码值是下面数值的逻辑或
PMM_VMON_INTERRUPT            电压监视器中断
PMM_LPM45_INTERRUPT            LPM4.5中断
    返回:下面量的逻辑或。
      PMM_VMON_INTERRUPT            电压监视器中断
      PMM_LPM45_INTERRUPT            LPM4.5中断
      指示中断掩码状态

    void PMM_setRegulatorStatus (uint8_t status)
      设置PMM校准器的状态
    参数
mask
可选值有:
PMM_REGULATOR_ON             开启PMM校准器
PMM_REGULATOR_OFF            关闭PMM校准器
修改LPM45CTL寄存器REGOFF      
注释:手册解释的刚好颠倒,是不是错了??
    修改LPM45CTL寄存器
    返回:无。

    void PMM_setupVoltageMonitor( uint8_t voltageMonitorLevel )
      配置电压监视器
    参数
voltageMonitorLevel
可选值有:
PMM_DISABLE_VMON            关闭电压监视器
PMM_DVCC_2350MV               DVCC2350mV比较
PMM_DVCC_2650MV               DVCC2650mV比较
PMM_DVCC_2850MV               DVCC2850mV比较
PMM_VMONIN_1160MV             VMONIN1160mV比较
修改寄存器VMONCTLREGOFF位      
    修改VMONCTL寄存器

    void PMM_unlockIOConfiguration (void)
      解锁IO.
      修改寄存器LMP45CTLLOCKLPM45
      返回:无。

使用特权

评论回复
xlhtracy|  楼主 | 2015-4-20 13:35 | 显示全部楼层
本帖最后由 xlhtracy 于 2015-4-20 14:16 编辑

7.3  例程
    描述:在这个例子中,设备设置进入LPM4.5.在进入LPM4.5之前LED是开启的来只是进入LPM4.5
    退出LPM4.5P2.1的上升沿触发,以导致设备的重置。一旦重置,LPM4.5中断设置和设备开始仅仅翻转LED状态。该例程示范如何配置设备的LPM4.5和从它成功的中断
图片1.jpg
#include "driverlib.h"
#define GPIO_PIN_ALL (GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3 |
GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7)

int main(void) {
WDT_hold(WDT_BASE);
// Configure GPIO for low current numbers while in LPM4.5
//下面四条函数把P1P2的八个IO配置成输出,并拉低电平。
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN_ALL);
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN_ALL);
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN_ALL);
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN_ALL);
// Determine if coming out of LPM 4.5
// 判断是否从LPM4.5出来
if(PMM_getInterruptStatus(PMM_LPM45_INTERRUPT))
{
PMM_clearInterrupt(PMM_LPM45_INTERRUPT);
// Need to unlock IO after exiting LPM4.5 so LED will blink
// 需要解锁后退出LPM4.5 IO,这样LED将会闪
PMM_unlockIOConfiguration();
}
else
{
// Configure exit of LPM4.5 on P2.1 interrupt
// 配置P2.1的中断以退出LPM4.5,P2.1设置为输入,选择上升沿中断,清除中断源,使能中断
GPIO_setAsInputPin(GPIO_PORT_P2, GPIO_PIN1);
GPIO_selectInterruptEdge(GPIO_PORT_P2, GPIO_PIN1,
GPIO_LOW_TO_HIGH_TRANSITION);
GPIO_clearInterrupt(GPIO_PORT_P2, GPIO_PIN1);
GPIO_enableInterrupt(GPIO_PORT_P2, GPIO_PIN1);
// Turn on LED to indicate we are about to enter LPM4.5
// LED,指示我们进入了LPM4.5,LEDP1.4管脚,输出高电平。
GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN4);
// Turn off regulator so we can enter LPM4.5
// 关校准器,这样我们才能进入LPM4.5,之后通过特殊寄存器指令进入LPM4.5
PMM_setRegulatorStatus(PMM_REGULATOR_OFF);
__bis_SR_register(LPM4_bits);
}
// Slow down clock so we can see LED blink
//减缓时钟,所以我们可以看到LED闪烁
// Configure MCLK = ~1MHz
// DCO默认采用16.384Mhz,获取1MHz频率,需要进行16分频,在循环体翻转,延时1s
CS_initClockSignal(CS_MCLK, CS_CLOCK_DIVIDER_16);
while(1)
{
GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN4);
__delay_cycles(100000);
}
}

使用特权

评论回复
xlhtracy|  楼主 | 2015-4-20 13:43 | 显示全部楼层
本帖最后由 xlhtracy 于 2015-4-20 14:18 编辑

7.4 问题
1.查找本系列相关资料,了解LPM4.5,帖子后面回复发表个人理解与见解。
2.查找该家族手册了解calibrateReference是怎么回事
3.查看driverlib_2_00_00_16\examples\MSP430i2xx\pmm\ pmm_ex2_vmon1160mV.c例程,学习相关APP用法,并在帖子后参与内容学习与讨论,可以是对该例程的理解,也可以是相关疑问或问题。

使用特权

评论回复
xlhtracy|  楼主 | 2015-4-20 13:44 | 显示全部楼层
本帖最后由 xlhtracy 于 2015-4-20 14:43 编辑

第八章  Tag Length Value(TLV)
8.1  本章引言
    TLV(标签长度值)是一个存储在闪存的表,其中包含特定于设备的信息。包含重要的信息为使用和校准设备。一个TLV 内容的列表也可在特定于设备的数据表 (在TLV 部分),其具体功能上的解释在MSP430i2xx Family User’s Guide中提供。
    本驱动程序包含在tlv.c文件里,头文件在tlv.h

8.2  函数总览
1
void TLV_getInfo (uint8_t tag,uint8_t *length , uint16_t **data_address)
获取TLV信息
2
bool TLV_performChecksumCheck (void)
执行对TLV校验检查
    这组API用于查询TLV结构中的信息。
    TLV_getInfo() 该函数获取一个标签的值和这个标签的长度
    TLV_performaChecksumCheck() 该函数对TLV执行CRC检查

详解
    void TLV_getInfo (uint8_t tag,uint8_t *length , uint16_t **data_address)
    获取TLV信息。
    TLV结构使用一个标签或标识表段的基地址信息存储的地方。这可以用于检索设备的校准常数或找出有关该设备的详细信息。此函数可检索请求标签的地址和标签的长度。请参考你设备的手册,确认标签是否可用。
    参数
tag
代表的标签需要检索的信息。可用值有:
TLV_CHECKSUM
TLV_TAG_DIE_RECORD
TLV_LENGTH_DIE_RECORD
TLV_VAFER_LOT_ID
TLV_DIE_X_POSITION
TLV_DIE_Y_POSITION
TLV_TEST_RESULTS
TLV_REF_CALIBRATION_TAG
TLV_REF_CALIBRATION_LENGTH
TLV_REF_CALIBRATION_REFCAL1
TLV_REF_CALIBRATION_REFCAL0
TLV_DCO_CALIBRATION_TAG
TLV_DCO_CALIBRATION_LENGTH
TLV_DCO_CALIBRATION_CSIRFCAL
TLV_DCO_CALIBRATION_CSIRTCAL
TLV_DCO_CALIBRATION_CSERFCAL
TLV_DCO_CALIBRATION_CSIETCAL
TLV_SD24_CALIBRATION_TAG
TLV_SD24_CALIBRATION_LENGTH
TLV_SD24_CALIBRATION_SD24TRIM
lentgh
通过间接引用作为返回值执行。此函数检索TLV标签长度值。一旦调用该函数,该值通过*length指定,被应用层使用。
data_address
通过间接引用作为返回值执行。一旦该函数被调用,data_address指向的指针值从指定检索TAG标签。
    返回:无。

    bool TLV_performChecksumCheck (void)
    执行TLV的校验和检测。
    2秒补充校验和计算的 TLV 中存储的数据。如果计算出的校验和是等于在 TLV 存储的校验和,用户可知道 TLV 未损坏。这个API可以在BOR之后使用写配置常量到相应的寄存器之前。
    返回值:如果TLV校验和匹配存储在TLV的值,即为真,否则为假。

8.3  例程
    描述:在该例程中,TLV的校验和是被检测,以确认TLV没有毁坏。如果TLV没有错误,LED点亮。造成错误,首先备份TLV然后擦除它的一部分。这将导致发生校验和错误,LED不会被点亮。
图片2.jpg

#include "driverlib.h"
int main(void) {
bool result;
// Stop the WDT
WDT_hold(WDT_BASE);
// Check the TLV checksum
result = TLV_performChecksumCheck();
// Turn on LED if test passed
if(result)
{
GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN4);
}
else
{
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
}
// LED for indicating checksum result
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
__bis_SR_register(LPM0_bits);
}


该例程看似很简单,那么我们的问题就是TLV具体是用来干什么的?查找资料参与讨论。

使用特权

评论回复
xlhtracy|  楼主 | 2015-4-20 13:48 | 显示全部楼层
本帖最后由 xlhtracy 于 2015-4-20 14:44 编辑

回顾
    我们一共学习了8种外设使用方法,还有很多功能我们没有学习,相信你也能够结合这几节课的内容自学其他的部分,如果你要用得其他部分到的话。根据这四节课程相信你也对MSP430i2xx家族,以及相关库函数的结构和编写的特点有了一定的认识,对未来深入学习打下了基础。MSP430i2xx是为工业级应用设计的,我们可以用于电表和水表的应用设计,特别精简的CS系统,让你的作品不会因为外部晶振和复杂的时钟设计而产生累赘感。该家族集成的DCO拥有超高的精度,可以完胜你关于时钟相关的大部分应用。ADC模块使用了SD24,高精度的模数模块可以胜任你所有的ADC检测应用,该ADC在仪表应用有出色的表现。本课程会提供若干相关应用文档下载,帮助你更好的了解430所擅长的领域。该系列I/O与以往430不同的地方在于不存在上下拉电阻,这个可以参考该家族技术手册了解。最后祝大家学习进步,本版主能力有限,部分翻译可能很不到位,也希望该教材起到抛砖引玉的效果,重要的是让你知道TI 推出了一款新的430单片机,它更加适合工业级的设计应用。同时开心的告诉大家,TI终于把430抄底功耗特性引入了32位机,新推出的MSP432单片机拥有430的超低功耗特性,同时具备32ARM核心。另外TI也推出的有MSP430FRxx系列,该系列采用铁电存储,并提供库函数集,在430家族16位机里具备最为丰富的外设和功能,有兴趣的可以了解一下。

使用特权

评论回复
xlhtracy|  楼主 | 2015-4-20 13:50 | 显示全部楼层
本帖最后由 xlhtracy 于 2015-4-20 14:57 编辑

相关资料下载:
MSP430I2XX 教程第四讲.pdf (409.06 KB)

使用特权

评论回复
gaoyang9992006| | 2015-4-20 13:58 | 显示全部楼层
自己顶一个。方便添加内容

使用特权

评论回复
hanzhenfei| | 2015-4-20 14:01 | 显示全部楼层
顶一个,前排留名。呵呵

使用特权

评论回复
dirtwillfly| | 2015-4-20 14:49 | 显示全部楼层
不错,表示支持

使用特权

评论回复
昱枫| | 2015-4-20 16:23 | 显示全部楼层
先看看

使用特权

评论回复
月下飞鸿| | 2015-4-20 16:57 | 显示全部楼层
赶紧的占座,第三讲占座有点晚了

使用特权

评论回复
数码小叶| | 2015-4-20 17:08 | 显示全部楼层
一下都到第四讲了,好快啊

使用特权

评论回复
数码小叶| | 2015-4-20 17:45 | 显示全部楼层
那个库函数说明确实写反了,@gaoyang9992006的教程是对的 捕获41.PNG

捕获42.PNG

捕获43.PNG

使用特权

评论回复
lvyunhua| | 2015-4-20 17:47 | 显示全部楼层
赶紧来学习了。

使用特权

评论回复
hxfxt| | 2015-4-20 18:15 | 显示全部楼层
支持一个!

使用特权

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

使用特权

评论回复
数码小叶| | 2015-4-20 19:38 | 显示全部楼层
LPM4.5可以说是一个额外的低功耗模式,在LPM4.5下,本课程所讨论的PMM模块也被禁止了, Vcore不被供能,CPU以及所有的数字模块包括RAM,都被关闭了,所有的寄存器和RAM值会丢失,所以这里涉及到一个问题,就是重要的数据你要保存到 flash在你程序进入LPM4.5之前.

附上一张图:

捕获44.PNG

使用特权

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

使用特权

评论回复
必胜客A| | 2015-4-20 19:56 | 显示全部楼层
1.查找本系列相关资料,了解LPM4.5,帖子后面回复发表个人理解与见解。
LPM4.5模式是一个特殊的低功耗模式,当芯片进入低功耗LPM4.5模式后,电源管理模块(PMM)的内部稳压器被禁止,此时,芯片的核心电电源包括JTAG和调试(EEM)逻辑设备的电压都将禁止。
由于因为在LPM5模式下PMM不会为芯片核心提供电源,所以CPU和所有的数字模块包括内存、EEM和JTAG接口都将由于失电而关闭。这样DEBUG调试器与芯片之间的通信就会停止,失去了与芯片的同步。为了我们仍然能够在调试程序的过程中,使调试器恢复与芯片同步,所以才会产品LPM4.5这一低功耗模式,可以说LPM4.5是最低功耗的模式。

使用特权

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

本版积分规则

个人签名:菜地里的西兰花

51

主题

1450

帖子

24

粉丝