单片机原理及应用第六讲MSP430F5XX6XX的时钟模块UCS实验报告.docx
《单片机原理及应用第六讲MSP430F5XX6XX的时钟模块UCS实验报告.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用第六讲MSP430F5XX6XX的时钟模块UCS实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
单片机原理及应用第六讲MSP430F5XX6XX的时钟模块UCS实验报告
单片机原理及应用
第六讲MSP430F5XX6XX的时钟模块(UCS)
实验报告
报告人:
实验内容
1、实验16638芯片的上电默认时钟
ACLK=REFO=32.768kHz,MCLK=SMCLK=Default1MHz
2、实验2时钟设置实例
ACLK=REFO=32kHz,MCLK=SMCLK=8MHz
3、实验3时钟设置实例
ACLK=REFO=32kHz,MCLK=SMCLK=12MHz
4、实验3时钟设置实例
ACLK=REFO=32kHz,MCLK=SMCLK=20MHz
实验步骤
步骤:
(1)将PC和板载仿真器通过USB线相连;
(2)打开CCS集成开发工具,选择样例工程或自己新建一个工程,修改代码;
(3)选择
对该工程进行编译链接,生成.out文件。
然后选择
,将程序下载到实验板中。
程序下载完毕之后,可以选择
全速运行程序,也可以选择
单步调试程序,选择F3查看具体函数。
也可以程序下载之后,按下
,软件界面恢复到原编辑程序的画面。
再按下实验板的复位键,运
行程序。
(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议
上电运行程序)。
关键代码:
实验1:
Main(){
WDTCTL=WDTPW+WDTHOLD;//StopWDT
P4DIR|=BIT1;//P4.1output
P1DIR|=BIT0;//ACLKsetouttopins
P1SEL|=BIT0;
P3DIR|=BIT4;//SMCLKsetouttopins
P3SEL|=BIT4;
while
(1)
{
P4OUT^=BIT1;
__delay_cycles(60000);//Delay
}
实验2:
#include
intmain(void){
volatileunsignedinti;
WDTCTL=WDTPW+WDTHOLD;//StopWDT
P4DIR|=BIT1;//P1.1output
P1DIR|=BIT0;//ACLKsetouttopins
P1SEL|=BIT0;
P3DIR|=BIT4;//SMCLKsetouttopins
P3SEL|=BIT4;
UCSCTL3=SELREF_2;//SetDCOFLLreference=REFO
UCSCTL4|=SELA_2;//SetACLK=REFO
UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx
//LoopuntilXT1,XT2&DCOstabilizes‐InthiscaseonlyDCOhastostabilize
do{
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);
//ClearXT2,XT1,DCOfaultflags
SFRIFG1&=~OFIFG;//Clearfaultflags
}while(SFRIFG1&OFIFG);//Testoscillatorfaultflag
__bis_SR_register(SCG0);//DisabletheFLLcontrolloop
UCSCTL1=DCORSEL_5;//SelectDCOrange16MHzoperation
UCSCTL2|=249;//SetDCOMultiplierfor8MHz
//(N+1)*FLLRef=Fdco,(249+1)*32768=8MHz
__bic_SR_register(SCG0);//EnabletheFLLcontrolloop
//Worst‐casesettlingtimefortheDCOwhentheDCOrangebitshavebeen
//changedisnx32x32xf_MCLK/f_FLL_reference.SeeUCSchapterin5xxUGfor
//optimization,32x32x8MHz/32,768Hz=250000=MCLKcyclesforDCOtosettle
__delay_cycles(250000);
while
(1)
{
P4OUT^=BIT1;//ToggleP1.1
__delay_cycles(600000);//Delay
}
}
实验3:
#include
intmain(void){
volatileunsignedinti;
WDTCTL=WDTPW+WDTHOLD;//StopWDT
P4DIR|=BIT1;//P1.1output
P1DIR|=BIT0;//ACLKsetouttopins
P1SEL|=BIT0;
P3DIR|=BIT4;//SMCLKsetouttopins
P3SEL|=BIT4;
UCSCTL3=SELREF_2;//SetDCOFLLreference=REFO
UCSCTL4|=SELA_2;//SetACLK=REFO
UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx
//LoopuntilXT1,XT2&DCOstabilizes‐InthiscaseonlyDCOhastostabilize
do{
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);
//ClearXT2,XT1,DCOfaultflags
SFRIFG1&=~OFIFG;//Clearfaultflags
}while(SFRIFG1&OFIFG);//Testoscillatorfaultflag
__bis_SR_register(SCG0);//DisabletheFLLcontrolloop
UCSCTL1=DCORSEL_5;//SelectDCOrange16MHzoperation
UCSCTL2|=375;//SetDCOMultiplierfor8MHz
//(N+1)*FLLRef=Fdco,(249+1)*32768=8MHz
__bic_SR_register(SCG0);//EnabletheFLLcontrolloop
//Worst‐casesettlingtimefortheDCOwhentheDCOrangebitshavebeen
//changedisnx32x32xf_MCLK/f_FLL_reference.SeeUCSchapterin5xxUGfor
//optimization,32x32x8MHz/32,768Hz=250000=MCLKcyclesforDCOtosettle
__delay_cycles(250000);
while
(1)
{
P4OUT^=BIT1;//ToggleP1.1
__delay_cycles(600000);//Delay
}
}
实验3:
#include
voidSetVcoreUp(unsignedintlevel);
voidmain(void){
volatileunsignedinti;
WDTCTL=WDTPW+WDTHOLD;//StopWDT
P4DIR|=BIT1;//P4.1output
P1DIR|=BIT0;//ACLKsetouttopins
P1SEL|=BIT0;
P3DIR|=BIT4;//SMCLKsetouttopins
P3SEL|=BIT4;
//IncreaseVcoresettingtolevel3tosupportfsystem=25MHz
//NOTE:
Changecorevoltageonelevelatatime..
SetVcoreUp(0x01);
SetVcoreUp(0x02);
SetVcoreUp(0x03);
UCSCTL3=SELREF_2;//SetDCOFLLreference=REFO
UCSCTL4|=SELA_2;//SetACLK=REFO
__bis_SR_register(SCG0);//DisabletheFLLcontrolloop
UCSCTL0=0x0000;//SetlowestpossibleDCOx,MODx
UCSCTL1=DCORSEL_7;//SelectDCOrange50MHzoperation
UCSCTL2=FLLD_1+609;//SetDCOMultiplierfor20MHz
//(N+1)*FLLRef=Fdco
//(609+1)*32768=20MHz
//SetFLLDiv=fDCOCLK/2
__bic_SR_register(SCG0);//EnabletheFLLcontrolloop
//Worst‐casesettlingtimefortheDCOwhentheDCOrangebitshavebeen
//changedisnx32x32xf_MCLK/f_FLL_reference.SeeUCSchapterin5xx
//UGforoptimization.
//32x32x25MHz/32,768Hz~780kMCLKcyclesforDCOtosettle
__delay_cycles(782000);
//LoopuntilXT1,XT2&DCOstabilizes‐InthiscaseonlyDCOhastostabilize
do
{
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);
//ClearXT2,XT1,DCOfaultflags
SFRIFG1&=~OFIFG;//Clearfaultflags
}while(SFRIFG1&OFIFG);//Testoscillatorfaultflag
while
(1)
{
P4OUT^=BIT1;//ToggleP4.1
__delay_cycles(600000);//Delay
}
}
voidSetVcoreUp(unsignedintlevel)
{
PMMCTL0_H=PMMPW_H;//OpenPMMregistersforwrite
//SetSVS/SVMhighsidenewlevel
SVSMHCTL=SVSHE+SVSHRVL0*level+SVMHE+SVSMHRRL0*level;
//SetSVMlowsidetonewlevel
SVSMLCTL=SVSLE+SVMLE+SVSMLRRL0*level;
while((PMMIFG&SVSMLDLYIFG)==0);//WaittillSVMissettled
PMMIFG&=~(SVMLVLRIFG+SVMLIFG);//Clearalreadysetflags
PMMCTL0_L=PMMCOREV0*level;//SetVCoretonewlevel
if((PMMIFG&SVMLIFG))
while((PMMIFG&SVMLVLRIFG)==0);//Waittillnewlevelreached
//SetSVS/SVMlowsidetonewlevel
SVSMLCTL=SVSLE+SVSLRVL0*level+SVMLE+SVSMLRRL0*level;
//LockPMMregistersforwriteaccess
PMMCTL0_H=0x00;
}
实验现象分析
实验1:
示波器探头接P1.0时,测得频率为32kHz左右,接P3.4时,测得频率大概为1MHz。
接P1.0:
接P3.4:
P1.0波形:
实验2:
示波器探头接P1.0时,测得频率为32kHz左右,接P3.4时,测得频率大概为8MHz。
P3.4波形:
实验3:
示波器探头接P1.0时,测得频率为32kHz左右,接P3.4时,测得频率大概为12MHz。
P3.4波形:
实验4:
示波器探头接P1.0时,测得频率为32kHz左右,接P3.4时,测得频率大概为20MHz。
P3.4波形:
思考题
1、MSP430系列单片机有哪些时钟输入源?
答:
5XX/6XX系列系统时钟有五个时钟源:
1、XT1CLK低频或高频时钟源:
可以使用标准时钟晶振,振荡器或者外部时钟源输入4MHz~32MHz;XT1CLK可以作为内部FLL模块的参考时钟;
2、XT2CLK高频时钟源:
可以使用标准晶振,振荡器或者外部时钟源输入4MHz~32MHz;
3、VLOCLK低功耗低频内部时钟源:
典型值为10KHZ;
4、REFOCLK低频修整内部参考时钟源:
典型值为32768Hz,作为FLL基准时钟源;
5、DCOCLK片内数字控制时钟源:
通过FLL模块来稳定。
2、MSP430系列单片机提供几种时钟信号?
每种时钟的通常用途是什么?
答:
5XX/6XX系列UCS产生3种时钟信号:
1、ACLK辅助时钟:
ACLK可由软件选择来自XT1CLK、REFOCLK、VLOCLK、DCOCLK、DCOCLKDIV、XT2CLK(由具体器件决定)这几个时钟源之一。
然后经1、2、4、8、16、32分频得到。
ACLK可由软件选作各个外设模块的时钟信号,一般用于低速外设模块;
2、MCLK系统主时钟:
MCLK可由软件选择来自上述5种时钟源,同样可经过分频得到。
MCLK主要用于CPU和系统;
3、SMCLK子系统时钟:
可由软件选择来自上述5种时钟源,同样可经过分频得到。
SMCLK可由软件选作各个外设模块的时钟信号,主要用于高速外设模块。
3、MSP430系列单片机的DCO振荡器有什么重要作用?
答:
DCO为片内数字控制振荡器,它有以下作用:
1、DCO振荡器是一个可数字控制的RC振荡器,它的频率随供电电压、环境温度变化而具有一定的不稳定性;
2、DCO频率可以通过选择FLL的频率(FLLRENCLK/n)来增强振荡频率的稳定性。
4、MSP430系列单片机不接外接振荡器是否可以正常工作?
答:
不可以。
MSP430单片机的时钟既要有高频率以对系统硬件和外部事件有较快的反应速度,又要有低频率来降低电流消耗,还要多个时钟源产生多个时钟输出信号,所以需要外接振荡器。
5、掌握MSP430F6XX单片机时钟系统配置
答:
可参见问题1、2答案。
实验中遇到的问题
无