新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 32位單片機(jī)LPC11C14學(xué)習(xí)

32位單片機(jī)LPC11C14學(xué)習(xí)

作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
功能:(設(shè)置GPIO口方向),參數(shù)(端口號,位,輸入或輸出(0入1出))
GPIOSetDir( PORT0, 1, 0 );
GPIOSetValue() 一個是設(shè)置端口方向,一個是設(shè)置輸出的值,直接調(diào)用就可以了。
如果在片內(nèi)RAM當(dāng)中運(yùn)行代碼并且應(yīng)用程序需要調(diào)用中斷,那么必須將中斷向量重新映射到Flash地址0x0。這樣做是因為所有的異常向量都位于地址0x0及以上。通過將寄存器MEMMAP(位于系統(tǒng)控制模塊當(dāng)中)配置為用戶RAM模式來實現(xiàn)這一點。
#ifdef __DEBUG_RAM
LPC_SYSCON->SYSMEMREMAP = 0x1;
#else
#ifdef __DEBUG_FLASH
LPC_SYSCON->SYSMEMREMAP = 0x2;
#endif
#endif
ARM 微控制器有一個顯著的特點,就是都可以把時鐘頻率倍頻到很高,具體到多高,每個系列的微控制器都有一個指標(biāo),我們現(xiàn)在要學(xué)的Cortex-M0內(nèi)核處理器 LPC1114最高能到50MHz,當(dāng)然,其它的ARM內(nèi)核微處理器可以倍頻到更高,現(xiàn)在好多手機(jī)都采用了ARM內(nèi)核處理器,比如賣的很火的諾基亞 5233就是采用了ARM11處理器,ARM11的處理器的主頻為433MHz,比Cortex-M0的50MHz高多了吧!所以Cortex-M0處理器被ARM稱為入門級的內(nèi)核!
要實現(xiàn)對系統(tǒng)時鐘的配置,時鐘配置圖是必須要看懂的!因為它比文字更具有參考價值,看上這張圖配置時鐘,絕對不會出現(xiàn)漏洞!(我建議你把這張圖打印出來貼到你的墻上,我就是這么做的,你看著辦吧?。┙酉聛?,我將一步一步引領(lǐng)你徹底看懂這張“時鐘配置圖”。
注意了,要開始講圖了!(這張圖就是數(shù)據(jù)手冊說的時鐘產(chǎn)生單元:CGU(Clock generationunit))
LPC1114 內(nèi)部含有3個時鐘振蕩器:系統(tǒng)振蕩器,IRC振蕩器,看門狗振蕩器。系統(tǒng)振蕩器就是需要配合外部晶振工作的振蕩器(這是任何一款單片機(jī)都有的);IRC振蕩器就是內(nèi)部RC振蕩器,就是我在上面“總覽LPC1114”中提到的那個LPC1114一上電就默認(rèn)選擇的12MHz時鐘振蕩器,它的精度沒有配合外部晶振的系統(tǒng)振蕩器高;看門狗振蕩器就是給看門狗提供的時鐘振蕩器!這么說大家明白了吧,在接下來的敘述里面,一提到系統(tǒng)振蕩器就是指利用外部晶振的時鐘振蕩器,IRC振蕩器就是指LPC1114的內(nèi)部時鐘振蕩器,可不要搞混了哦!
我們先從圖的中心點看起,找到“主時鐘”三個字,看“主時鐘”的左面,有四條線到了“主時鐘”的框上,這四條線就是“主時鐘”的來源,它們分別是:IRC振蕩器,看門狗振蕩器,倍頻之前的時鐘(sys_pllclkin)和倍頻之后的時鐘(sys_pllclkout)。也就是主時鐘可以在這四個時鐘源當(dāng)中選擇一個做為主時鐘!通過操縱(人家專業(yè)名詞不叫“操縱”,叫“訪問”)“主時鐘源選擇寄存器(MAINCLKSEL)”實現(xiàn)。這個32位的主時鐘源選擇寄存器MAINCLKSEL只用到了兩位(誰讓兩位就可以表示四種狀態(tài)呢!),剩下的全都是保留位,如下:
位(bit) 符號 值 描述 復(fù)位值
1:0 SEL 00 選擇IRC振蕩器 00
01 選擇輸入到PLL之前的時鐘
10 選擇看門狗振蕩器
11 選擇PLL之后的時鐘
31:2 - - 保留 0
看復(fù)位值,系統(tǒng)默認(rèn)情況下就是選擇IRC振蕩器作為系統(tǒng)的主時鐘的。我們?yōu)榱俗孡PC1114發(fā)揮出它最大的性能,就喜歡選擇PLL(PLL就是倍頻的意思)后的時鐘,在程序中這樣寫:
SYSCON->MAINCLKSEL = 0x00000003;//主時鐘源選擇PLL后的時鐘
接下來看圖上,找到“系統(tǒng)PLL”方框,看它左面倒梯形方框的左面,有三條線,這三條線就是可以做為倍頻時鐘源的時鐘源。這三個時鐘源分別是:IRC振蕩器,系統(tǒng)振蕩器,看門狗振蕩器。這不就是LPC1114的三個時鐘振蕩器么,原來它們都可以做為PLL的時鐘源!該選擇誰捏?這就要操縱“系統(tǒng)倍頻時鐘源選擇寄存器(SYSPLLCLKSEL)”了。這個32位的寄存器也是只用到了兩位:
(兩位就可以表示四種狀態(tài)了,三個狀態(tài)當(dāng)然是綽綽有余?。?/div>
位(bit) 符號 值 描述 復(fù)位值
1:0 SEL 00 選擇IRC振蕩器 00
01 選擇系統(tǒng)振蕩器
10 選擇看門狗振蕩器
11 保留
31:2 - - 保留 0
看復(fù)位值,系統(tǒng)默認(rèn)情況下就是選擇IRC振蕩器作為PLL輸入時鐘源的。既然我們外部安插了精確的12M晶振,就是想把它做為時鐘源的,選擇上面表格當(dāng)中的 01,就是選擇了外部12M晶振!(我在先前提到過,“系統(tǒng)振蕩器”就是代表外部的晶振,為了防止看的不仔細(xì)的朋友存在,我還是再說一遍吧?。?/div>
程序中這樣寫:
SYSCON->SYSPLLCLKSEL = 0x00000001;//PLL時鐘源選擇“系統(tǒng)振蕩器”
當(dāng)然,操作順序應(yīng)該是先選擇PLL的時鐘源,再選擇主時鐘源!
到現(xiàn)在,“主時鐘”左面的部分就看完了,接下來看“主時鐘”右面的!
右面部分從上往下看,首先呢,是“系統(tǒng)時鐘分頻器”方框,方框的右面橫線上寫著“系統(tǒng)時鐘”四個字。怎么樣!迷惑了吧!這里方框中所提到的“系統(tǒng)時鐘分頻器”其實就是“系統(tǒng)AHB時鐘分頻器(SYSAHBCLKDIV)”。這個寄存器的名字會把好多人迷惑的!因為這個分頻器可不僅僅給 AHB(LPC1114的AHB只有GPIO,關(guān)于什么是AHB,什么是APB,去百度搜一下吧!介紹需要兩頁紙哦!)提供時鐘的,它除了給AHB提供時鐘,還給內(nèi)核,存儲器以及APB提供時鐘。一定意義上說,它就是“系統(tǒng)時鐘分頻器”了,給這個寄存器寫0,LPC1114就不工作了;給這個寄存器寫 1,LPC1114的系統(tǒng)時鐘就是主時鐘除以1;寫2,LPC1114的系統(tǒng)時鐘就是主時鐘除以2,以此類推!假如把外部晶振倍頻了4倍作為主時鐘,主時鐘就是48MHz,對SYSAHBCLKDIV寫4,系統(tǒng)時鐘就是12MHz。這時候有人就會有疑問了:“神經(jīng)病??!既然都倍頻起來了,還要縮小”!其實這是因為有時候我們的電路板上的其它芯片不能夠在很快的頻率下工作,否則就會出錯,比如無線通信芯片NRF24L01的速率就不能超過10MHz,所以某些時候,需要多分頻了。規(guī)定最多可以分頻255,所以你就可以想到,這個寄存器只用8位就可以了:
位(bit) 符號 值 描述 復(fù)位值
7:0 DIV 00000000 關(guān)閉系統(tǒng)時鐘 00000001
00000001 用1除
00000010 用2除
......
......
11111111 用255除
31:8 - - 保留 0
一般情況下,我們寫1,程序如下:(這條語句可以不用寫,因為默認(rèn)值就是1)
SYSCON->SYSAHBCLKDIV = 0x01;//AHB時鐘分頻值為1
再往下看圖,數(shù)一下,有6個分頻器,這6個分頻器是:SSP0分頻器,SSP1分頻器,UART分頻器,SysTick分頻器,看門狗分頻器和CLKOUT引腳分頻器。
這些分頻器寄存器和SYSAHBCLKDIV是一樣的,都是用了8位,都是可以最多分頻255,我這里就不把表格畫出來了,唯一不同的是,這6個分頻器寄存器的復(fù)位值為0,而不是1。也就是說,在默認(rèn)情況下,這些外設(shè)都是不工作的(沒有時鐘怎么工作?。┻@完全是為了節(jié)能做貢獻(xiàn),不用就不讓它浪費電,用的時候再開!
看最后兩個分頻器!通過上面的介紹,你現(xiàn)在也可以看懂了,圖上說:看門狗的時鐘源可以有3個來源,不僅僅只有“看門狗振蕩器”可以給它提供,還可以用主時鐘或是IRC振蕩器!多么靈活的LPC1114呀!
LPC1114上的第四引腳是:PIO0_1/CLKOUT/CT32B0MAT2。這個腳可以當(dāng)做P0.1腳,CLKOUT引腳和32位定時器的輸出腳。CLKOUT引腳,顧名思義,它是用來輸出時鐘的,輸出時鐘有什么用?
用處1:給別的需要時鐘的芯片提供時鐘;
用處2:用示波器觀察此引腳上的頻率可以判斷你寫的時鐘配置程序是否正確。
這個引腳在默認(rèn)的情況下是P0.1腳,假如你要看看到底有沒有把外部的12MHz晶振倍頻到48MHz,你可以把這只腳配置為CLKOUT引腳,用示波器觀察觀察!
由圖中可知,它可以選擇IRC振蕩器,系統(tǒng)振蕩器,看門狗振蕩器以及主時鐘源作為時鐘源,選擇誰作為它的時鐘源,你就可以看到誰的頻率到底是多少了。
(在下面會給出實現(xiàn)的程序,不要急哦?。┪以?jīng)用這個腳觀察了一下IRC振蕩器的頻率,值在12.01MHz和12.00MHz之間來回跳!后來又看了一下外部晶振的頻率,穩(wěn)穩(wěn)的顯示12.00MHz。
到現(xiàn)在,這張圖就看完了,你也應(yīng)該看懂了!
除了上面提到的“選擇寄存器”,還需要有“使能寄存器”的配合才能使選擇的時鐘源起作用。下面是一個典型的時鐘配置函數(shù):

上一頁 1 2 下一頁

關(guān)鍵詞: 32位單片機(jī)LPC11C1

評論


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

關(guān)閉