ARM學(xué)習《三》PLL時(shí)鐘配置——讓心臟跳起來(lái)!
在默認狀態(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#define
注意SYSCTL_RCC還不算是地址,要將SYSCTL_RCC轉化成可任意操作的寄存器,在上篇文章中我說(shuō)了,是這樣來(lái)轉換的:
#define
為什么是這樣,上篇文章就已經(jīng)解釋過(guò)了,不多說(shuō)。
下面的一些預定義是RCC寄存器中每個(gè)位的值和名稱(chēng),這些不是地址,只是一些數值,每一位或者每幾位的數值。
#define SYSCTL_RCC_ACG
#define SYSCTL_RCC_SYSDIV_M
#define SYSCTL_RCC_USESYSDIV
#define SYSCTL_RCC_PWRDN
#define SYSCTL_RCC_BYPASS
#define SYSCTL_RCC_XTAL_M
#define SYSCTL_RCC_OSCSRC_M
#define SYSCTL_RCC_OSCSRC_MAIN
#define SYSCTL_RCC_IOSCDIS
#define SYSCTL_RCC_MOSCDIS
如:#define SYSCTL_RCC_ACG
下面寫(xiě)設置時(shí)鐘函數:
void SysCtlClockSet( ) //設置系統時(shí)鐘
{
unsigned long
ulRCC |= SYSCTL_RCC_BYPASS;
ulRCC |= SYSCTL_RCC_USESYSDIV; //使能系統分頻器
ulRCC|=SYSCTL_RCC_IOSCDIS; //內部時(shí)鐘禁能
ulRCC&=~(SYSCTL_RCC_OSCSRC_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中斷
while((HWREG(SYSCTL_RIS) & SYSCTL_INT_PLL_LOCK)) //等待PLL有效
ulRCC &= ~(SYSCTL_RCC_BYPASS); //使能PLL
HWREG(SYSCTL_RCC) = ulRCC; //設置成功
}
上面的函數就是對RCC寄存器的每一項進(jìn)行設置,在51中一個(gè)賦值語(yǔ)句完事,在這里要這么復雜,因為ARM的寄存器以及內容實(shí)在是太多了。ARM的心臟跳動(dòng)起來(lái)了,就可以做其他活了,下次我要操作IO口了。
評論