新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430內(nèi)部時(shí)鐘(DCO)頻率測量

MSP430內(nèi)部時(shí)鐘(DCO)頻率測量

作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
時(shí)鐘電路——數(shù)字振蕩器(DCO

本文引用地址:http://m.butianyuan.cn/article/201611/316441.htm

電路按信號(hào)形式可分為數(shù)字和模擬。

數(shù)字電路處理的是數(shù)字信號(hào)。數(shù)字電路又可分為組合邏輯電路與時(shí)序邏輯電路。時(shí)序電路可以完成組合電路的功能,反之則不成立。兩者的區(qū)別是時(shí)序電路與信號(hào)的時(shí)間有關(guān),即有一個(gè)時(shí)鐘信號(hào)。

MSP430芯片中有3個(gè)時(shí)鐘源,內(nèi)部晶體振蕩器(DCO)、外部低速時(shí)鐘源(XT1)、外部高速時(shí)鐘源(XT2)。DCO的工作可以不要外部不要外部器件的支持,因此降低了電路的復(fù)雜程度,但是它是基于RC的工作原理,工作頻率不穩(wěn)定。XT1、XT2需要外接一個(gè)晶振,所以工作頻率穩(wěn)定。采用兩個(gè)外部晶振是讓一個(gè)工作在高頻一個(gè)工作在低頻,高頻晶體可以使程序執(zhí)行速度快,低速晶體使芯片功耗降低。

//程序名稱: Clock_DCO.C

//程序功能: 產(chǎn)生周期為 160 個(gè)系統(tǒng)時(shí)鐘周期的方波信號(hào),通過測量方波信號(hào)頻率獲得 DCO 時(shí)鐘頻率

#include 430x14x.h> //包含名稱定義和對(duì)應(yīng)地址或數(shù)據(jù)的頭函數(shù)

void int_clk(void); //聲明系統(tǒng)時(shí)鐘初始化函數(shù)

void delay(void); //聲明延時(shí)函數(shù)

int main(void) //主函數(shù)

{

int_clk( ); //系統(tǒng)時(shí)鐘初始化

WDTCTL=WDTPW+WDTHOLD; //關(guān)閉看門狗

//看門狗控制寄存器 WDTCTL 地址以及密碼位 WDTPW 內(nèi)容和

//使能位 WDTHOLD 內(nèi)容在頭函數(shù) MSP430x14x.h 定義

//WDTPW 內(nèi)容加 WDTHOLD 內(nèi)容向 WDTCTL 賦值

P3SEL=0x00; //設(shè)置 P3 端口為數(shù)字輸入 / 輸出口

P3DIR=0xff; //設(shè)置 P3 端口為輸出口

while(1) //重復(fù)執(zhí)行

{

//產(chǎn)生周期為 160 個(gè)系統(tǒng)時(shí)鐘周期的方波

P3OUT&=~BIT0; // P3.0 輸出低電平

delay( ); //延時(shí) 75 個(gè)系統(tǒng)時(shí)鐘周期,保持方波信號(hào)低電平

P3OUT|=BIT0; // P3.0 輸出高電平

delay( ); //延時(shí) 75 個(gè)系統(tǒng)時(shí)鐘周期,保持方波信號(hào)高電平

}

}

void delay(void) //延時(shí)函數(shù)

{

unsigned char i; //聲明實(shí)現(xiàn)延時(shí)的整型數(shù)據(jù)類型循環(huán)變量

for(i=0; i<10; i++) //利用循環(huán)實(shí)現(xiàn)延時(shí)調(diào)整

{

_NOP( ); //產(chǎn)生一個(gè)MSP430系統(tǒng)時(shí)鐘周期的延時(shí)

}

}

void int_clk(void) //系統(tǒng)時(shí)鐘初始化函數(shù)

{

unsigned char i; //聲明實(shí)現(xiàn)延時(shí)的循環(huán)變量

DCOCTL = 0x00; //設(shè)置數(shù)字控制振蕩器的工作頻率***

BCSCTL1 = 0x80; //關(guān)閉 XT2

//設(shè)置數(shù)字控制振蕩器的工作頻率***

BCSCTL2&=~DCOR; //選擇 MCLK 時(shí)鐘源為 DCOCLK,分頻比 1

//選擇 SMCLK 時(shí)鐘源為 DCOCLK,分頻比 1

//選擇芯片內(nèi)部 DCO 電阻

do

{

IFG1&=~OFIFG; //清除振蕩器錯(cuò)誤標(biāo)志

for(i=0; i<100; i++) //利用循環(huán)實(shí)現(xiàn)延時(shí)調(diào)整

{

_NOP( ); //產(chǎn)生一個(gè)MSP430系統(tǒng)時(shí)鐘周期的延時(shí)

}

}

while((IFG1 & OFIFG)!=0); //如果標(biāo)志為1,繼續(xù)等待

IFG1&=~OFIFG; //清除振蕩器錯(cuò)誤標(biāo)志

}



評(píng)論


技術(shù)專區(qū)

關(guān)閉