一、运用约束:
当运用MSP430x41x器材的时分,应该留意的是,x413,x417和x419在器材上有很大的差异。
关于SVS这一块,以413和419为典型,413只需1.9V这一档电压监测,不只电压值不可选,还只能测来自VCC的电压;419不只具有SVSIN能够监测外部的电压,而非只限制在VCC内部电压上,还有14种不同电压可选,能够恣意监控内部或外部电压了。
假如要在413上做电池的低电量指示,非1.9V不报警,所以不适于锂电池供电的设备,只适合于运用一次性干电池的设备运用。要想做锂电池的指示,要么不必413,要么用比较器完成。
二、运用误区:
在运用41x器材上的SVS时,许多人或许误读了手册,或是没有细读就运用了它,导致软件编写的过错,尽管不会引起大问题,但确实是不应该产生的问题。
VLDx设置电压值,0为封闭SVS,1-15均为启用,其间15为监控外部从SVSIN输入的信号,1-14从小到大依次为从低至高监控内部VCC电压的。而在413器材上,因为只需1.9V一档,只需对错0值作用都是相同的,当然,假如要兼容41x全系列的软件,仍是应该运用对应的电压值选项,也便是1。
SVSON是最简单误用的一个位。在网上许多例程在设置SVSCTL时会相似下面代码这样写:
#define VLD_3V7 0xe0
void low_bat_test(void)
{
SVSCTL = SVSON + VLD_3V7;
_NOP();
_NOP();
_NOP();
if(SVSCTL & SVSOP)
//低压指示
else
//关掉低压指示
SVSCTL = 0;
}
其实是一个误读形成的。英文手册中特别用大写字母注出来,SVSON位不是用来翻开SVS的,这个位会在VLDx>0的时分主动被翻开,所以从上例中看的话很明显,写代码的作者以为那是翻开SVS用的开关。
正确的写法便是SVSCTL = VLD_3V7; 就行了,之后咱们再检查SVSCTL的值就变成了0xe4。
另一个没有细读就出的当地便是关于延时,尽管手册中说SVSON是在VLDx>0时主动设置的,但假如那一章全部都细看过的话会知道别的两件事:
1、当发动(从封闭变成开)或改动监控电压的时分,SVS模块并不能立刻开端作业,有必要要等一段时间,且发动和更改电压的等候时间也是不同的,别离约为50us和12us以内。
2、SVSON位并不是在设置VLDx为非0值后当即动作的,它能够作为SVS体系安稳的指示器运用,在SVS模块预备好之前,SVSON位仍是0,当SVSON为1时则阐明模块预备结束,能够作业了。
所以咱们能够把上述程序改成这姿态:
#define VLD_3V7 0xe0
void low_bat_test(void)
{
SVSCTL = VLD_3V7; //这句直接设置电压值,且不要修正SVSON位
while((SVSCTL & SVSON) != SVSON); //这句便是无限等候SVSON直到它为1才持续
if(SVSCTL & SVSOP)
//低压指示
else
//关掉低压指示
SVSCTL = 0;
}
留意到代码与前边的不同来了吧?自己也是抛砖引玉,期望我们有什么不同的观点也提出来,一同评论,假如我讲的有过错,也请提出来,一同学习,一同前进。