文档库 最新最全的文档下载
当前位置:文档库 › 基于MSP430F169的最小系统设计

基于MSP430F169的最小系统设计

基于MSP430F169的最小系统设计
基于MSP430F169的最小系统设计

基于MSP430F169的最小系统设计欧家伟20104888

摘要:单片机最小系统,或称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对于MSP430系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。本文介绍了MSP430F169单片机的特点,设计了MSP430最小系统中电源模块、复位电路模块、晶振电路模块、JTAG接口模块的电路原理图,并说明了MCU部分原理,如:开机上电、启动、复位、初始化;程序运行、工作模式、中断服务、堆栈、弹出、中断向量表、中断优先级、晶体时钟、程序下载、存储、擦除、端口操作、看门狗管理。另外还扩展了一个数码管显示模块和4X4键盘模块。

关键字:MSP430;最小系统;电路设计

一、最小系统的设计

单片机应用系统的硬件电路设计包含两部分内容:

一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。

二是系统的配置,即按照系统功能要求配置外围设备,如电源、A/D、D/A转换器等,要设计合适的接口电路。本文将介绍基于MSP430F169的最小系统设计过程。

MSP430F169是FLASH存储器型单片机,具有良好的仿真开发技术,设置有JTAG仿真接口和高级语言编译器.在系统支持软件下,在线实现对目标系统的硬件调试及软件开发,包括汇编、C语言、连接及动态调试,具有单步、多断点和

跟踪,并且开放全部存储器、寄存器,可以方便可靠地对系统进行硬件、软件开发。

单元电路设计

最小系统主要由主控MCU,电源、复位电路、时钟电路、JTAG调试电路,串行通讯等模块组成,与此同时还要设计MCU时钟电路,电源电路和JTAG调试电路。

MSP430最小系统硬件组成如图1所示。时钟模块为MCU提供时钟源, JTAG 接口用于单片机程序调试和仿真;串口0 (USART0)通过MAX232模块进行电平转换连接到PC用于调试嵌入式软件;电源模块为MCU和各外围模块提供电源。下面我们将对各模块电路进行设计。

图1 MSP430最小系统组成框图

(一)电源模块

在该系统中需要使用5V和3.3V的直流稳压电源,其中MSP430F169及部分外围器件需要3.3V电源,另外部分需要5V电源。在本系统中,以5V直流电压为输入电压,通过LM1117-3.3将5V直流电压转换成3.3V电压。电源经过开关后经过一个二极管DN4148进行电源定向,再通过LM1117-3.3进行DC-DC电压转换。在电源模块中通过3个电容进行电源稳压滤波,为系统提供稳定的电源。

电源模块中通过一个LED灯指示电源状态,当电源模块有通电时,LEDV1点亮,反之, LEDV1熄灭。电源模块原理图如图2所示。

图2 电源模块原理图

(二)晶振电路设计

MSP430系列单片机时钟模块有高速晶体振荡器、低速晶体振荡器和数字控制振荡器DCO等3个时钟源。这是为了解决系统的快速处理数据要求和低功耗要求的矛盾,通过设计多个时钟源或为时钟设计各种不同工作模式,才能解决某些外围部件实时应用的时钟要求,如低频通信、LCD显示、定时器、计数器等。数字控制振荡器DCO已经集成在MSP430内部,在系统中只需设计高速晶体振荡器和低速晶体振荡器两部分电路。低速晶体振荡器(LFXT1)满足了低功耗及使用321k768Hz晶振的要求。LFXT1振荡器默认工作在低频模式,即321768kHz,也可以通过外接450kHz~8MHz的高速晶体振荡器或陶瓷谐振器工作在高频模式,在本电路中我们使用低频模式,晶振外接2个22pF的电容经过XIN和XOUT连接到MCU。

高速晶振也称为第二振荡器XT2,它为MSP430F169工作在高频模式时提供时钟, XT2最高可达8MHz。在系统中XT2采用4MHz的晶体, XT2外接2个22pF的电容经过XT2IN和XT2OUT连接到MCU,原理如图3所示。

图3 晶振电路设计原理图

(三)复位电路模块

微控制器正常工作时该引脚将处于高电平才能正常工作。在系统中,复位电路主要完成系统的上电复位和系统在运行时用户的按键复位,复位电路可由简单的RC电路构成,也可使用其他的相对较复杂,但功能更完善的电路。在这里采用简单的由电阻、电容、二极管构成的RC复位电路。经使用证明,其复位逻辑是可靠的。复位电路原理如图4所示。

图4 复位电路原理图

该复位电路的工作原理如下:在系统上电时,通过电阻R4向电容C7充电,当C7两端的电压未达到高电平的门限电压时, RST端输出为低电平,系统处于复位

状态;当C7两端的电压达到高电平的门限电压时, RST端输出为高电平,系统进入正常工作状态。

当用户按下按钮S1时, C7两端的电荷被泻放掉, RST端输出为低电平,系统进入复位状态,再重复以上的充电过程,系统进入正常工作状态。

(四) JTAG接口设计

1、JTAG调试器概述

JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP (Test Access Port测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在, JTAG接口还常用于实现ISP (In-System Programmable在线编程),对FLASH等器件进行编程。具有JTAG接口的芯片,相关JTAG引脚的定义为:TCK为测试时钟输入; TDI为测试数据输入,数据通过TDI引脚输入JTAG接口; TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出; TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效。MSP430F169是具有60KB可电擦写的FLASH存储器型MCU,并具有JTAG调试接口,因此采用先通过JTAG调试器将编辑好的程序从PC机直接下载到FLASH内,再JTAG接口控制程序运行、读取片内CPU状态,以及存储器内容等信息供设计者调试,整个开发(编译、调试)都可以在同一个软件集成环境中进行,不需要专门的仿真器和编程器。

2、JTAG调试接口设计

图5 JATG接口工作原理图

在图中显示JTAG是有14条线的接口,我们用了其中的5条,其余引脚未用,跳线P2用来选择JTAG用来选择JTAG调试器使用外接电源还是内部电源,当外围电路功率比较大时,应使用外接电源;如外围电路功率比较小时,使用JTAG 提供的内部电源即可。

(五)扩展一个数码管显示电路

数码管动态显示原理

几乎所有的单片机应用系统都要用到数码显示。数码显示是一个占用IO资源较多、程序设计较复杂的模块。在设计时,应从IO占用与软件复杂程度两方面考虑。这里以8位数码管动态显示电路以例说明工作原理。电路如图6所示。

图6 8位数码管显示电路

数码管显示器的8个笔划段a-hp同名端连在一起,而每一位数码管显示器的公共端(1,2,3,4)各自独立地受三极管控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于数码管的公共端,而这一端是由74LS164控制的,所以我们只要控制164的输出数据就可以决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的公共端,使各个显示器轮流点亮。

在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。图中100欧电阻起限流作用,保护发光二极管。电阻值越小,发光二极管越亮。2K电阻是位选端限流电阻,保护位选三极管。

由上图可知,这里的数码管是共阳极型。数码管上显示一些符号,必须给数

码管的笔形口接低电平信号,给要显示的位公共端送高电平,相应位的数码管就可以显示所要的符号。

(六)4X4键盘模块

键盘控制电路通过STR71X的8个I/O端口控制,P2.0—P2.3作为行列式键盘的行,P2.4—P2.7作为行列式键盘的列。行列式键盘的列配置成输出模式,行配置成输入模式。行线上的电容起滤波抗干扰的作用,其上拉电阻使输入管脚不处于悬空状态,防止输入电平处于不确定的状态。,列线上的下拉电阻可选,本开发板按键扫描的硬件电路如图7所示。

图7 4X4键盘模块

二、MCU工作原理

1、开机启动与初始化

MSP430单片机开机上电后,将产生一个上电复位信号POR和上电清除信号PUC,按照这两个信号对所有的内部器件进行初始化状态的设置。

器件的初始化状态:

(1).RST/NMI引脚配置为复位模式;

(2).I/O引脚为输入模式;

(3).状态寄存器复位

(4).程序计数器(PC)装入复位向量地址0FFFEH,CPU从此地址开始执行。

2、系统复位

系统复位就是单片机进入到最开始的状态。系统复位会产生两个信号,上电复位信号和上电清除信号。

产生上电复位信号的情况:

(1).器件上电时;

(2).RST/NMI引脚配置为复位模式,引脚产生低电平时;

(3).手工复位产生POR。

产生上电清除信号的情况:

(1).上电复位信号产生PUC;

(2).看门狗运行出错PUC;

(3).flash操作错误产生PUC;

(4).看门狗计满时产生PUC。

3、单片机系统的工作模式

工作模式控制位CPU状态、振荡器及时钟

SCG1=0 CPU活动

SCG0=0 MCLK活动AM CPUOFF=0 SMCLK活动

OSCOFF=0 ACLK活动

SCG1=0 CPU禁止LPM0 SCG0=0 MCLK禁止

OSCOFF=0 SMCLK活动

CPUOFF=1 ACLK活动

SCG1=0 CPU禁止、MCLK禁止LPM1 SCG0=1 如果DCOCLK位用作MCLK或

SMCLK,则直流发生器禁止,否则仍然活动

OSCOFF=0 SMCLK活动

CPUOFF=1 ACLK活动

SCG1=1 CPU禁止如果DC被用作MCLK

或SMCLK

SCG0=0 MCLK禁止LPM2 OSCOFF=0 SMCLK禁止

CPUOFF=1 ACLK活动

SCG1=1 CPU禁止DCO被禁止,直流发

生器被禁止

SCG0=1 MCLK禁止LPM3 OSCOFF=0 SMCLK禁止

CPUOFF=1 ACLK活动

SCG1=1 CPU禁止

SCG0=1 DCO被禁止,直流发生器被禁止

LPM4 OSCOFF=1 所有振荡器停止工作MCLK、

SMCLK禁止

CPUOFF=1 ACLK禁止

4、单片机的堆栈和弹出

(1)单片机堆栈:在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM 区叫堆栈。

(2)单片机堆栈的作用:1)子程序调用和中断服务时CPU自动将当前PC值压栈保存,返回时自动将PC值弹栈。2)保护现场/恢复现场3)数据传输

(3)单片机堆栈原理:堆栈区由特殊功能寄存器堆栈指针SP管理,堆栈区可以安排在RAM任意位置,一般不安排在工作寄存器区和可按位寻址的RAM 区,通常放在RAM区的靠后的位置。

5、单片机的时钟

MSP430的时钟模块由低速晶体振荡器LFXT1、高速晶体振荡器XT2(MS P430X11X,MSP430X12X没有)、数字控制振荡器DCO、琐相环FLL(MSP4 30X16X以上包括)和增强型琐相环FLL+等部件组成。

MSP430X1XX基本时钟模块有三个时钟输入源LFXT1CLK(低速32768Hz,高速450Hz到8MHz)、XT2CLK(450Hz到8MHz)、DCOCLK,提供以下三种时钟信号

1.ACLK辅助时钟:由LFXT1CLK信号经1、2、4、8分频后得到,可以由软件选作各个外围模块的时钟信号,一般用于低速外设。

2.MCLK系统主时钟:MCLK可由软件选择来自LFXT1CLK、XT2CLK、D COCLK三者之一,然后经1、2、4、8分频得到,MCLK主要用于CPU和系统。

3.SMCLK子系统时钟:可由软件选自LFXT1CLK和DCOCLK(MSP430X 11X、MSP430X12X系列,因其不含XT2),或XT2CLK和DCOCLK,然后经1、2、4、8分频得到。SMCLK主要用于高速外围模块。

系统频率与系统的工作电压密切相关(MSP430工作电压1.8V~3.6V,编程电压2.7V~3.6V),所以不同的工作电压,需要选择不同的系统时钟。当两个外部振荡器失效时,DCO振荡器会自动被选作MCLK的时钟源。PUC信号之后,D COCLK被自动选作MCLK和SMCLK的时钟信号,LFXT1CLK被选作ACLK 的时钟信号,根据需要MCLK和SMCLK的时钟源可以另外设置。

控制时钟模块的三个寄存器为DCO控制寄存器DCOCTL、基本时钟系统控制寄存器1BCSCTL1、基本时钟控制寄存器2BCSCTL2 。

6、中断服务

系统的中断分为三种:系统复位中断,不可屏蔽中断和可屏蔽中断。

(1)系统复位中断

系统复位后地址在0FFFEH。

(2)不可屏蔽中断,产生不可屏蔽中断三种情况,上升沿电平出现在NMI引N M引脚配置为NMI模式;振荡器发生错误;Flash的误操作。

(3)可屏蔽中断来源于具有中断能力的外围模块,包括看门狗定时器工作在定时模块式时溢出产生的中断。每一个中断都可以由各自的中断控制寄存器中的控制位进行屏蔽,也可以由全局中断控制位屏蔽。

中断响应过程:

a.如果CPU处于活动状态,则完成当前指令;

b.若CPU处于低功耗状态,则推出低功耗状态;

c.将下一条指令的PC值压入堆栈;

d.将状态寄存器SR压入堆栈;

e.若有多个中断请求,则响应最高优先级的中断;

f.单中断源的中断请求标志位自动复位,多中断源的的标志位不变,等待软件复位;

g.总中断允许位SR.GIE复位,SR状态寄存器中的CPUOFF,OSCOFF,SC G1,V,N,Z,C位复位;

h.相应的中断向量值装入PC寄存器,程序从此地址开始执行。

中断返回的过程如下:

i.从堆栈中恢复PC值,若响应中断前CPU处于低功耗模式,则可屏蔽中断仍然恢复低功耗模式;

g.从对战中恢复PC值,若响应中断前CPU不处于低功耗模式,则从此地址继续执行程序。

7、中断向量表及优先级

中断事件在提出中断请求的同时,通过硬件向主机提供向量。目前,大多数单片微型机的向量地址是中断向量表的指针。即向量地址指向一个中断向量表,从中断向量表的相应单元中再取出中断服务程序的入口地址,所以中断向量地址是中断服务程序入口地址的地址。

中断向量用于程序计数器PC增加偏移量,以使中断处理软件在相应的程序位置继续运行,这样能够简化中断处理程序。

多源中断,多个中断事件对应同一个中断向量,如P1 中断和P2 中断,

其中任何一个中断事件出现,对应的中断标志都被置位,中断相应时要用软件判断是哪一个中断源。中断标志不能自动清零,需要用软件清除。

8、看门狗定时器

看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。程序中设置看门狗清零指令WDTCTL=WDTPW+W DTCNTCL,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。

(1)WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零

1.记数单元WDTCNT:WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。

2.控制寄存器WDTCTL:WDTCTL由两部分组成,高8位用作口令,即5AH(头文件中定义为WDTPW),低8位是对WDT操作的控制命令。写入WDT控制令时先写入口令WDTPW,口令写错将导致系统复位。读WDTCTL时不需口令,低字节WDTCTL的值,高字节读出始终为69H。

WDTPW bits15~8 看门狗密码位,通常读到0X69H,写时必须为0X5AH,

否则将系统复位。

WDTHOLD bit7 看门狗定时器使能位

0 看门狗定时器使能

1 看门狗定时器停止

WDTNMIES bit6 看门狗定时器NMI边沿选择

0 NMI上升沿有效

1 NMI下降沿有效

WDTNMI bit5 看门狗定时NMI选择位

0 复位功能

1 NMI功能

WDTTMSEL bit4 看门狗定时器工作方式选择

0 看门狗模式

1 内部定时模式

WDTCNTCL bit3 看门狗定时器清零

0 不操作

1 WDTCNT清零

WDTSSEL bit2 始终选择

0 SMCLK

1 ACLK

WDTISX bits1~0 看门狗内部中断时间间隔选择

00 看门狗时钟/32768

01 看门狗时钟/8192

10 看门狗时钟/512

11 看门狗时钟/64

(2)WDT

用户通过设置WDTCTL中的TMSEL和HOLD控制位使WDT工作在看门狗模式、定时器模式和低功耗模式三种模式。

a.看门狗模式(TMSEL=0 ,HOLD=0) 如果记数时间到,就会产生复位和激活系统上电清除信号,系统从上电复位的地址重启动中断向量为RESET_ VECTOR

b.定时器模式(TMSEL=1,HOLD=0) 这一模式产生选定时间的周期性中断

中断标志位为WDTIFG 中断向量为WDT_VECTOR

c.低功耗模式(TMSEL=X,HOLD=1) WDTCTL=WDTPW+WDTHOLD;

9、Flash操作

(1)擦除

Flash存储器各位的缺省值为1,每一位都可以单独编程为0,但只有擦除操作才能将其恢复为1。擦除操作的最小单位是段。通过erase和meras位设置可选择3种擦除模式。

擦除操作开始于对擦除的地址范围内的任意位置执行一次空写入。空写入的目的是启动时序发生器和擦除操作。在空写入操作之后,BUSY 位自动置位,

并保持到擦除周期结束。BUSY 、MERAS 、ERASE 在擦除周期结束后自动复位。 (2) 写入

写入模式由WRT 和BLKWRT 位进行设置。 所有的写入模式使用一系列特有的写入命令,采用块写入的速度大约是单个写入的2倍,因为电压发生器在块写入完成器件均能保持。对于这两种写入模式,任何能修改目的操作数的指令均能用于修改地址。一个Flash 字不能再擦除器件进行两次以上的写入。当启动写入操作时,BUSY 置位,写入结束时复位。 操作编程 (3)Flash 擦除

对Flash要写入数据,必须先擦除相应的段,且对Flash存储器的擦除必须是整段进行的,可以一段一段擦,也可以多段一起擦除。擦除操作的顺序如下:1)选择适当的时钟源和分频因子;

2)清除LOCK位

3)判断BUSY位,只有当BUSY=0时才可以执行下一步

4)使能段操作,设置ERASE、MERAS位等(如果是擦除一段,则ERASE=1,如果擦除多段,则MERAS=1,如果擦除整个Flash,则ERASE=1,

MERAS=1)

5)对擦除的地址范围内的任意位置作一次空写入,以启动擦除操作

6)在擦除周期内,时钟源始终有效,不修改分频因子

7)操作完成后,置位LOCK

根据上述操作顺序,编写程序代码如下:

void FlashErase(unsigned int adr)

{

uchar *p0;

FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//选择时钟源,分频

FCTL3 = FWKEY;//清除LOCK

while(FCTL3 & BUSY);//如果出于忙,则等待

FCTL1 = FWKEY + ERASE;//使能段操作

p0 = (unsigned char *)adr;//数值强制转换成指针

*p0 = 0; //向段内任意地址写0,即空写入,启动擦除操作

FCTL1 = FWKEY;

相关文档