在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            LPC1114時(shí)鐘配置

            作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
            要讓LPC1114正常工作,首先要對(duì)它的時(shí)鐘源進(jìn)行配置。LPC1114的最高工作頻率為50MHz,因此給它的主時(shí)鐘頻率最大不能超過(guò)50MHz。實(shí)際上,通常都是使用頻率較低的晶振,以降低外部電磁干擾,然后再通過(guò)內(nèi)部倍頻的方式把主時(shí)鐘頻率提高。根據(jù)管方手冊(cè)給出的數(shù)據(jù),外部晶振的頻率范圍是1MHz~25MHz,一般情況下使用12MHz晶振,然后內(nèi)部進(jìn)行4倍頻,主時(shí)鐘工作頻率為48MHz。

            要對(duì)LPC1114的時(shí)鐘進(jìn)行配置,必須要了解它的時(shí)鐘結(jié)構(gòu),先來(lái)看一下它的時(shí)鐘結(jié)構(gòu)圖,如下圖所示。

            本文引用地址:http://www.biyoush.com/article/201611/316320.htm

            首先來(lái)看主時(shí)鐘,給主時(shí)鐘(main clock)提供選擇有4個(gè)源,分別是:內(nèi)部RC振蕩器、未倍頻之前的PLL時(shí)鐘、內(nèi)部看門狗時(shí)鐘、經(jīng)過(guò)PLL倍頻之后的時(shí)鐘。由對(duì)主時(shí)鐘源選擇寄存器(MAINCLKSEL)的操作來(lái)進(jìn)行選擇,同一時(shí)刻只能選擇一種時(shí)鐘做為主時(shí)鐘。下面就給出MAINCLKSEL寄存器的位結(jié)構(gòu)(要注意,因?yàn)長(zhǎng)PC1114是32位的,所以所有的寄存器都是32位的),如下表所示。

            符號(hào)

            描述

            復(fù)位值

            1∶0

            SEL

            00

            內(nèi)部RC振蕩器

            0x00

            01

            PLL倍頻之前的時(shí)鐘

            10

            內(nèi)部看門狗時(shí)鐘

            11

            PLL倍頻之后的時(shí)鐘

            31∶2

            -

            -

            保留

            0x00

            前面說(shuō)過(guò),一般情況下CPU內(nèi)部都是要進(jìn)行倍頻的,因此大多數(shù)時(shí)候該寄存器的值都會(huì)選擇11(0x03),執(zhí)行語(yǔ)句“SYSCON->MAINCLKSEL=0x00000003”就可以了。

            接下來(lái)看系統(tǒng)PLL時(shí)鐘,PLL即是頻率鎖相環(huán)的意思,PLL的功能很多,有興趣的可自行參考其它資料,這里主要利用它來(lái)實(shí)現(xiàn)倍頻的功能。從上圖中可以看出,供給PLL選擇的有2個(gè)源,一個(gè)是片內(nèi)RC振蕩器,另一個(gè)是晶體振蕩器。由對(duì)系統(tǒng)PLL時(shí)鐘選擇寄存器(SYSPLLCLKSEL)的操作來(lái)進(jìn)行選擇,同一時(shí)刻只能選擇一種時(shí)鐘做為輸入時(shí)鐘。下面給出SYSPLLCLKSEL寄存器的位結(jié)構(gòu),如下表所示。

            符號(hào)

            描述

            復(fù)位值

            1∶0

            SEL

            00

            內(nèi)部RC振蕩器

            0x00

            01

            晶體振蕩器

            10

            保留

            11

            保留

            31∶2

            -

            -

            保留

            0x00

            一般情況下,為了提高時(shí)鐘精度都會(huì)選擇01(0x01),以選擇外部晶體振蕩器做為時(shí)鐘輸入。執(zhí)行語(yǔ)句“SYSCON->SYSPLLCLKSEL=0x00000001”就可以了。

            在時(shí)鐘結(jié)構(gòu)圖中還可以看出,主時(shí)鐘分成6路供給不同的模塊。其中一路主時(shí)鐘經(jīng)過(guò)系統(tǒng)時(shí)鐘分頻器(SYSAHBCLKDIV)后做為系統(tǒng)時(shí)鐘,提供給AHB。在LPC1114中,只有通用輸入輸出端口(GPIO)需要AHB。為了給不同速度的模塊(如內(nèi)核、存儲(chǔ)器、APB等)提供時(shí)鐘,需要對(duì)SYSAHBCLKDIV寄存器進(jìn)行操作,以對(duì)主時(shí)鐘進(jìn)行分頻。下面給出SYSAHBCLKDIV寄存器的位結(jié)構(gòu),如下表所示。

            符號(hào)

            描述

            復(fù)位值

            7∶0

            DIV

            00000000

            關(guān)閉系統(tǒng)時(shí)鐘

            0x01

            00000001

            1

            00000010

            2

            ……

            ……

            11111111

            255

            31∶8

            -

            -

            保留

            0x00

            從表中可以看出,分頻的最大值是255分頻。一般情況下,系統(tǒng)的默認(rèn)值是1,即為AHB提供不分頻的主時(shí)鐘,也可執(zhí)行語(yǔ)句“SYSCON->SYSAHBCLKDIV=0x00000001”來(lái)實(shí)現(xiàn)。剩余5個(gè)模塊(SPI0、UART、SPI1、WDT、CLKOUT)的時(shí)鐘也像系統(tǒng)時(shí)鐘一樣由主時(shí)鐘來(lái)分頻,只不過(guò)它們默認(rèn)的分頻值為0,即默認(rèn)不提供時(shí)鐘,也就是說(shuō)剩余的5個(gè)模塊默認(rèn)狀態(tài)下不工作,需要的時(shí)候再通過(guò)程序來(lái)打開(kāi),以降低功耗

            由上述可見(jiàn),居于Cotex-M0內(nèi)核的CPU由于強(qiáng)化了時(shí)鐘配置,所以在一般情況下要使用該類型的CPU,首要的任務(wù)就是為其配置正確的時(shí)鐘。下面就來(lái)討論一下如何通過(guò)程序來(lái)配置LPC1114的時(shí)鐘。

            先給出一個(gè)時(shí)鐘初始化的函數(shù),如下:

            void SysCLK_config(void)

            {

            uint8_t i;

            LPC_SYSCON->PDRUNCFG &= ~(1 << 5); //給系統(tǒng)振蕩器上電

            LPC_SYSCON->SYSOSCCTRL = 0x00000000; //系統(tǒng)振蕩器未旁路,1~12MHz輸入

            for (i = 0; i < 200; i++) __nop(); //延時(shí)等待振蕩器穩(wěn)定

            LPC_SYSCON->SYSPLLCLKSEL = 0x00000001; //PLL輸入選擇外部晶體振蕩

            LPC_SYSCON->SYSPLLCLKUEN = 0x00;

            LPC_SYSCON->SYSPLLCLKUEN = 0x01; //先寫(xiě)0后寫(xiě)1更新時(shí)鐘源

            while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01)); //等待更新完成

            LPC_SYSCON->SYSPLLCTRL = 0x00000013; //M=4、P=2,倍頻后的時(shí)鐘為48MHz

            LPC_SYSCON->PDRUNCFG &= ~(1 << 7); //給PLL上電

            while (!(LPC_SYSCON->SYSPLLSTAT & 0x01)); //等待PLL鎖定

            LPC_SYSCON->MAINCLKSEL = 0x00000003; //主時(shí)鐘選擇PLL倍頻后的時(shí)鐘

            LPC_SYSCON->MAINCLKUEN = 0x00;

            LPC_SYSCON->MAINCLKUEN = 0x01; //先寫(xiě)0后寫(xiě)1更新時(shí)鐘源

            while (!(LPC_SYSCON->MAINCLKUEN & 0x01)); //等待更新完成

            LPC_SYSCON->SYSAHBCLKDIV = 0x00000001; //AHB為1分頻,AHB時(shí)鐘為48MHz

            LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); //使能GPIO時(shí)鐘

            }

            如果使用的是12MHz的外部晶振,該函數(shù)執(zhí)行完后,LPC1114的時(shí)鐘被設(shè)置成為主時(shí)鐘48MHz,AHB時(shí)鐘48MHz,輸入輸出端口(GPIO)時(shí)鐘使能的狀態(tài)。

            在上述程序中,PLL輸入選擇寄存器(SYSPLLCLKSEL),主時(shí)鐘選擇寄存器(MAINCLKSEL),AHB分頻選擇寄存器(SYSAHBCLKDIV)均在前面討論過(guò),下面來(lái)看一下沒(méi)討論過(guò)的寄存器。先看“掉電配置寄存器(PDRUNCFG)”,下表是它的位結(jié)構(gòu)。

            符號(hào)

            描述

            復(fù)位值

            0

            IRCOUT_PD

            (IRC振蕩器輸出掉電)

            1

            掉電

            0

            0

            上電

            1

            IRC_PD

            (IRC振蕩器掉電)

            1

            掉電

            0

            0

            上電

            2

            FLASH_PD

            (Flash掉電)

            1

            掉電

            0

            0

            上電

            3

            BOD_PD

            (BOD掉電)

            1

            掉電

            0

            0

            上電

            4

            ADC_PD

            (ADC掉電)

            1

            掉電

            1

            0

            上電

            5

            SYSOSC_PD

            (系統(tǒng)振蕩器掉電)

            1

            掉電

            1

            0

            上電

            6

            WDTOSC_PD

            (看門狗振蕩器掉電)

            1

            掉電

            1

            0

            上電

            7

            SYSPLL_PD

            (系統(tǒng)PLL掉電)

            1

            掉電

            1

            0

            上電

            8

            -

            -

            保留

            1

            9

            -

            0

            保留,置0

            0

            10

            -

            -

            保留

            1

            11

            -

            1

            保留,置1

            1

            12

            -

            0

            保留,置0

            0

            15∶13

            -

            -

            保留

            1

            31∶16

            -

            -

            保留

            從表中可以看出,系統(tǒng)振蕩器和系統(tǒng)PLL在默認(rèn)情況下是掉電的,也就是說(shuō)默認(rèn)它們不處于工作狀態(tài),要讓它們工作就必須給它們置0上電。所以要通過(guò)執(zhí)行語(yǔ)句“SYSCON->PDRUNCFG &= ~(1 << 5)”和“SYSCON->PDRUNCFG &= ~(1 << 7)”來(lái)把SYSOSC和SYSPLL置0。

            接下來(lái)看“系統(tǒng)振蕩器控制寄存器(SYSOSCCTRL)”,下表是它的位結(jié)構(gòu)。

            符號(hào)

            描述

            復(fù)位值

            0

            BYPASS

            (旁路系統(tǒng)振蕩器)

            0

            未被旁路

            0

            1

            被旁路

            1

            FREQRANGE

            (低功耗振蕩器確定頻率范圍)

            0

            1~20MHz

            0

            1

            15~25MHz

            31∶2

            -

            -

            保留

            0

            從表中可以看出,如果要讓系統(tǒng)振蕩器工作,則其第0位就應(yīng)該選擇0,即不被旁路,只有在從外部直接輸入振蕩信號(hào)的情況下才會(huì)選擇旁路(比如使用有源晶振)。第1位用于選擇外部晶振的頻率范圍,使用12MHz時(shí)該位選擇0。執(zhí)行語(yǔ)句“SYSCON->SYSOSCCTRL = 0x00000000”就可以實(shí)現(xiàn)上述配置,但實(shí)際上復(fù)位后的值就是該配置,也可不執(zhí)行該語(yǔ)句。

            從上述程序中還可以看出,在配置了時(shí)鐘后(無(wú)論是PLL時(shí)鐘還是主時(shí)鐘),都需要更新一下才能正常工作。而更新的操作則根據(jù)管方手冊(cè),必須要給相應(yīng)的允許寄存器“toggle”一下(即先向其寫(xiě)0再緊接著寫(xiě)1)。“系統(tǒng)PLL時(shí)鐘源更新允許寄存器(SYSPLLCLKUEN)”和“主時(shí)鐘源更新允許寄存器(MAINCLKUEN)”的位結(jié)構(gòu)是一樣的,下表是MAINCLKUEN寄存器的位結(jié)構(gòu)。

            符號(hào)

            描述

            復(fù)位值

            0

            ENA

            (允許主時(shí)鐘源更新)

            0

            無(wú)變化

            0

            1

            更新時(shí)鐘源

            31∶1

            -

            -

            保留

            0

            在主時(shí)鐘源及PLL時(shí)鐘源更改后,要緊接著及時(shí)更新相應(yīng)的允許寄存器才能讓其正常工作。此外還要注意一點(diǎn),“toggle”后需要查詢相應(yīng)的允許寄存器是否已更新,若沒(méi)有就需要等待直到其更新為止(例如在更新PLL時(shí)鐘源更新允許寄存器SYSPLLCLKUEN后要執(zhí)行語(yǔ)句“while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01));”,以等待其更新完成)。

            接下來(lái)看一下PLL的配置,要讓PLL對(duì)輸入時(shí)鐘進(jìn)行倍頻或分頻,就要配置“系統(tǒng)倍頻控制寄存器(SYSPLLCTRL)”,下表是該寄存器的位結(jié)構(gòu)。

            符號(hào)

            描述

            復(fù)位值

            4∶0

            MSEL

            (反饋分頻器的值,

            分頻器的值M是MSEL+1)

            00000

            M=1

            0x00

            ……

            ……

            11111

            M=32

            6∶5

            PSEL

            (后分頻器的值,

            分頻器的值為2×P)

            00

            P=1

            0x00

            01

            P=2

            10

            P=4

            11

            P=8

            31∶7

            -

            -

            保留,不能寫(xiě)1

            0x00

            PLL的輸出頻率要符合下面的公式。

            Fclkout為PLL的輸出頻率,F(xiàn)clkin為外部晶振的頻率,F(xiàn)CCO的值必須在156MHz ~320MHz之間,M為倍頻的倍數(shù),P值要符合要求。若以12MHz的晶振做為輸入,系統(tǒng)主時(shí)鐘要為48MHz,則M=4(MSEL=0011),P的值只能取2(PSEL=01)才能滿足公式要求。因此寄存器SYSPLLCTRL的值應(yīng)該為10011(0x13),所以要配置此項(xiàng)只需要執(zhí)行語(yǔ)句“SYSCON->SYSPLLCTRL = 0x00000013”就可以了。

            在改變了PLL的倍頻之后,需要查詢“倍頻狀態(tài)寄存器(SYSPLLSTAT)”,看PLL鎖定了沒(méi)有,若沒(méi)有就需要等待直到其鎖定為止(執(zhí)行語(yǔ)句“while (!(LPC_SYSCON->SYSPLLSTAT & 0x01));”)。下面是“倍頻狀態(tài)寄存器(SYSPLLSTAT)”的位結(jié)構(gòu)。

            符號(hào)

            描述

            復(fù)位值

            0

            LOCK

            (PLL鎖定狀態(tài))

            0

            未鎖定

            0

            1

            已鎖定

            31∶1

            -

            -

            保留

            0

            CPU要對(duì)GPIO進(jìn)行操作,就必須給GPIO時(shí)鐘信號(hào),即需要使能GPIO的時(shí)鐘。在默認(rèn)情況下GPIO時(shí)鐘是允許的,也可以對(duì)“系統(tǒng)AHB時(shí)鐘控制寄存器(SYSAHBCLKCTRL)”中相應(yīng)的位進(jìn)行操作來(lái)選擇允許時(shí)鐘,下面是該寄存器的位結(jié)構(gòu)。

            符號(hào)

            描述

            復(fù)位值

            0

            SYS

            (允許AHB時(shí)鐘,只讀)

            0

            保留

            1

            1

            允許

            1

            ROM

            (允許ROM時(shí)鐘)

            0

            禁止

            1

            1

            允許

            2

            RAM

            (允許RAM時(shí)鐘)

            0

            禁止

            1

            1

            允許

            3

            FLASHREG

            (允許flash寄存器接口時(shí)鐘)

            0

            禁止

            1

            1

            允許

            4

            FLASHARRAY

            (允許flash陣列存取時(shí)鐘)

            0

            禁止

            1

            1

            允許

            5

            I2C

            (允許I2C時(shí)鐘)

            0

            禁止

            0

            1

            允許

            6

            GPIO

            (允許GPIO時(shí)鐘)

            0

            禁止

            1

            1

            允許

            7

            CT16B0

            (允許16位計(jì)數(shù)/定時(shí)器0時(shí)鐘)

            0

            禁止

            0

            1

            允許

            8

            CT16B1

            (允許16位計(jì)數(shù)/定時(shí)器1時(shí)鐘)

            0

            禁止

            0

            1

            允許

            9

            CT32B0

            (允許32位計(jì)數(shù)/定時(shí)器0時(shí)鐘)

            0

            禁止

            0

            1

            允許

            10

            CT32B1

            (允許32位計(jì)數(shù)/定時(shí)器1時(shí)鐘)

            0

            禁止

            0

            1

            允許

            11

            SSP0

            (允許SPI0時(shí)鐘)

            0

            禁止

            1

            1

            允許

            12

            UART

            (允許UART時(shí)鐘)

            0

            禁止

            0

            1

            允許

            13

            ADC

            (允許ADC時(shí)鐘)

            0

            禁止

            0

            1

            允許

            14

            -

            -

            保留

            0

            15

            WDT

            (允許WDT時(shí)鐘)

            0

            禁止

            0

            1

            允許

            16

            IOCON

            (允許IO配置模塊時(shí)鐘)

            0

            禁止

            0

            1

            允許

            17

            -

            -

            保留

            0

            18

            SSP1

            (允許SPI1時(shí)鐘)

            0

            禁止

            0

            1

            允許

            31∶19

            -

            -

            保留

            0x00

            從表中可以看出,第6項(xiàng)就是“通用輸入輸出端口”的時(shí)鐘配置項(xiàng),執(zhí)行語(yǔ)句“SYSCON->SYSAHBCLKCTRL |= (1<<6)”就可以開(kāi)啟GPIO的時(shí)鐘。在打開(kāi)了GPIO的時(shí)鐘后,就可以使用P0~P3端口了。

            上述的時(shí)鐘配置程序是最基本的,也是必須的,因此在任何程序開(kāi)始前,都應(yīng)該先調(diào)用該時(shí)鐘配置函數(shù),以對(duì)LPC1114進(jìn)行基本的時(shí)鐘配置,為后續(xù)程序提供保障。



            關(guān)鍵詞: LPC1114時(shí)鐘配

            評(píng)論


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

            關(guān)閉