MSP430简介(超详细·)
- 格式:doc
- 大小:658.15 KB
- 文档页数:15
第一章MSP430单片机简介本章主要内容:一、MSP430单片机是什么以及它的特点;二、MSP430单片机的结构;本章重点内容:MSP430单片机的结构§1.1MSP430系列单片机MSP430系列单片机是美国TI公司1996年推出的一种16位超低功耗单片机,由MSP430单片机CPU和针对不同应用而配置的外设模块构成。
MSP430F149单片机主要特点:超低功耗RAM保持模式耗电:0.1uA实时时钟模式耗电:0.8uA全速模式耗电:250uA/MIPS五种省电模式:LPM0:CPU、MCLK禁止LPM1:CPU、MCLK禁止,若DCO未用则DC发生器禁止LPM2:CPU、MCLK、SMCLK禁止,若DCO未用则自动关闭LPM3:CPU、MCLK、SMCLK、DCO禁止,DC发生器禁止LPM4:CPU、MCLK、SMCLK、ACLK、DCO禁止,DC发生器禁止从待机模式唤醒时间:6us16位RISC,125ns指令周期12位ADC,带内部参考源、采样保持双12位DAC16位定时器Timer_A,带3个捕获/比较寄存器16位定时器Timer_B,带7个捕获/比较寄存器片内比较器A串行在线编程,无需外部编程电压,可编程的保密熔丝代码保护2个异步串行通信接口(USART0,USART1)§1.2MSP430F149单片机结构一、MSP430x14x单片机结构框图如图1-1所示,构成模块有:1、系统时钟振荡器:产生3个时钟信号ACLK、SMCLK、MCLK;2、60KB Flash代码存储器;3、2KB RAM数据存储器;4、8通道12位ADC,转换时间小于10us;5、具有中断功能的P1、P2口;6、普通I/O口P3~P6;7、16位定时器Timer_A,带3个捕获/比较寄存器8、16位定时器Timer_B,带7个捕获/比较寄存器9、片内比较器A、16位看门狗定时器、硬件乘法器10、2个异步串行通信接口(USART0,USART1)11、JTAG调试仿真模块12、16位的CPU二、MSP430x14x单片机封装引脚图如图1-2所示,MSP430x14x单片机芯片总共有64个引脚。
MSP430系列单片机简介1、MSP430 单片机的发展MSP430 系列是一个16 位的、具有精简指令集的、超低功耗的混合型单片机,在1996 年问世,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为众多单片机系列中一颗耀眼的新星。
回忆MSP430 系列单片机的发展过程,可以看出有这样三个阶段:开始阶段从1996 年推出MSP430 系列开始到2000 年初,这个阶段首先推出有33X 、32X 、31X 等几个系列,而后于2000 年初又推出了11X 、11X1 系列。
MSP430 的33X 、32X 、31X 等系列具有LCD 驱动模块,对提高系统的集成度较有利。
每一系列有ROM 型(C )、OTP 型(P )、和EPROM 型( E )等芯片。
EPROM 型的价格昂贵,运行环境温度范围窄,主要用于样机开发。
这也表明了这几个系列的开发模式,即:用户可以用EPROM 型开发样机;用OTP 型进行小批量生产;而ROM 型适应大批量生产的产品。
2000 年推出了11X/11X1 系列。
这个系列采用20 脚封装,内存容量、片上功能和I/O 引脚数比较少,但是价格比较低廉。
这个时期的MSP430 已经显露出了它的特低功耗等的一系列技术特点,但也有不尽如人意之处。
它的许多重要特性,如:片内串行通信接口、硬件乘法器、足够的I/O 引脚等,只有33X 系列才具备。
33X 系列价格较高,比较适合于较为复杂的应用系统。
当用户设计需要更多考虑成本时,33X 并不一定是最适合的。
而片内高精度A/D 转换器又只有32X 系列才有。
寻找突破,引入Flash 技术随着Flash 技术的迅速发展,TI 公司也将这一技术引入MSP430 系列中。
在2000 年7 月推出F13X/F14X 系列,在2001 年7 月到2002 年又相继推出F41X 、F43X 、F44X 这些全部是Flash 型单片机。
F41X 单片机是目前应用比较广的单片机,它有48 个I/O 口,96 段LCD 驱动。
msp430简介MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化, MSP430系列将会得到越来越多人的喜爱.一、IO口(一)、P口端口寄存器:1、PxDIR 输入/输出方向寄存器(0:输入模式 1:输出模式)2、PxIN 输入寄存器输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。
3、PxOUT 输出寄存器寄存器内的内容不会受引脚方向改变的影响。
4、PxIFG 中断标志寄存器(0:没有中断请求 1:有中断请求)该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位;外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受;5、PxIES 中断触发沿选择寄存器(0:上升沿中断 1:下降沿中断)6、PxSEL 功能选择寄存器(0:选择引脚为I/O端口 1:选择引脚为外围模块功能)7、PxREN 上拉/下拉电阻使能寄存器(0:禁止 1:使能)(二)、常用特殊P口:1、P1和P2口可作为外部中断口。
2、P6可作为A/D输入口。
3、P1.2和P2.0可作为PWM波输出口。
4、P1.1:MCLK P1.5:ACLK5、串口通信时:P2.4、 P4.0为发送TXD,P2.5 、P4.1为接收RXD。
(三)、基本操作:1、所有P口都可作为通用IO口使用2、所有P口都可进行字节操作和位操作按字节操作:例: P1DIR=0xff; //将P1口作为输出口PIOUT=0x20; // P1口输出0x20P1DIR=0x00; //将P1口作为输入口data=P1IN //读取P1口外部输入值按位操作:例: P1DIR=BIT0; //将P1.0作为输出口P1OUT|=BIT0; //P1.0输出1P1OUT&=~BIT0; //P1.0输出0P1DIR&=~BIT0 //将P1.0口作为输入data=P1IN&BIT0 //读取P1.0口外部输入值二、时钟(一)、三个时钟源:1、LFXT1CLK:低频时钟(32768HZ)2、XT2CLK:高频时钟(8MHZ)3、DCOCLK:片内数控振荡器最高46MHZ,但不稳定(不能作为定时用)(二)、时钟模块结构图:(三)、时钟模块可提供的四种时钟信号:1、ACLK:辅助时钟,来自LFXT1CLK低频时钟,可有软件选作各外围模块的时钟信号,一般用于低速外设。
2、ACLK/n:ACLK经过1、2、4、8分频后由P1.5输出,仅供外部电路使用。
3、MCLK:系统主时钟,可有软件选择来自LFXT1CLK、XT2CLK或DCOCLK的时钟,然后经1、2、4、8分频得到。
可由P1.1输出(主要用于cpu)4、SMCLK:子系统时钟,可有软件选择来自XT2CLK或DCOCLK的时钟。
(主要用于高速外设)(四)、MCLK应用举例:1、在默认情况下,MCLK来自于DCOCLK其频率为1.048576MHZ其计算方法:MCLK=(31+1)*327682、如何选择ACLK作为MCLK:void clk_initial(){do{IFG1&=~OFIFG; //清除振荡器的失效标志__ delay_cycles(200);}while((IFG1&OFIFG)!=0); //如果振荡器的失效标志存在FLL_CTL1=SELM1+SELM0; //选择ACLK作为MCLK}3、如何选择 XT2CLK作为MCLK:void clk_initial(){do{IFG1&=~OFIFG; //清除振荡器的失效标志__delay_cycles(200);}while((IFG1&OFIFG)!=0); //如果振荡器的失效标志存在FLL_CTL1=SELM1; //选择XT2CLK作为MCLK}4、如何选择 DCOCLK作为MCLK:计算(121+1) *2*32768=7.995MHZvoid CLK_initial(){SCFI0|=FN_4; //选择DCO频率调整范围为2.8~26.6MHZSCFQCTL=249; //倍频倍数,最高位为DCO+调制器的控制位FLL_CTL0=DCOPLUS+OSCCAP_1; //选择DCO作为MCLK前分频}三、中断(一)、中断源:1、外部中断:P1、P22、定时器中断。
3、看门狗定时器中断。
4、串口中断。
5、A/D 转换中断。
6、比较器中断。
(二)、中断的一般设置:1、打开、关闭局部中断:打开局部中断一般是给想关的特殊功能寄存器相关位置1以P1口外部中断为例:打开局部中断:P1IE|=BIT0;//打开P1.0外部中断关闭局部中断一般是给想关的特殊功能寄存器相关位置0同样以P1口外部中断为例:关闭局部中断:P1IE&=~BIT0;//关闭P1.0外部中断2、打开、关闭全局中断:_EINT();//打开总中断,相当于51的EA=1;_DINT();//关闭总中断,相当于51的EA=0;3、各中断向量Interrupt Vectors:#define BASICTIMER_VECTOR (0 * 2u) /* 0xFFE0 Basic Timer */#define PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */#define USART1TX_VECTOR (2 * 2u) /* 0xFFE4 USART 1 Transmit */#define USART1RX_VECTOR (3 * 2u) /* 0xFFE6 USART 1 Receive */#define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */#define TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */#define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */#define ADC12_VECTOR (7 * 2u) /* 0xFFEE ADC */#define USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */#define USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */#define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */#define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */#define TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-6, TB */#define TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */#define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */#define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */4、中断优先级:优先级顺序从高到低为:PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */ADC_VECTOR (7 * 2u) /* 0xFFEE ADC */USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-2, TB */TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maska××e */RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */5、中断的嵌套:当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)实现中断嵌套需要注意以下几点:1)430默认的是关闭中断嵌套的,一定要中断嵌套的话,就必须在中断服务程序中打开总中断msp430的指令中,_DINT()和_EINT()分别指关和开总中断。
2)当进入中断服务程序时,只要不在中断服务程序中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行;3)若在中断服务程序A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。