<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM學(xué)習《三》PLL時(shí)鐘配置——讓心臟跳起來(lái)!

ARM學(xué)習《三》PLL時(shí)鐘配置——讓心臟跳起來(lái)!

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
在初始化系統時(shí)ARM比51多了一項重要的工作,那就是時(shí)鐘配置。為什么ARM要進(jìn)行繁瑣的時(shí)鐘配置,原因之一就是在A(yíng)RM構架中,系統充分考慮到了每種外設的功耗問(wèn)題,有的外設在我們的工程中有時(shí)根本用不著(zhù),閑著(zhù)會(huì )浪費功耗(就像屋里沒(méi)人亮著(zhù)燈一樣)。ARM干脆位每個(gè)外設設置一些寄存器,這些寄存器可以管理這些外設的時(shí)鐘,在這里我們可以設置每種外設的時(shí)鐘大?。ɑ蛘哒f(shuō)時(shí)鐘分頻),不用的時(shí)候我們可以不開(kāi)啟這些時(shí)鐘。

在默認狀態(tài)下(就是不做任何設置),每種外設的時(shí)鐘都是關(guān)閉的。所以在系統初始化的時(shí)候我們要進(jìn)行時(shí)鐘設置,外設(如定時(shí)器)才能正常的工作。在這里我拿LM3S8962開(kāi)發(fā)板為例進(jìn)行時(shí)鐘配置,其實(shí)時(shí)鐘配置說(shuō)白了就是對系統控制的某些寄存器進(jìn)行設置。在LM3S系列的MCU中關(guān)鍵是對RCC運行模式時(shí)鐘配置寄存器進(jìn)行配置,先來(lái)看一下頭文件對RCC的定義:

本文引用地址:http://dyxdggzs.com/article/201611/318956.htm

#defineSYSCTL_RCC0x400FE060//運行模式時(shí)鐘配置寄存器地址

注意SYSCTL_RCC還不算是地址,要將SYSCTL_RCC轉化成可任意操作的寄存器,在上篇文章中我說(shuō)了,是這樣來(lái)轉換的:

#defineHWREG(x)(*((volatile unsigned long *)(x)))

為什么是這樣,上篇文章就已經(jīng)解釋過(guò)了,不多說(shuō)。

下面的一些預定義是RCC寄存器中每個(gè)位的值和名稱(chēng),這些不是地址,只是一些數值,每一位或者每幾位的數值。

#define SYSCTL_RCC_ACG0x08000000// Automatic clock gating

#define SYSCTL_RCC_SYSDIV_M0x07800000// System Clock Divisor.

#define SYSCTL_RCC_USESYSDIV0x00400000// Enable System Clock Divider.

#define SYSCTL_RCC_PWRDN0x00002000// PLL power down

#define SYSCTL_RCC_BYPASS0x00000800// PLL bypass

#define SYSCTL_RCC_XTAL_M0x000007C0//Crystalattached to main osc

#define SYSCTL_RCC_OSCSRC_M0x00000030// Oscillator input select

#define SYSCTL_RCC_OSCSRC_MAIN0x00000000// Use the main oscillator

#define SYSCTL_RCC_IOSCDIS0x00000002// Internal oscillator disable

#define SYSCTL_RCC_MOSCDIS0x00000001// Main oscillator disable

如:#define SYSCTL_RCC_ACG0x08000000的意思是把RCC寄存器的第27位置一,該位叫做時(shí)鐘門(mén)空位。

下面寫(xiě)設置時(shí)鐘函數:

void SysCtlClockSet( ) //設置系統時(shí)鐘

{

unsigned longulRCC=0;

ulRCC |= SYSCTL_RCC_BYPASS;//旁路PLL

ulRCC |= SYSCTL_RCC_USESYSDIV; //使能系統分頻器

ulRCC|=SYSCTL_RCC_IOSCDIS; //內部時(shí)鐘禁能

ulRCC&=~(SYSCTL_RCC_OSCSRC_M);//振蕩清零

ulRCC &= ~(SYSCTL_RCC_XTAL_M );//晶振選擇位清零

ulRCC|=SYSCTL_RCC_PWRDN;//PLL掉電

ulRCC|=SYSCTL_SYSDIV_4;//選擇4分頻

ulRCC|=SYSCTL_USE_PLL;//用PLL

ulRCC|=SYSCTL_OSC_MAIN;//主振蕩器

ulRCC|=SYSCTL_XTAL_8MHZ ; //晶振設置8M

HWREG(SYSCTL_MISC) = SYSCTL_INT_PLL_LOCK; //屏蔽PLL中斷

HWREG(SYSCTL_RCC) = ulRCC; //將設置值ulRCC寫(xiě)入RCC寄存器

while((HWREG(SYSCTL_RIS) & SYSCTL_INT_PLL_LOCK)) //等待PLL有效

{break;}

ulRCC &= ~(SYSCTL_RCC_BYPASS); //使能PLL

HWREG(SYSCTL_RCC) = ulRCC; //設置成功

}

上面的函數就是對RCC寄存器的每一項進(jìn)行設置,在51中一個(gè)賦值語(yǔ)句完事,在這里要這么復雜,因為ARM的寄存器以及內容實(shí)在是太多了。ARM的心臟跳動(dòng)起來(lái)了,就可以做其他活了,下次我要操作IO口了。




評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>