430内部时钟.docx

上传人:b****5 文档编号:30336762 上传时间:2023-08-13 格式:DOCX 页数:18 大小:78.67KB
下载 相关 举报
430内部时钟.docx_第1页
第1页 / 共18页
430内部时钟.docx_第2页
第2页 / 共18页
430内部时钟.docx_第3页
第3页 / 共18页
430内部时钟.docx_第4页
第4页 / 共18页
430内部时钟.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

430内部时钟.docx

《430内部时钟.docx》由会员分享,可在线阅读,更多相关《430内部时钟.docx(18页珍藏版)》请在冰豆网上搜索。

430内部时钟.docx

430内部时钟

2012-5-12

3.数字信号的频率/周期测量

3.1数字信号的描述

数字信号属于离散信号的一种。

它的幅度只有2种取值,低电平通常取值为0V,高电平按照不同的标准具有不同的取值。

对于MSP430系列芯片,低电平的取值为0V,高电平的取值与芯片的电源电压的取值(DVCC)相同。

数字信号的时间参量包括频率,周期和占空比,波形图如图3.1所示。

图3.1数字信号波形图

图中Um为数字信号的幅度值;T为数字信号的周期;τ为数字信号的宽度。

周期T表示一个完整周期数字信号的时间,单位为s。

描述信号这种时间特性的另一个技术指标为频率,信号频率通常用f表示,它与周期的关系为

f=1/T

频率的单位为Hz。

信号频率为单位时间包含数字信号的个数。

■数字信号周期的测量方法

信号周期可以用这样一种方法进行测量:

当被测信号的上升沿到来时启动对一个具有比被测信号周期低、同时周期稳定且已知的信号进行计数;当被测信号紧接着的上升沿到来时停止这个计数过程;计算计数信号的个数乘计数信号的周期就可以获得被测信号的周期。

这个过程就像用一个长度为1m的尺子测量一段公路的长度。

测量数字信号周期的方法也可以用来测量数字信号的宽度,与测量周期方法的区别仅是停止计数过程的时间,现在是在紧接着启动计数的上升沿的下降沿到来时就停止计数过程。

■数字信号频率的测量方法

信号频率可以用这样一种方法进行测量:

启动对被测信号进行计数;等待一个单位时间,然后停止这个计数过程;计数器中的计数个数就是被测信号的频率,即单位时间中出现方波的个数。

C语言完成倒数运算非常方便,因此能够测量信号周期,或者信号频率,中的任意一个,通过算术运算就能够获得另外一个。

无论测量信号周期,还是信号频率,都需要一个能够对数字信号计数的设备;都需要一个周期/频率稳定的数字信号,这个稳定的数字信号在进行周期测量的时候扮演计数信号,在进行频率测量时产生单位时间。

MSP430系列芯片提供数字信号计数器。

它的时钟信号可以扮演所需要的周期/频率稳定的数字信号。

3.2MSP430x2xx系列芯片的时钟信号

3.2.1MSP430x2xx系列芯片的时钟系统

MSP430x2xx系列芯片的时钟系统方框图如图3.2所示。

图3.2MSP430x2xx系列芯片的时钟系统方框图

MSP430x2xx系列芯片具有4种时钟信号源:

内部数控振荡器(DCO)、内部低频振荡器(VLO)、低频振荡器(LFXT1)和高频振荡器(XT2)。

这些时钟信号源能够产生芯片内部使用的3种时钟信号:

主时钟信号(MCLK)、次时钟信号(SMCLK)和辅助时钟信号(ACLK)。

数控振荡器(DCO)的工作可以不需要外部器件的支持,因此降低了电路复杂程度,但是它的工作原理是基于RC振荡器,工作频率稳定度不高。

内部低频振荡器(VLO)提供12kHz的时钟信号。

低频振荡器(XT1)和高频振荡器(XT2)都需要一个外部晶体谐振电路,因此具有较高的工作频率稳定度。

采用2个晶体谐振电路的目的是让一个工作在较高的工作频率,另一个则工作在较低的工作频率。

较高的工作频率可以使信号处理速度较高;较低的工作频率可以降低芯片功耗。

并不是每一种芯片都支持全部4种时钟信号源。

MSP430F20xx和MSP430G2xx1不支持高频振荡器(XT2),不支持低频振荡器(LFXT1)的高频模式。

3.2.2配置系统时钟的相关寄存器

配置系统时钟通过状态寄存器(SR)、中断使能寄存器1(IE1)、中断标志寄存器1(IFG1)、数控振荡器(DCO)控制寄存器(DCOCTL)、系统时钟控制寄存器1(BCSCTL1)、系统时钟控制寄存器2(BCSCTL2)和系统时钟控制寄存器3(BCSCTL3)实现。

■状态寄存器(SR)

15~9

8

7

6

5

4

3

2

1

0

位名称

Reserved

V

SCG1

SCG0

OSCOFF

CPUOFF

GIE

N

Z

C

操作方式

rw

rw

rw

rw

rw

rw

rw

rw

rw

rw

复位值

0

0

0

0

0

0

0

0

0

0

与时钟电路相关的状态寄存器位包括SCG1、SCG0、OSCOFF和CPUOFF。

SCG1:

系统时钟控制位1

0SMCLK开启

1SMCLK关闭

SCG0:

系统时钟控制位0

0DCO开启

1DCO关闭

OSCOFF:

晶体振荡器工作控制位

0LFXT1晶体振荡器开启

1LFXT1晶体振荡器关闭

CPUOFF:

CPU工作控制位

0CPU开启

1CPU关闭

■中断使能寄存器1(IE1)

7

6

5

4

3

2

1

0

位名称

OFIE

操作方式

rw

复位值

0

OFIE:

晶体振荡器出错中断使能位

0不使能

1使能

IE1的其他位用于其他模块。

■中断标志寄存器1(IFG1)

7

6

5

4

3

2

1

0

位名称

OFIFG

操作方式

rw

复位值

1

上电复位信号(PUC)能够置位OFIFG。

在开相应中断的情况下将引起中断。

OFIFG:

晶体振荡器出错中断标志位

0无中断产生

1有中断产生

IFG1的其他位用于其他模块。

■数控振荡器(DCO)控制寄存器(DCOCTL)

7

6

5

4

3

2

1

0

位名称

DCO2

DCO1

DCO0

MOD4

MOD3

MOD2

MOD1

MOD0

操作方式

rw

rw

rw

rw

rw

rw

rw

rw

复位值

0

1

1

0

0

0

0

0

DCOx:

用来在RSELx选定的频率范围内选择数控振荡器(DCO)的8个工作频率之一

MODx:

用来微调数控振荡器(DCO)的工作频率,但当DCO=7时该功能无效

■系统时钟控制寄存器1(BCSCTL1)

7

6

5

4

3

2

1

0

位名称

XT2OFF

XTS

DIVA1

DIVA0

Rsel3

Rsel2

Rsel1

Rsel0

操作方式

rw

rw

rw

rw

rw

rw

rw

rw

复位值

1

0

0

0

0

1

1

1

XT2OFF:

高频振荡器(XT2)开关控制

1高频振荡器(XT2)开

2高频振荡器(XT2)关

XTS:

低频振荡器(XT1)工作模式选择

1低频振荡器(XT1)低频模式

1低频振荡器(XT1)高频模式

DIVAx:

辅助时钟(ACLK)分频系数

Bit5Bit4

DIVA1DIVA0

001

012

104

118

Reslx:

数控振荡器(DCO)内部电阻选择

■系统时钟控制寄存器2(BCSCTL2)

7

6

5

4

3

2

1

0

位名称

SELM1

SELM0

DIVM1

DIVM0

SELS

DIVS1

DIVS0

DCOR

操作方式

rw

rw

rw

rw

rw

rw

rw

rw

复位值

0

0

0

0

0

0

0

0

SELMx:

主时钟(MCLK)的时钟源选择

Bit7Bit6

SELM1SELM0

00数控振荡器(DCO)

01数控振荡器(DCO)

10高频振荡器(XT2)/当XT2不支持,为VLOCLK

11低频振荡器(XT1)/VLOCLK

DIVMx:

主时钟(MCLK)分频系数

Bit5Bit4

DIVM1DIVM0

001

012

104

118

SELS:

子系统时钟(SMCLK)的时钟源选择

0数控振荡器(DCO)

1高频振荡器(XT2)

DIVSx:

子系统时钟(SMCLK)分频系数

Bit2Bit1

DIVS1DIVS0

001

012

104

118

DCOR:

数控振荡器(DCO)电阻选择

0内部

1外部

■系统时钟控制寄存器3(BCSCTL3)

7

6

5

4

3

2

1

0

位名称

XT2S1

XT2S0

LFXT1S1

LFXT1S0

XCAP1

XCAP0

XT2OF

LFXT1OF

操作方式

rw

rw

rw

rw

rw

rw

r

r

复位值

0

0

0

0

0

1

0

1

XT2Sx:

XT2时钟范围选择

Bit7Bit6

XT2S1XT2S0

000.4~1MHz晶体振荡器

011~3MHz晶体振荡器

103~16MHz晶体振荡器

110.4~16MHz外部时钟源

LFXT1Sx:

低频时钟源选择和LFXT1时钟范围选择(受XTS/BCSCTL3控制)

Bit5Bit4

LFXT1S1LFXT1S0

XTS=0

0032768Hz晶体在LFXT1

01保留

10VLOCLK

11外部时钟源

XTS=1

000.4~1MHz晶体振荡器

011~3MHz晶体振荡器

103~16MHz晶体振荡器

110.4~16MHz外部时钟源

XCAPx:

LFXT1晶体振荡器内部电容选择(仅适用于XTS=0。

当XTS=1时,应选择00)

Bit3Bit2

XCAP1XCAP0

001pF

016pF

1010pF

1112.5pF

XT2OF:

XT2时钟失效标志

0无

1有

LFXT1OF:

LFXT1时钟失效标志

0无

1有

3.2.3系统时钟频率测量

■数控振荡器(DCO)频率测量

数控振荡器(DCO)是MSP430系列芯片提供的一个内部时钟信号源。

使用这个信号源,用户不需要使用任何外部器件。

用户还能够通过软件来配置相关寄存器调整这个信号源的输出频率。

不过由于数控振荡器(DCO)属于RC振荡器类型,它的工作频率受工作电压、温度的影响,稳定度不高。

MSP430G2211/MSP430G2231微控制器芯片的管脚6为时钟信号SMCLK的输出管脚,时钟信号SMCLK的时钟源可以选择DCO,且这个选择为复位以后默认的。

下面程序为利用微控制器芯片的管脚6输出时钟信号SMCLK来数控振荡器(DCO)工作频率的测试程序。

测试程序

//程序名称:

smsclk_dco.c

//程序功能:

输出SMCLK时钟信号

//时钟信号输出端口管脚6

#include//包含名称定义和对应地址或数据的头函数

voidset_dcoclk(void);//声明系统时钟DCO设置函数

intmain(void)//主函数

{

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

//SMCLK时钟信号输出管脚设置

P1SEL|=BIT4;//设置P1.4为外围模块端口

P1DIR|=BIT4;//设置P1.4为输出口

set_dcoclk();//设置系统时钟DCO

while

(1)//重复执行

{}

}

voidset_dcoclk(void)//系统时钟DCO设置函数

{

BCSCTL1&=~RSEL3;

BCSCTL1&=~RSEL2;

BCSCTL1&=~RSEL1;

BCSCTL1&=~RSEL0;

DCOCTL&=~DCO2;

DCOCTL&=~DCO1;

DCOCTL|=DCO0;

}

表1DCO测量数据(测试仪器:

RIGOLDS5062MA示波器)

RSEL

DCO

MOD

输出方波频率(Hz)

系统时钟频率(Hz)

0111(复位值)

011(复位值)

00000(复位值)

7.357k~7.359k

1177k

0000

001

00000(复位值)

674~675

107.8k~108.0k

0000

011

00000(复位值)

774~775

123.8k~124.0k

0000

111

00000(复位值)

1.103k~1.104k

176.5k~176.6k

0001

111

00000(复位值)

1.363k~1.364k

218.1k~218.2k

0011

111

00000(复位值)

2.697k~2.698k

431.5k~431.7k

0111

111

00000(复位值)

10.356k~10.357k

1657.0k~1657.1k

1111

111

00000(复位值)

RSEL3置位将导致芯片不工作

表2DCO测量数据(测试仪器:

TektronixTDS1012示波器)

RSEL

DCO

MOD

输出方波频率(Hz)

系统时钟频率(Hz)

0000

000

00000(复位值)

633

101k

0000

001

00000(复位值)

674

108k

0000

011

00000(复位值)

775

124k

0000

111

00000(复位值)

1.10k

176k

0001

111

00000(复位值)

1.36k

218k

0011

111

00000(复位值)

2.70k

432k

0111

111

00000(复位值)

10.3k

1650k

1111

111

00000(复位值)

138k

22.1M

注:

测量采用TILaunchPad开发板。

目标芯片MSP430F2002。

采用开发板的目的是获得一个稳定的工作电压。

TektronixTDS1012示波器提供6位有效数字频率测量结果。

RIGOLDS5062MA示波器的频率分辨率为1Hz。

输出方波信号只具有3位稳定的测量结果。

RSEL=1111,DCO=111时,有时工作不正常。

22.1MHz已经超出最高时钟频率(16MHz)。

■高频振荡器(XT2)频率测量

自制开发板。

目标芯片MSP430F135。

测试仪器:

TektronixTDS1012示波器。

XT2CLK晶体选择4MHz。

输出方波频率25.0001kHz,换算出系统时钟频率4000.02kHz。

6位数字非常稳定。

■MSP430F20xx和MSP430G2xx1的其它时钟信号源

MSP430F20xx和MSP430G2xx1还支持内部低频振荡器(VLO)、低频振荡器(LFXT1)(32864Hz晶体),但是采用面包板组装电路时没有调试通过。

3.3定时器A(Timer_A)

3.3.1定时器A(Timer_A)介绍

定时器A(Timer_A)是MSP430芯片提供的一个片内外围模块。

该模块的核心是一个16位计数器,还具有捕捉/比较功能、脉冲宽度调制(PWM)输出功能以及对于计数溢出和捕捉/比较条件的中断功能。

数字信号的频率/周期测量只需要使用16位计数器部分,这部分的组成方框图如图3.2所示。

图3.3定时器A(Timer_A)16位计数器组成方框图

16位计数器部分为图中的“TimerBlock”部分。

“CCR0”、“CCR1”和“CCR2”为定时器A的3个捕捉/比较器模块,它们用来实现除计数功能以外的其它功能。

计数器具有4种计数信号,它们可以由软件进行选择。

计数信号分为2类。

第一类包括MSP430的内部时钟信号SMCLK和ACLK。

在被测信号的控制下,对这两种频率已知的信号进行计数可以获得被测信号的周期。

第二类包括通过管脚输入的外部信号TACLK和INCLK。

在一个时间延迟函数的控制下,对其进行计数可以获得被测信号的频率。

进入16位计数器计数之前,信号可以被分频以获得较大的计数范围。

分频系数可以由软件进行选择,分频系数可以是1、2、4或者8。

信号“TACLR”用于对计数器的内容进行清零。

需要注意,这时也将分频系数复位为1。

计数器的内容进行清零也可以通过向寄存器TAR写0来实现,这时将不影响分频系数的设定。

计数器的内容能够通过读寄存器TAR来实现。

当产生计数溢出,中断标志TAIFG将被置位。

3.3.2定时器A(Timer_A)涉及计数功能的寄存器

■定时器A寄存器(TAR)

15~0

位名称

TARx

操作方式

rw

复位值

0

TARx:

TAR是定时器A的计数器。

Bit15~Bit0

■定时器A控制寄存器(TACTL)

15~10

9、8

7、6

5、4

3

2

1

0

位名称

Unused

TASSELx

IDx

MCx

Unused

TACLR

TAIE

TAIFG

操作方式

rw

rw

rw

rw

rw

rw

rw

rw

复位值

000000

00

00

00

0

0

0

0

TASSELx:

定时器A时钟源选择

Bit9Bit8

TASSEL1TASSEL0

00TACLK

01ACLK

10SMCLK

11INCLK

IDx:

计数时钟分频系数选择

Bit7Bit6

ID1ID0

001分频

012分频

104分频

118分频

MCx:

定时器A工作模式选择

Bit5Bit4

MC1MC0

00停止

01加模式。

TAR的内容重复从0到比较寄存器TACCR0的内

容计数。

10连续模式。

TAR的内容重复从0到0xFFFF计数。

11加减模式。

TAR的内容重复从0加到比较寄存器TACCR0

的内容,再减到0计数。

TACLR:

定时器A清零位。

该位置位将使寄存器TAR、寄存器TACTL的位IDx、MCx清

1.该位置位以后自动清零,因此读该位总为0。

TAIE:

定时器A中断使能位。

该位为1,使能;为0,不使能。

TAIFG:

定时器A中断标志位。

该位为1,有中断申请;为0,无中断申请。

3.4数字信号频率测量程序

intmain(void)

{

unsignedintdata_tar;//声明计数数据变量

unsignedchardata_seg7_2,data_seg7_1,data_seg7_0;

//声明每一位数据显示变量

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

//数码管显示电路涉及的管脚设置

P1SEL&=~BIT7;//设置P1.7为数字输入/输出口

P1DIR|=BIT7;//设置P1.7为输出口

P1SEL&=~BIT6;//设置P1.6为数字输入/输出口

P1DIR|=BIT6;//设置P1.6为输出口

//被测数字信号输入管脚设置

P1SEL|=BIT0;//设置P1.0为TimerA外部计数信号输入口

P1DIR&=~BIT0;//设置P1.0为输入口

//TimerA配置

TACTL=TASSEL_0;//定时器A时钟源选择:

TACLK

TACTL=ID_0;//计数时钟分频系数选择:

1

while

(1)

{

TAR=0x0000;//定时器A计数寄存器内容清零

TACTL=MC_2;//定时器A工作模式选择:

连续模式

delay();//产生1s计数闸门

TACTL=MC_0;//定时器A工作模式选择:

停止模式

data_tar=TAR;//读定时器A计数寄存器内容

data_seg7_2=data_tar/100;//产生百位显示数据

data_tar=data_tar%100;//产生低2位数据

data_seg7_1=data_tar/10;//产生十位显示数据

data_seg7_0=data_tar%10;//产生个位显示数据

//调用驱动3位7段共阴极数码管的仿真同步串行数据接口驱动函数

seg7_3msf(data_seg7_2,data_seg7_1,data_seg7_0);

delay();//延时

}

}

程序中使用时间延迟函数

delay();

产生1s的频率测量计数闸门。

该延迟函数是利用循环语句来实现时间延迟。

更改循环次数就可以改变延迟时间。

计数闸门的时间可以通过实验的方法进行调整。

如果准备产生1s的计数闸门,由于当前只有3位显示电路,这时被测量数字信号的范围为100~999Hz。

在这个范围内由信号产生器是出一个频率,例如345Hz,如果测量数据大于它,降低闸门时间;如果测量数据小于它,增加闸门时间。

更改闸门时间可以改变信号频率的测量范围,例如产生100ms的计数闸门,这时被测量数字信号的范围为1.00~9.99kHz。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1