1、第三部分 MSP430基本外设2 Copyright 2009 Texas Instruments All Rights Reservedwww.msp430.ubi.ptnMSP430系列微控制器的片内资源非常丰富,系列微控制器的片内资源非常丰富,外设模块外设模块通过数据总线、控制总线和地址总线与通过数据总线、控制总线和地址总线与CPU相连相连。q3.1 系统时钟q3.2 低功耗模式q3.3 通用输入输出端口q3.4 定时器q3.5 DMA控制器q3.6 比较器Aq3.7 模数转换器(ADC)q3.8 数模转换模块(DAC) q3.9 LCD液晶驱动模块q3.10 硬件乘法器q3.11 Fl
2、ash编程3.1 系统时钟 (UCS)Unified Clock System 本节内容n时钟系统模块设计要求时钟系统模块设计要求nMSP430X5XX / 6XX系列时钟系统模块系列时钟系统模块n五个时钟输入源振荡器模块五个时钟输入源振荡器模块nDCO模块操作模块操作n外设模块请求时钟系统(低功耗运行模式下)外设模块请求时钟系统(低功耗运行模式下)n模块振荡器(模块振荡器(MODOSC)n故障安全逻辑操作故障安全逻辑操作n时钟模块应用举例(时钟模块应用举例(MSP430F5XX / 6XX)n时钟模块库函数时钟模块库函数时钟系统模块设计要求(1/1) 单片机各部件能有条不紊自动工作,实际上是
3、在其系统时钟作用下,控制器指挥芯片内各个部件自动协调工作,使内部逻辑硬件产生各种操作所需的脉冲信号而实现的。 为适应系统和具体应用需求,单片机的系统时钟必须满足以下不同要求:高频率。高频率。用于对系统硬件需求和外部事件快速反应;低频率。低频率。用于降低电流消耗;稳定的频率。稳定的频率。以满足定时应用,如实时时钟RTC;低低Q Q值振荡器。值振荡器。用于保证开始及停止操作最小时间延迟。MSP430X5XX / 6XX系列时钟系统模块(1/3)右图为MSP430X5XX / 6XX系列单片机时钟模块结构:MSP430X5XX / 6XX系列时钟系统模块(2/3) 从上图可以看出,MSP430F5X
4、X / 6XX时钟模块有 5 个时钟输入源:XT1CLK 低频或高频时钟源:可以使用标准晶振,振荡器或者外部时钟源输入4MHz32MHz。XT1CLK可以作为内部FLL模块的参考时钟。XT2CLK 高频时钟源:可以使用标准晶振,振荡器或者外部时钟源输入4MHz32MHz。VLOCLK 低功耗低频内部时钟源:典型值为10KHZ;REFOCLK 低频修整内部参考时钟源:典型值为32768Hz,作为FLL基准时钟源;DCOCLK 片内数字控制时钟源:通过FLL模块来稳定。MSP430X5XX / 6XX系列时钟系统模块(3/3)基础时钟模块可提供3种时钟信号:ACLK 辅助时钟:ACLK可由软件选择
5、来自XT1CLK、REFOCLK、VLOCLK、DCOCLK、DCOCLKDIV、XT2CLK(由具体器件决定)这几个时钟源之一。然后经1、2、4、8、16、32分频得到。ACLK可由软件选作各个外设模块的时钟信号,一般用于低速外设模块。MCLK 系统主时钟: MCLK可由软件选择来自上述5种时钟源,同样可经过分频得到。MCLK主要用于CPU和系统。SMCLK 子系统时钟:可由软件选择来自上述5种时钟源,同样可经过分频得到。 SMCLK可由软件选作各个外设模块的时钟信号,主要用于高速外设模块。五个时钟输入源振荡器模块(1/6)五个时钟输入源振荡器模块,包括:XT1 振荡器XT2 振荡器低功耗低
6、频内部振荡器(VLO)低频修整内部参考振荡器(REFO)片内数字控制振荡器(DCO)五个时钟输入源振荡器模块(2/6)一、一、XT1 振荡器振荡器XT1工作在低频(LF)模式时(XTS=0),提供支持32768HZ时钟的超低功耗模式。晶振只需经过XIN和XOUT两个引脚连接,不需要其他外部器件,所有保证工作稳定的元件和移相电容都集成在芯片中。在一些设备中当XT1选择高频(HF)模式时(XTS=1)也支持高频晶振或者振荡器。高频晶振或谐振器连接到XIN和XOUT引脚,需要在两个端口配置电容。五个时钟输入源振荡器模块(3/6)二、二、XT2 振荡器振荡器一般称之为第二振荡器XT2,它产生时钟信号X
7、T2CLK,它的工作特性与XTl振荡器工作在高频模式时类似。系统频率和系统的工作电压密切相关,某些应用需要较高的工作电压,所以也需要系统提供相应较高的频率。系统频率和系统工作电压之间的关系下图所示:五个时钟输入源振荡器模块(4/6) 频率(MHz)频率和工作电压的关系在阴影中的数字表示所支持PMMCOREVx配置。电压(V)五个时钟输入源振荡器模块(5/6)三、低功耗低频内部振荡器(三、低功耗低频内部振荡器(VLO)低频低功耗内部振荡器 (VLO)能够提供典型10kHz的振荡频率(具体参数见数据手册),而不需要外接任何晶振。VLO可以对时钟精确要求不高的的应用提供低成本和超低功耗的时钟源。五个
8、时钟输入源振荡器模块(6/6)四、低频修整内部参考振荡器(四、低频修整内部参考振荡器(REFO)REFO可以产生一个比较稳定的频率,其典型值为32768Hz,它可以用作FLLREFCLK。低频修整内部参考振荡器(REFO)可以在没有外部晶振,对成本又比较敏感的场合得到很好的应用。五、片内数字控制振荡器(五、片内数字控制振荡器(DCO)DCO振荡器是一个可数字控制的RC振荡器,它的频率随供电电压、环境温度变化而具有一定的不稳定性。DCO频率可以通过选择FLL的频率(FLLRENCLK/n)来增强振荡频率的稳定性。DCO模块操作(1/4)DCOCLK频率调整过程:频率调整过程:设置DCORSELx
9、这3位可以从8个DCO额定频率中选择一个频率。5位的DCO用来在DCORSEL的32个频率级别中选择,相邻两个的频率相差约8%。5位的MOD用于控制在DCO中的32个频率中选择切换两种频率。如果DCO=31,表示DCO已经选择最高频率,此时不能利用MOD进行频率调整。(如下图所示)其中,在锁频环工作的时候,这些DCO位和MOD位的值由硬件自动调节。DCO模块操作(2/4)DCO频率的调节DCO模块操作(3/4)锁频环锁频环(FLL)DCOCLK可用作ACLK、MCLK、SMCLK,但它的频率随供电电压、环境温度变化而具有一定的不稳定性,FLL通过频率积分器和调制器的自动调节使DCOCLK的频率
10、趋于稳定。FLL通过在两个最相近的邻居频率之间进行切换,产生两个频率的加权频率,最终获得我们所需的频率。(如下图所示)DCO模块操作(4/4)外设模块请求时钟系统(1/2)外设模块可以控制3个时钟请求信号中的一个来获得时钟ACLK_REQ、MCLK_REQ、SMCLK_REQ。不管在任何模式下,外设模块的正常操作都可以从标准时钟系统(UCS)请求时钟信号。 例如:如果定时器选择了ACLK作为时钟源,只要定时器允许,ACLK_REQ信号就一直有效并向UCS申请时钟,而UCS则不管当前是在什么LPM低功耗模式都会输出ACLK信号。 如下图所示,为外设模块请求时钟系统。外设模块请求时钟系统(2/2)
11、外设模块请求时钟系统。模块振荡器(MODOSC)(1/1)UCS模块还有一个内部的振荡器(MODOSC)。它主要给FLASH模块控制器或其他任意需要的模块提供时钟。MODOSC产生时钟信号MODCLK。 例:ADC12_A可以选择使用MODOSC作为转换时钟源,用户选择ADC12OSC作为转换时钟源时,ADC12OSC就来自MODOSC。故障安全逻辑操作(1/2)时钟系统模块包含有晶振故障保护的功能。这个功能可以检测XT1、XT2、DCO的振荡器故障。当晶体振荡器启用后,没有正常工作时,则相应的故障位XT1LFOFFG、XT1HFOFFG、XT2OFFG将被置位。如下图所示,可检测的故障有:X
12、T1的LF模式下低频晶振故障(XT1LFOFFG)XT1的HF模式下高频晶振故障(XT1HFOFFG)XT2高频晶振故障(XT2OFFG)DCO故障标志(DCOFFG)故障安全逻辑操作(2/2)晶振故障逻辑时钟模块应用举例(MSP430F5XX / 6XX)(1/2)SMCLKACLK例1,MSP430 x66xx演示例程:设ACLK = XT1 = 32768Hz,令SMCLK = XT2CLK,MCLK = DCO(默认) = 32 x ACLK = 1048576Hz,ACLK和SMCLK分别通过P1.0和P3.4输出。程序代码如下:#include void main(void) WD
13、TCTL = WDTPW + WDTHOLD; / 关闭看门狗关闭看门狗 P1DIR |= BIT0; / ACLK 通过通过 P1.0输出输出 P1SEL |= BIT0; P3DIR |= BIT4; / SMCLK分别通过分别通过 P3.4输出。输出。 P3SEL |= BIT4; while(BAKCTL & LOCKIO) / 解锁解锁XT1引脚引脚 BAKCTL &= (LOCKIO); P7SEL |= BIT2+BIT3; / 选择端口功能为选择端口功能为 XT2 UCSCTL6 &= XT2OFF; / 使能使能 XT2 UCSCTL6 &= (XT1OFF); / 使能使能
14、 XT1 UCSCTL6 |= XCAP_3; / 配置内接电容值,配置内接电容值, / 若使输出为若使输出为32.768KHz,则需要选择,则需要选择XCAP_3 do UCSCTL7 &= (XT2OFFG + XT1LFOFFG + DCOFFG); / 清零清零XT1、XT2、DCO故障标志位故障标志位 SFRIFG1 &= OFIFG; / 清零清零SFR中的故障标志位中的故障标志位 while (SFRIFG1&OFIFG); / 检测振荡器故障标志位检测振荡器故障标志位 UCSCTL6 &= XT2DRIVE0; / 根据预期的频率,减小根据预期的频率,减小XT2的驱动的驱动 U
15、CSCTL4 |= SELA_0 + SELS_5; / 选择选择 SMCLK和和ACLK的时钟源的时钟源 while(1); / 循环等待循环等待 时钟模块应用举例(MSP430F5XX / 6XX)(2/2) 时钟系统时钟系统(UCS)常用配置和初始化的常用配置和初始化的API函数函数UCS_clockSignalInit()UCS_initFLLSettle()UCS_enableClockRequest()UCS_disableClockRequest()UCS_SMCLKOff()UCS_SMCLKOn()时钟模块库函数(1/4) 时钟系统时钟系统(UCS)的的API被分成三组函数:
16、被分成三组函数:时钟系统(UCS)常用配置和初始化的API函数外部晶振特定的配置和初始化的API函数对状态和配置进行设置和询问的API函数时钟模块库函数(2/4) 外部晶振特定的配置和初始化的外部晶振特定的配置和初始化的API函数函数UCS_setExternalClockSource()UCS_LFXT1Start()UCS_HFXT1Start()UCS_bypassXT1()UCS_LFXT1StartWithTimeout()UCS_HFXT1StartWithTimeout()UCS_bypassXT1WithTimeout()UCS_XT1Off()UCS_XT2Start()UC
17、S_XT2Off()UCS_bypassXT2()UCS_XT2StartWithTimeout()UCS_bypassXT2WithTimeout()UCS_clearAllOscFlagsWithTimeout()时钟模块库函数(3/4)对状态和配置进行设置和询问的对状态和配置进行设置和询问的API函数函数UCS_faultFlagStatus() UCS_clearFaultFlag() UCS_getACLK() UCS_getSMCLK() UCS_getMCLK() 时钟模块库函数(4/4)库函数编程示例(伪代码)库函数编程示例(伪代码)/ 设置 DCO FLL 参考基准 = RE
18、FO UCS_clockSignalInit(_MSP430_BASEADDRESS_UCS , UCS_FLLREF, UCS_REFOCLK_SELECT, UCS_CLOCK_DIVIDER_1 ); / 令 ACLK = REFOUCS_clockSignalInit(_MSP430_BASEADDRESS_UCS_, UCS_ACLK, UCS_REFOCLK_SELECT, UCS_CLOCK_DIVIDER_1 );/设置比例和所需的MCLK频率,初始化DCO UCS_initFLLSettle(_MSP430_BASEADDRESS_UCS_, UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ, UCS_MCLK_FLLREF_RATIO );/ 验证时钟设置是否跟希望的配置一样 clockValue = UCS_getSMCLK (_MSP430_BASEADDRESS_UCS_ );
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。