msp430系统时钟详解

嵌入式设计应用

127人已加入

描述

  SP430 系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控振荡器(DCO),锁频环(FLL)及 FLL+等模块构成。由于 430 系列单片机中的型号不同而时钟模块也将有所不同。虽然不同型号的单片机的时基模块有所不同,但这些模块生出来的结果是相同的。在MSP430F13、 14中是有TX2振荡器的, 而MSP430F11X,F11中是用LFXT1CLK来代替XT2CLK时钟信号的。在时钟模块中有3个(对于F13,F14)时信号源(或 2个时钟信号源,对于F11X、F11X1):

  1-LFXT1CLK: 低频/高频时钟源。由外接晶体振荡器,而无需外接两个振荡电容器常使用的晶体振荡器是32768HZ。

  2-XT2CLK: 高频时钟源。由外接晶体振荡器。需要外接两个振荡电容器,较常的晶体振荡器是 8MHZ。

  3-DCOCLK: 数字可控制的 RC 振荡器。

  msp430

  在这三个时钟源的独立工作或是在三个时钟源相互协调配合(是可以通过软件配置的)下为2553系统提供了系统时钟ACLK、MCLK和SMCLK。ALCK、MCLK、SMCLK是和CPU或者外设连接起来的,而LFXT1CLK、XT2CLK、DCOCLK、VLOCLK这四个又是和ALCK、MCLK、SMCLK连接起来的,也就是说LFXT1CLK、XT2CLK、DCOCLK、VLOCLK是通过ALCK、MCLK、SMCLK和外设连接起来的。

  msp430

  上电后,系统默认使用的主系统时钟MCLK和子系统时钟SMCLK是同为DCOCLK产生的1MHz时钟,而辅助时钟ACLK则为内部VLOCLK产生的12KHz时钟。G2553上电后时钟的初始状态我们可以用Grace来查看:

 msp430

  可以看出MCLK和SMCLK都是DCOCLK产生的1MHz的时钟,ACLK则是VLOCLK产生的12KHz的时钟。

  DCO时钟:

  DCO时钟源产生的频率可以通过DCOCTL寄存器来设置寄存器来设定,通过设定DCOCTL中的高三位(其名字为DCOx),BCSCTL1基本时钟控制寄存器低四位(其名字为RSELx)就可以控制DCO振荡器产生100K~20M不等的时钟频率。设定时应尽量居中,以保持稳定

  msp430

  1.DCOCTL,DCOControlRegister

  DCOxDCO频率选择寄存器,通过该位设置DCO的频率。

  MODx模式选择位。

  2.BCSCTL1,BasicClockSystemControlRegister1

  XT2OFFG2553该位无效,详细请参阅官方技术文档。

  XTS LFXT1,模式选择位

  0低频模式。

  1高频模式。

  DIVAx

  分频寄存器,分频后给ACLK提供时钟00/1。01/2。10/4。11/8。

  RSELx DCO频率选择寄存器,通过该位设置DCO频率。

  3.BCSCTL2,BasicClockSystemControlRegister2

  SELMx

  MCLK时钟源选择

  00DCOCLK。

  01DCOCLK,与00效果一样。

  10G系列单片机该位无效。

  11低频外部时钟。

  DIVMx

  时钟源分频寄存器,选择时钟源后经过该位分频后提供给MCLK

  00/1。01/2。10/4。11/8。

  SELS

  SMCLK时钟源选择寄存器

  0DCOCLK。

  1外部晶振。

  DIVSx

  时钟源分频寄存器,选择时钟源后经过该位分频后提供给SMCLK

  00/1。01/2。10/4。11/8。

  DCOR 该位保留。

  4.BCSCTL3,BasicClockSystemControlRegister3

  XT2SxG系列单片机该位无效

  LFXT1Sx

  对G系列单片机,当BCSCTL1寄存器中XTS=0时,该位的设置才有效

  00外部接的是32768HZ的晶振。

  01保留位。

  10选择超低频外部时钟(VLOCLK)

  11数字外部时钟源。

  XCAPx

  振荡器电容选择寄存器,当XTS=0时该位有效,假如XTS=1或者LFXT1Sx=11,

  XCAPx应该设置为00

  00~1pF。01~6pF。10~10pF。11~12.5pF。

  XT2OF 对G系列单片机该位无效

  LFXT1OF

  LGXT1晶体振荡器故障状态寄存器

  0没有故障。

  1有故障。

  5.IE1,InterruptEnableRegister1中断使能寄存器

  OFIE

  晶体振荡器故障使能寄存器

  0禁止中断

  1使能中断

  MSP430G22x0不支持该位。

  6.IFG1,InterruptFlagRegister1

  OFIFG

  晶体振荡器故障标志寄存器

  0没有发生中断。

  1有中断事件发生。

  MSP430G22x0不支持该位。

  MSP430 单片机时钟模块提供 3个时钟信号输出,以供给片内各部电路使用。

  1-ACLK: 辅助时钟信号。由图所示,ACLK 是从 FLXT1CLK 信号由 1/2/4/8 分频器分频后所得到的。由BCSCTL1 寄存器设置DIVA相应为来决定分频因子.ACLK可用于提供CPU外围功能模块作时钟信号使用。

  2-MCLK: 主时钟信号。由图所示,MCLK 是由 3 个时钟源所提供的。他们分别是LFXT1CLK,XT2CLK(F13、F14,如果是 F11,F11X1 则由 LFXT1CLK 代替),DCO 时钟源信号提供.MCLK主要用于MCU和相关系统模块作时钟使用。同样可设置相关寄存器来决定分频因子及相关的设置。

  3-SMCLK: 子系统时钟,SMCLK 是由 2 个时钟源信号所提供。他们分别是XT2CLK(F13、F14)和DCO,如果是F11、F11X1则由LFXT1CLK代替TX2CLK。同样可设置相关寄存器来决定分频因子及相关的设置。

  BCSCTL1 基本时钟系统控制寄存器1

  7 6 5 4 3 2 1 0

  XT2OFF TXS DIVA.1 DIVA.0 XT5V Rsel.2 Resl.1 Resl.0

  XT2OFF 控制XT2振荡器的开启与关闭。

  TX2OFF=0,XT2振荡器开启。

  TX2OFF=1,TX2振荡器关闭(默认为TX2关闭)

  XTS 控制LFXT1 工作模式,选择需结合实际晶体振荡器连接情况。

  XTS=0,LFXT1 工作在低频模式(默认)。

  XTS=1,LFXT1 工作在高频模式(必须连接有高频相应的高频时钟源)。

  DIVA.0 DIVA.1 控制ACLK分频。

  0 不分频(默认)

  1 2分频

  2 4分频

  3 8分频

  XT5V 此位设置为0。

  Resl1.0,Resl1.1,Resl1.2 三位控制某个内部电阻以决定标称频率。

  Resl=0,选择最低的标称频率。

  ……。。

  Resl=7,选择最高的标称频率。

  BSCCTL2 |= DIVM_x (x=0,1,2,3)MCLK分频(x=0,不分频;x=1,2分频;x=2,4分频;x=3,8分频)

  DIVS_0

  BCSCTL2 基本时钟系统控制寄存器2

  7 6 5 4 3 2 1 0

  SELM.1 SELM.0 DIVM.1 DIVM.0 SELS DIVS.1 DIVS.0 DCOR

  SELM.1 SELM.0 选择MCLK时钟源

  0 时钟源为DCOCLK(默认)

  1 时钟源为DCOCLK

  2 时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对于MSP430F13/14/15/16X);

  3 时钟源为LFTXTICLK。

  DIVM.1 DIVM.0 选择MCLK分频

  0 1分频(默认)

  1 2分频

  2 4 分频

  3 8 分频

  SELS 选择SMCLK时钟源

  0 时钟源为DCOCLK(默认)

  1 时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对于MSP430F13/14/15/16X)。

  DIVS.1 DIVS.0 选择SMCLK分频。

  0 1分频

  1 2分频

  2 4分频

  4 8分频

  DCOR 选择DCO电阻

  0 内部电阻

  1 外部电阻

  PUC信号之后,DCOCLK被自动选择MCLK时钟信号,根据需要,MCLK的时钟源可以另外设置为LFXT1或者XT2。设置顺序如下:

  [1] 复位OscOff

  [2] 清除OFIFG

  [3] 延时等待至少50us

  [4] 再次检查OFIFG,如果仍然置位,则重复[3]、[4]步骤,直到OFIFG=0为止。

  低功耗设置的技巧问题:

  1、LPM4:在振荡器关闭模式期间,处理机的所有部件工作停止,此时电流消耗最小。此时只有在系统上电电路检测到低点电平或任一请求异步响应中断的外部中断事件时才会从新工作。因此在设计上应含有可能需要用到的外部中断才采用这种模式。否则发生不可预料的结果。

  2、LPM3:在DC发生器关闭期间,只有晶振是活动的。但此时设置的基本时序条件的DC发生器的DC电流被关闭。由于此电路的高阻设计,使功耗被抑制。注:当从DC关闭到启动DC0要花一端时间(ns-us)

  3、LPM2:在此期间,晶镇振和DC发生器是工作的,所以可实现快速启动。

  4、LPM1:在此振荡器已经工作,所以不存在启动时间延时问题。

  msp430

  Timer_A的寄存器

  寄存器 缩写 读定类型 地址 初态

  Timer_A控制寄存器 TACTL R/W 160H POR复位

  Timer_A计数器 TAR R/W 170H POR复位

  捕捞/比较控制寄存器0 CCTL0 R/W 162H POR复位

  捕捞/比较寄存器0 CCR0 R/W 172H POR复位

  捕捞/比较控制寄存器1 CCTL1 R/W 164H POR复位

  捕捞/比较寄存器1 CCR1 R/W 174H POR复位

  捕捞/比较控制寄存器2 CCTL2 R/W 166H POR复位

  捕捞/比较寄存器2 CCR2 R/W 176H POR复位

  中断向量寄存器 TAIV R/W 12EH POR复位

  时钟发生器的原理说明:

  问题的提出:

  1、高频、以便能对系统硬件请求和事件作出快速响应

  2、低频率,以便将电流消耗降制至最少

  3、稳定的频率,以满足定时器的应用。

  4、低 Q值振荡器,以保证开始或停止操作没有延时

  MSP430 采用了一个折衷的办法:就是用一个低频晶镇振,将其倍频在高频的工作频率上。一般采用这种技术的实用方法有两种,一个是说、锁相环、 一个是锁频环,而锁相环采用模拟的控制容易引起“失锁”和易引起电容量的改变。而TI 采用的是锁频环技术,它采用数字控制器DCO和频率积分来产 生高频的运行时钟频率。

  TIMER_A有多个捕获比较模块,每个模块都有自己的控制寄存器CCTLx

  CAPTMOD1-0 选择捕获模式

  00 禁止捕获模式

  01 上升沿捕获

  10 下降沿捕获

  11 上升沿与下降沿都捕获

  CCISI1-0 在捕获模式中用来定提供捕获事件的输入端

  00 选择CCIxA

  01 选择CCIxB

  10 选择GND

  11 选择VCC

  SCS 选择捕获信号与定时器时钟同步、异步关系

  0 异步捕获

  1 同步捕获

  异步捕获模式允许在请求时立即将CCIFG置位和捕获定时器值,适用于捕获信号的周期远大于定时器时钟周期的情况。但是,如果定时器时钟和捕获信号发生时间竞争,则捕获寄存器的值可能出错。

  在实际中经常使用同步捕获模式,而且捕获总是有效的。

  SSCIx 比较相等信号EQUx将选择中的捕获、比较输入信号CCIx(CCIxA,CCIxB,Vcc和GND)进行锁存,然后可由SCCIx读出。

  CAP 选择捕获模式还是比较模式。

  0 比较模式

  1 捕获模式

  注意:同时捕获和捕获模式选择

  如果通过捕获比较寄存器CCTLx中的CAP使工作模式从比较模式变为捕获模式,那么不应同时进行捕获;否则,在捕获比较寄存器中的值是不可预料的,推荐的指令顺序为:[1]修改控制寄存器,由比较模式换到捕获模式。

  [2]捕获

  OUTMODx 选择输出模式

  000 输出

  001 置位

  010 PWM翻转/复位

  011 PWM置位/复位

  100 翻转/置位

  101 复位

  110 PWM翻转/置位

  111 PWM复位/置位

 msp430

  CCIx 捕获比较模的输入信号

  捕获模式:由CCIS0和CCIS1选择的输入信号通过该位读出。

  比较模式:CCIx复位。

  OUT 输出信号

  0 输出低电平

  1 输出高电平

  如果OUTMODx选择输出模式0(输出),则该位对应于输入状态。

  COV 捕获溢出标志

  0 输出低电平

  1 输出高电平

  [1]当CAP=0时,选择比较模式。捕获信号发生复位,没有使COV置位的捕获事件。

  [2]当CAP=1时,选择捕获模式,如果捕获寄存器的值被读出再次发生捕获事件,则COV置位。程序可检测COV来断定原值读出前是否又发生捕获事件。读捕获寄存器时不会使溢出标志复位,须用软件复位。

  CCIFGx 捕获比较中断标志

  捕获模式:寄存器CCRx捕获了定时器TAR值时置位。

  比较模式:定时器TAR值等于寄存器CCRx值时置位。

  #include

  void main(void)

  {

  WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器

  P1DIR |= 0x01; // 设P1.0为输出

  TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, 定时器A计数模式,且开中断功能

  _BIS_SR(LPM3_bits + GIE); //进入LPM3 低功耗模式和开总中断允许

  }

  // Timer_A3中断向量(TAIV)处理程序

  #pragma vector=TIMERA1_VECTOR

  __interrupt void Timer_A(void)

  {

  switch( TAIV ) //应用switch语句来处理多中断源的向量

  { //向量列表通过case语句来分多中断源的入口

  case 2: break; // CCR1比较/捕获寄存器的中断入口,

  //本例子未用到。

  case 4: break; // CCR2比较/捕获寄存器的中断入口,

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分