购物网站开发,专门卖医疗器械的网站,阿里巴巴官网电脑版,地税局网站怎么做变更目录一、新建工程二、时钟树时钟系统结构时钟系统的原理时钟树配置实战三、点灯工程师封装好的初始化函数平台#xff1a;Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 一、新建工程 二、时钟树 时钟系统结构
#xff08;1Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 一、新建工程 二、时钟树 时钟系统结构
15个时钟来源 时钟系统模块具有5个时钟来源。 ① XT1CLK低频/高频振荡器可以使用32768Hz的手表晶振、标准晶体、谐振器或432MHz的外部时钟源 ② VLOCLK内部超低功耗低频振荡器典型频率12kHz ③ REFOCLK内部调整低频参考振荡器典型值为32768Hz ④ DCOCLK内部数字时钟振荡器可由FLL稳定后得到 ⑤ XT2CLK高频振荡器可以是标准晶振、谐振器或432MHz的外部时钟源。 23个时钟信号 时钟系统模块可以产生3个时钟信号供CPU和外设使用。 ① ACLK辅助时钟Auxiliary Clock。可以通过软件选择XT1CLK、REFOCLK、VLOCLK、DCOCLK、DCOCLKDIV或XT2CLK当XT2CLK可用时。DCOCLKDIV是FLL模块内DCOCLK经过1/2/4/8/16/32分频后获得的。ACLK主要用于低速外设。ACLK可以再进行1/2/4/8/16/32分频ACLK/n 就是ACLK 经过1/2/4/8/16/32分频后得到的也可以通过外部引脚进行输出。 ② MCLK主时钟Master Clock。MCLK的时钟来源与ACLK相同MCLK专门供CPU使用MCLK配置得越高CPU的执行速度就越快功耗就越高。一旦关闭MCLKCPU也将停止工作因此在超低功耗系统中可以通过间歇启用MCLK的方法降低系统功耗。MCLK也可经1/2/4/8/16/32分频后供CPU使用。 ③ SMCLK子系统时钟Subsystem Master Clock。SMCLK的时钟来源与ACLK相同SMCLK主要用于高速外设SMCLK也可以再进行1/2/4/8/16/32分频。
时钟系统的原理
1内部超低功耗低频振荡器VLO 内部超低功耗低频振荡器在无须外部晶振的情况下可提供12kHz的典型频率。VLO为不需要精确时钟基准的系统提供了一个低成本、超低功耗的时钟源。当VLO被用作ACLK、MCLK或SMCLK时(SELA{1}、SELM{1}或SELS{1})VLO被启用。 2内部调整低频参考时钟振荡器REFO 在不要求或不允许使用晶振的应用中REFO可以用作高精度时钟。经过内部调整REFO的典型频率为32768Hz并且可以为FLL模块提供一个稳定的参考时钟源。REFOCLK与FLL的组合在无须外部晶振的情况下提供了灵活的大范围系统时钟。当不使用REFO时REFO不消耗电能。 3XT1振荡器XT1 如图所示。MSP430单片机的每种器件都支持XT1振荡器MSP430F5xx/6xx系列单片机的XT1振荡器支持两种模式LF低频模式和HF高频模式。
4XT2振荡器XT2 如图所示XT2振荡器用来产生高频的时钟信号XT2CLK其工作特性与XT1振荡器工作在高频模式相似晶振的选择范围为4 32MHz具体范围由XT2DRIVE控制位进行设置。高频时钟信号XT2CLK可以分别作为辅助时钟ACLK、主时钟MCLK和子系统时钟SMCLK的基准时钟信号也可提供给锁频环模块(FLL)可以利用XT2OFF控制位实现对XT2模块的启用(0)和关闭(1)。
5锁频环FLL 如图所示FLL的参考时钟FLLREFCLK可以来自于XT1CLK、REFOCLK或XT2CLK中的任何一个时钟源通过SELREF控制位进行选择。由于这3种时钟的精确度都很高倍频后仍然能够得到准确的频率。FLL能够产生两种时钟信号DCOCLK和DCOCLKDIV其中DCOCLKDIV信号为DCOCLK时钟经1/2/4/8/16/32分频后得到分频系数为D。 锁频环是一种非常巧妙的电路它的核心部件是数控振荡器和一个频率积分器。数控振荡器能够产生DCOCLK时钟频率计数器实际上是一个加减计数器“”输入端上的每个脉冲将使计数值加1“-”输入端上的每个脉冲将使计数值减1。FLLREFCLK经过1/2/4/8/12/16分频后输入频率积分器的“”输入端分频系数为nDCOCLKDIV经过(N1)分频后输入频率积分器的“-”输入端频率积分器的运算结果又输出给数控振荡器改变数控振荡器的输出频率DCOCLK构成反馈环。经过反馈调整最终的结果使频率积分器的“”输入端的频率与“-”输入端的频率相同即 所以数控振荡器的最终输出频率为 其中D由3位FLLD控制位确定取值为1,2,4,8,16,32 N由10位FLLN控制位确定取值范围为11023 n由3位FLLREFDIV控制位确定取值为1,2,4,8,12,16。 6内部模块振荡器MODOSC 如图所示UCS时钟模块还包含一个内部模块振荡器MODOSC能够产生约4.8MHz的MODCLK时钟。Flash控制器模块、ADC_12模块等片内外设都可使用MODCLK作为内部参考时钟。 为了降低功耗当不需要使用MODOSC时可将其关闭。当产生有条件或无条件启用请求时MODOSC可自动开启。设置MODOSCREQEN控制位将允许有条件启用请求使用MODOSC模块。对于利用无条件启用请求的模块无须置位MODOSCREQEN控制位例如Flash控制器、ADC_12等。 7时钟模块失效及安全操作 MSP430单片机的时钟模块包含检测XT1、XT2和DCO振荡器故障失效的功能。振荡器故障失效检测逻辑如图所示。 晶振故障失效条件有以下4种。 ① XT1LFOFFGXT1振荡器在低频模式LF下失效 ② XT1HFOFFGXT1振荡器在高频模式HF下失效 ③ XT2OFFGXT2振荡器失效 ④ DCOFFGDCO振荡器失效。
时钟树配置实战 这里我打算将MCLK、SMCLK配置为25MHz它们的时钟源设为倍频后的DCOCLKFLL时钟源设为XT2CLK。 由原理图可知XT2输入引脚为P5.2、P5.3 复用P5.2、P5.3 GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);根据自己的开发板选择合适的参数启用XT2 MSP430F5529 LaunchPad™ Development Kit 板载XT2晶振为CSTCR4M00G15L994MHz
UCS_turnOnXT2 (UCS_XT2_DRIVE_4MHZ_8MHZ);MSP430为了省电默认状态下核心电压默认设置为1.8V来节省功耗高频工作需要较高的核心电压本次实验不需要低功耗模式故我们直接将核心电压设为最高级。
PMM_setVCore(PMM_CORE_LEVEL_3);UCS_initClockSignal用于设置各时钟的时钟源和分频系数。 UCS_initFLLSettle用于设置锁相环倍频系数。 故将XT2的4MHz经8分频进入锁相环再倍频50倍后即可得到25MHz的DCOCLK 4MHz经4分频再倍频24倍、25倍只能得到24MHz26倍得到26MHz我暂且蒙在鼓里 最后将MCLK、SMCLK的时钟源选为DCOCLK UCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);UCS_initFLLSettle(25000, 50);UCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);UCS_initClockSignal(UCS_SMCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);综上最后将MCLK和SMCLK通过P7.7、P2.2复用输出
#include driverlib.hint main(void)
{WDT_A_hold(WDT_A_BASE);GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);UCS_turnOnXT2 (UCS_XT2_DRIVE_4MHZ_8MHZ);PMM_setVCore(PMM_CORE_LEVEL_3);UCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);UCS_initFLLSettle(25000, 50);UCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);UCS_initClockSignal(UCS_SMCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN2); //SMCLK OutputGPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7, GPIO_PIN7); //MCLK Outputwhile(1){}
}测得对应时钟已升至25MHz
三、点灯工程师 如原理图所示P4.7控制LED2高电平点亮
在程序中加入
#define MCLK_IN_HZ 25000000#define delay_us(x) __delay_cycles((MCLK_IN_HZ/1000000*(x)))
#define delay_ms(x) __delay_cycles((MCLK_IN_HZ/1000*(x)))将P4.7设为输出模式 GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN7);while(1){GPIO_toggleOutputOnPin (GPIO_PORT_P4, GPIO_PIN7);delay_ms(500);}即可观察到LED2以1Hz的频率闪烁
封装好的初始化函数
void SystemClock_Init(void)
{PMM_setVCore(PMM_CORE_LEVEL_3); //高主频工作需要较高的核心电压//XT1引脚复用GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN4);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN5);//起振XT1UCS_turnOnLFXT1(UCS_XT1_DRIVE_3,UCS_XCAP_3);//XT2引脚复用GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);//起振XT2UCS_turnOnXT2(UCS_XT2_DRIVE_4MHZ_8MHZ);//XT2作为FLL参考时钟先8分频再50倍频 4MHz / 8 * 50 25MHzUCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);UCS_initFLLSettle(25000, 50);//XT1作为ACLK时钟源 32768HzUCS_initClockSignal(UCS_ACLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);//DCOCLK作为MCLK时钟源 25MHzUCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);//DCOCLK作为SMCLK时钟源 25MHzUCS_initClockSignal(UCS_SMCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);//设置外部时钟源的频率使得在调用UCS_getMCLK, UCS_getSMCLK 或 UCS_getACLK时可得到正确值UCS_setExternalClockSource(32768, 4000000);
}