原创 MSP430F5438单片机初学者笔记

2013-6-10 15:20 2562 13 16 分类: MCU/ 嵌入式

 

一、简介
1.1CPU:
16-bit RISC
除program-flow指令外所有指令都在寄存器和7种源操作数寻址方式及4种目的操作数合作下执行
16个寄存器,register-to-register指令执行时间是一个CPU时钟
R0  程序计数器寄存器20-bit
R1  堆栈指针20-bit
R2  状态寄存器16-bit
R3  不变的产生器
R4~R15 通用寄存器
1.2指令集:
51指令  3格式  7中寻址方式   附加指令
1.3操作模式
6个可软件设置的LOW-POWER模式   一个中断事件可以唤醒5个模式中的任何一个,响应请求,并从中断程序中返回原模式
   Mode                       ACTIVE                         DISABLED
Active mode (AM)              所有时钟ACTIVE
Low-power mode 0 (LPM0)     ACLK SMCLK FLL                  CPU  MCLK  
LPM1                        ACLK SMCLK                      CPU FLL MCLK
LPM2                        DCO发生器   ACLK         CPU MCLK FLL DCOCLK
LPM3                      ACLK               CPU MCLK FLL DCOCLK DC发生器
LPM4                        晶振关闭 完整数据保留
LPM5                        内部调节器关闭 无数据保留   通过RST和IO唤醒
1.4中断矢量
地址:FFFF~FF80H
1.5  SFR
处于最低地址空间  可以进行字访问和字节访问
1.6存储
256K闪存空间   64K程序存储器  16KRAM   512BBSL程序装载器用于编程存储器串连接口
1.7外围
时钟:支持统一的时钟系统UCS包括:
32K手表晶振(XT1 低频模式)
内部低频振荡器VLO
内部平衡低频振荡器REFO
内部集成数字控制器DCO
高频晶振(XT1高频模式  or XT2)
FLL锁频环连同一个数字调节器使得DCO构成一个多倍可编程的手表晶振
     时钟信号:ACLK   32K手表晶振、高频晶振、VLO、REFO、DCO
               MCLK    CPU用,来源同ACLK
               SMCLK   用于外围来源同ACLK
               多分频ACLK
电源管理模块(PMM)
包括一个集成的PMM电压调节器,提供核心电压设备和包含可编程的产出水平,来提供电力的优化。
还包括SVS和SVM电路即降压保护,可用来产生内部复位信号
实时时钟RTC:用来作为32位的多用计数器或实时时钟,计数模式下,RTC有两个独立的8位计数器可被级联成16位的计数器
ADC12_A:
支持一个快速的12位的AD转换器
12位的SAR核心、简单选择控制、参考发生器、16字的BUFF可在CPU不参与的情况下允许16个独立的ADC采样
N=选择的时钟频率/波特率=UBR1x(整数部分的高位)+UBR0x(整数部分的低位)+小数部分(小数部分=调整因子个数/8)
例如:串口配置选用时钟为32768KHz,波特率为9600,则N=32768/9600=3.41。所以,UBR1x=0,UBR0x=3,调整因子个数/8=0.41 =>调整因子个数=3 =>UMCTLx=01010010(原则是调整因子"1"分布要均匀)。
1.8系统复位及初始化
掉电复位(BOR)》上电复位(POR)》PUC
Rst/nmi配置成复位状态,I/O口恢复到输入状态、状态寄存器复位、看门狗到看门狗状态
1.9中断源:系统复位
可屏蔽中断、
不可屏蔽(系统不可屏蔽中断和用户不可屏蔽中断)
二.USC
5个时钟源:
XT1CLK:有低频(LF)和高频(HF)模式,低频32768HZ的手表晶振、标准晶振、谐振器或者外部的4M~32MHZ的晶振
VLOCLK:内部10KHZ低功率、低频振荡器
REFOCLK:内部32768HZ平衡的、低频参考振荡器、作为FLL的参考晶振
DCOCLK:内部数字控制振荡器,可被FLL稳定
XT2CLK:可选的高频振荡源,可选用标准晶振、谐振器或来自外部的4M~40MHZ的晶振
3个时钟信号
ACLK:辅助时钟,可软件设置为XT1CLK, REFOCLK, VLOCLK, DCOCLK,DCOCLKDIVXT2CLK,DCOCLKDIV is the DCOCLK frequency divided by 1, 2, 4,8, 16, or 32 within the FLL block.用于外围模块
MCLK:主时钟,可软件设置为XT1CLK, REFOCLK, VLOCLK, DCOCLK,DCOCLKDIVXT2CLK, DCOCLKDIV is the DCOCLK frequency divided by 1, 2, 4,8, 16, or 32 within the FLL block.用于CPU和系统
SMCLK:子时钟,可软件设置为XT1CLK, REFOCLK, VLOCLK, DCOCLK,DCOCLKDIVXT2CLK, DCOCLKDIV is the DCOCLK frequency divided by 1, 2, 4,8, 16, or 32 within the FLL block.用于外围独立的模块。
USC系统默认配置:
XT1在低频模式下作为振荡源给XT1CLK、XT1CLK提供给ACLK
DCOCLKDIV提供给MCLK和SMCLK
FLL使能,XT1CLK作为FLL参考时钟FLLREFCLK
XIN和XOUT设为普通I/O口功能、XT1处于关闭状态直到XT1操作配置该I/O口
XT2IN和XT2OUT同样被配成普通I/O口,XT2关闭
REFO:
32768HZ提供一个稳定的参考晶振为FLLREFCLK,它联合FLL在不需要晶体的情况下可提供范围灵活的系统时钟设置,REFO不工作时不耗电!if the REFO oscillator is not used to source MCLK, SMCLK. or FLLREFCLK. The OSCOFF bit disables REFO for LPM4.
XT1:
LF模式下支持一个极低功耗的32768MHZ的手表晶振,内部XCAP为其提供下载电容,也可通过外加电容
HF模式下需要加外部电容,通过XT1DRIVE设置驱动器力度,以便减少功耗;XT1BYPASS设置可与外部晶振信号一起使用,此时处于休眠状态;
XT2:相同于XT1的HF模式
DCO:一般配合FLL一起使用
XT2CLK (if available) The value of n is defined by the FLLREFDIVx (n = 1, 2, 4, 8, 12, or 16). default is n = 1.
fDCOCLK = D×(N + 1) ×(fFLLREFCLK /n)
fDCOCLKDIV = (N + 1) × (fFLLREFCLK /n)
FLL:
连续不断的把一个频率计分器相加或相减
寄存器:
UCSCTL0,
UCSCTL1,对DCO的设置寄存器
UCSCTL2,FLL分频、倍乘N
UCSCTL3,对FLL参考晶振的选择、分频FLLREFCLK
UCSCTL4,设置ACLK、MCLK、SMCLK时钟来源,
UCSCTL5,设置外部ACLK、ACLK、MCLK、SMCLK分频
UCSCTL6,对XT1、XT2的允许范围,旁路,开关
UCSCTL7,XT2、XT1、DC0时钟中断错误标志
UCSCTL8,MODOSC、ACLK、SMCLK、MCLK条件响应请求标志
附注:DCO设置:
fDCOCLK = D×(N + 1) ×(fFLLREFCLK /n)
fDCOCLKDIV = (N + 1) × (fFLLREFCLK /n) = fDCOCLK/D
UCSCTL1,DCORSEL 设置DCOCLK的频率范围,在频率范围内可满足其参考时钟源的倍频,若超出范围,则用FLLN无法完成倍频
DISMOD   使能调整
UCSCTL2,FLLD 设置D的值,(1、2、4、8……)
FLLN 设置N的值,在DCOCLK的频率范围内才可以实现对其参考晶振的倍频
UCSCTL3,SELREF,选择参考晶振
           FLLREFDIV对参考晶振进行分频(1/2/4/8……)
三、看门狗
看门狗功能和间隔定时功能
看门狗中断标志位WDTIFG;
看门狗中断使能WDTIE;
WDTCTL  看门狗时钟(00为SMCLK)选择、模式选择、间隔设定
四、通用串口
两类串口模块:USCI_Ax——UART\IrDA\SPI
USCI_Bx——I2C\SPI
4.1(UART模式)
特点:
两根线UCAxTXD、UCAxRXD;独立的收发移位寄存器和缓冲寄存器;波特率自动检测,可编程设置;状态寄存器提供错误监测和抑制、地址监测;独立收发中断
异步传输格式:(UCMODEx)
UCIDLE:在IDLE-LINE模式下,表示该模式开启的标志位;
UCDORM控制数据传输,置位时,所有非地址字节数据被装配但不送入缓存RXBUF中;
UCRXIFG:溢出标志,缓存中有数据进入则置位;
UCRXEIE:置位时所有可用的错误标志位可置位;
UCTXADDR:地址数据进入TXBUF置位,字节完成后自动清位;
UCBRK:检测到break则置位;UCTXBRK
IrDA解码与编码:
对每个低位(0)数据调职为脉冲
UCIRTXPLx  规定脉冲调制时间为若干个半时钟周期;时钟由UCIRXCLK选择;
UCIRTXCLK = 1 : UCIRTXPLx = 6 - 1 = 5.
UCIRTXCLK = 0 : UCIRTXPLx = tPULSE ′ 2 ′ fBRCLK – 1
解码:滤波!UCIRRXEF滤波标志,长脉冲过、低脉冲丢弃
程序编制的滤波长度:UCIRRXFLx = (tPULSE – tWAKE) ′ 2 ′ fBRCLK – 4
自动错误监测:UCRXEIE
帧错误(UCFE)、校验错误(UCPE)、接受溢出错误(UCOE)、Break(UCBRK)
波特率产生:
低频模式(UCOS16 = 0),来自低频时钟源,最大波特率时源晶振BRCLK的1/3;
N is the number of BRCLKs per BITCLK.
过采样模式:(UCOS16 = 1),支持在高电平时钟信号下采样位流;支持IrDA
最大波特率时源晶振BRCLK的1/16;
中断:中断适量寄存器UCAxIV
寄存器:(8位)
UCAxCTL0:校验使能与选择、MSB、数据长度、停止位、工作模式、同步异步选择
UCAxCTL1:时钟信号、错误标志与Break使能、休眠(UCDORM)、复位时能、地址与数据选择
UCAxBR0,UCAxBR1:波波特率设置
UCAxMCTL:调整控制寄存器  UCBRFx   UCBRSx  UCOS16  模式选择
UCAxSTAT:状态寄存器、错误标志位、
UCAxRXBUF\UCAxTXBUF
UCAxIRTCTL:红外发送脉冲长度、发送时钟、调制使能
UCAxIRRCTL:红外接收脉冲长度、发送时钟、调制使能
UCAxABCTL:自动波特率控制寄存器
UCAxIE: 中断使能
UCAxIFG:中断标志
UCAxIV:中断矢量

文章评论3条评论)

登录后参与讨论

用户377235 2013-9-4 13:21

谈了这么多,仍然不知道如何确认我手提电话的电池的电量.

bjstar_970997020 2013-7-27 09:46

很好!

baohua.lv_497455161 2013-7-6 09:38

手机内部的电源管理芯片可以检测电池的电压,根据电压值显示电池格数。 第一、有些手机直接按照电压线性的现实电量格数,误差很大。 第二、精确的测试电压区间与电量的对应关系,然后按照该电压VS电量显示明显比第一种做法有很多改善。 第三、当然最好是用直接手机内部都有库伦电量计实时监测,然后显示电量值,但这种方案成本明显较高,不是所有手机都采用。

用户1010551 2013-7-5 23:03

又是错误的,在不同的放电电流下你上面的%也是不一样的额,你这个只能是根据电压做个估值%。精确的是需要用库仑计电量的,请参考笔记本电池。在没有做输入前别过多误导工程师。

baohua.lv_497455161 2013-6-24 21:12

是的,如本系列博客所描述,手机待机时间就是从手机耗电特性,电池特性,充电管理的系统角度考虑。 只有每一个环节都做好了,才能是整机表现出好的性能,电池也不例外,必须保证良好的一致性。

用户1590967 2013-6-24 13:54

这是一个复杂的工程问题,一致性本身就很差,整体曲线形状相似,但不同单体的一致性相差还是不小的。

baohua.lv_497455161 2013-6-21 17:42

这个问题问得非常专业! 的确现在很多手机都可以显示各种应用在耗电量中所占的比重。 目前为止,我也没有想得太明白,有机会找个这方面开发的工程师交流一下,看能否搞清楚。 初步估计是:手机电源管理芯片可以监测电池端的电流,在启动某应用软件前、后分别获取对应的电流,前后电流的差异认为是该软件的贡献。然后在结合运行时间综合得出所消耗的电量,并最终得出所占的比重。

用户1703049 2013-6-21 08:59

用万用表测

用户377235 2013-6-20 17:45

不是这么简单可以得到电压vs电量曲线。温度,甚至放电速度都有影响。 很多智能手机可以显示充电与放电电流,我想了解这是怎么做到的。甚至Android系统中可以显示单独应用消耗电量,这是估算值还是测量值?

chen_zs2012_704941858 2013-4-27 19:45

共同进步
相关推荐阅读
chen_zs2012_704941858 2014-03-19 17:49
学习LabVIEW要记住的几句话
学习LabVIEW要记住的几句话1. LabVIEW是门程序设计语言,不是画图工具!2. 不要以为LabVIEW很简单,设计个庞大工程难度不亚于C++!3. 语言本身永远只是招式,请注意修炼内功:数据...
chen_zs2012_704941858 2014-01-24 23:46
【博客大赛】易络盟-飞思卡尔MCU大赛_KL25Z
【博客大赛】易络盟-飞思卡尔MCU大赛    Element14、Embest、Freescale三方联合推出的FRDM-KL...
chen_zs2012_704941858 2014-01-24 23:20
《深入理解Altera FPGA 应用设计》赠书已到,感谢EDNChina和coyoo博主
《深入理解Altera FPGA 应用设计》赠书已到,感谢EDNChina和coyoo博主         //深圳 ...
chen_zs2012_704941858 2014-01-20 20:08
【博客大赛】单片机软件抗干扰的几种常见方法
【博客大赛】单片机软件抗干扰的几种常见方法       在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,...
chen_zs2012_704941858 2014-01-19 21:19
【博客大赛】说说单片机、PSOC、FPGA之间的主要区别
【博客大赛】说说单片机、PSOC、FPGA之间的主要区别   现在的单片机一般是mcu+有限的固定的模拟或数字外围;FPGA是可编程数字外围电路;PSoC 相当于MCU+可编程模拟外围电路...
chen_zs2012_704941858 2014-01-19 16:13
你知道你的个人隐私在互联网上有多么的多不堪一击吗?
你知道你的个人隐私在互联网上有多么的多不堪一击吗?     //听着就恐怖,看着就可怕!我已经开始清理我在互联网的个人隐私了,你呢?   最近我废弃了两个加起来用了十几年的QQ...
我要评论
3
13
关闭 站长推荐上一条 /2 下一条