電子工程網(wǎng)
標(biāo)題: NXP LPC1768寶馬開發(fā)板 第一章GPIO實(shí)驗(yàn) [打印本頁]
作者: 旺寶電子om 時(shí)間: 2015-1-15 15:23
標(biāo)題: NXP LPC1768寶馬開發(fā)板 第一章GPIO實(shí)驗(yàn)
第一章 NXP LPC1768—— GPIO
開發(fā)環(huán)境:集成開發(fā)環(huán)境μVision4 IDE版本4.60.0.0
主機(jī)系統(tǒng):Microsoft Windows XP
開發(fā)平臺:旺寶NXP LPC1768開發(fā)板
1.1 GPIO簡介
1.2 硬件描述
1.3 程序說明
1.4 實(shí)驗(yàn)現(xiàn)象
1、GPIO:GPIO(General Purpose I/O Ports)意思為通用輸入/輸出端口,通俗地說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀出引腳的狀態(tài)-是高電平或是低電平。GPIO 口是個(gè)比較重要的概念,用戶可以通過 GPIO 口和硬件進(jìn)行數(shù)據(jù)交互(如 UART),控制硬件工作(如 LED、蜂鳴器等),讀取硬件的工作狀態(tài)信號(如中斷信號)等。因此,GPIO 口的使用非常廣泛。
2、硬件描述:
想要控制LED,當(dāng)然是通過控制LPC1768 I/0的高低電平來實(shí)現(xiàn),在LPC1768上,I/O引腳可以被軟件設(shè)置成不同的功能,如輸入或輸出,所以被稱為GPIO (General-purpose I/O)。在本實(shí)驗(yàn)中,主要是用GPIO來控制開發(fā)板上的LED,實(shí)現(xiàn)跑馬燈的效果。注意要短接JP8。
3、程序說明:我們先來簡單了解一下系統(tǒng)時(shí)鐘分頻倍頻。假如我們要得到PLL0=400MHz的時(shí)鐘,計(jì)算公式如下:
FCCO=(2×M×FIN)/ N
PLL輸入和設(shè)定必須滿足下面的條件:
1) FIN的范圍:32KHz~50MHz;
2) FCCO的范圍:275MHz~550MHz。
可通過求解PLL等式來得到其它的PLL參數(shù):
M =(FCCO×N)/(2×FIN)
N =(2×M×FIN)/ FCCO
FIN=(FCCO×N)/(2×M)
這里FIN=12,FCCO=400。由此可計(jì)算M=100,N=6;PLL0CFG寄存器包含PLL0倍頻器和分頻器值,我們往這個(gè)寄存器寫值來實(shí)現(xiàn)分頻與倍頻
上面我們算得M=100,N=6,把他們分別減一,換算成16進(jìn)制
#define PLL0CFG_Val 0x00050063
接下來就可以配置我們的CPU時(shí)鐘了,PLL0輸出時(shí)鐘必須要經(jīng)過分頻才能
提供給CPU使用,PLL0輸出的分頻由CCLKCFG寄存器進(jìn)行控制。當(dāng)PLL0被旁路時(shí),可通過1分頻。當(dāng)PLL0正在運(yùn)行時(shí),輸出必須經(jīng)過分頻以使CPU時(shí)鐘頻率(CCLK)工作在限定的范圍內(nèi)。可使用一個(gè)8位分頻器進(jìn)行選擇,包括降低CPU的操作頻率來暫時(shí)節(jié)省功耗而無需關(guān)閉PLL0。
CCLK從PLL0輸出信號中得到,通過CCLKSEL+1分頻。當(dāng)CCLKSEL=1時(shí),CCLK的頻率是PLL0輸出頻率的一半;當(dāng)CCLKSEL=3時(shí),CCLK的頻率是PLL0輸出頻率的四分之一,如此類推。這里我們把它設(shè)置成
#define CCLKCFG_Val 0x00000007
即CCLK的頻率 = PLL0輸出頻率的八分之一 =50MHz
現(xiàn)在我們一步一步來點(diǎn)亮LED。
在端口配置的函數(shù)里面,有兩個(gè)重要寄存器,FIODIR和FIOPIN。
我們從這張表可以看到,要把某個(gè)端口方向設(shè)置成輸出,只需把FIODIR這個(gè)寄存器的某個(gè)位寫1即可。根據(jù)手冊說明,除了32位長和僅可以進(jìn)行字訪問的FIODIR寄存器外,每個(gè)高速GPIO口也可通過一些字節(jié)和半字訪問的寄存器來控制。這些額外的寄存器除了提供與FIODIR寄存器相同的功能外,還可以更容易、更高速地訪問物理端口引腳。比如LPC_GPIO2->FIODIR = 0x000000ff; 我們也可以寫成LPC_GPIO2->FIODIR0 = 0xff;
設(shè)置好方向之后,即可按我們自己的要求輸出高低電平來實(shí)現(xiàn)我們當(dāng)初設(shè)計(jì)的功能。
細(xì)心的你一定發(fā)現(xiàn)了,在void LED_config(void)這個(gè)函數(shù)里,有配置GPIO0的語句。奇怪啊!LED沒有接在GPIO0的IO口啊。通過計(jì)算我們可以知道這兩句配置的是P0.21這個(gè)IO口。打開我們的原理圖,可以看到P0.21接到了SN74ALVC164245的DIR這個(gè)端口,74ALVC164245是 雙電源供電,實(shí)現(xiàn)3.3V和5V電平轉(zhuǎn)換,寶馬1768的板子沒有用5V的IO,所以電源都接3v3,其中DIR控制傳輸方向,DIR高電平 A to B ;DIR低電平 B TO A
我們把DIR拉高,數(shù)據(jù)的傳輸方向是A to B,目的是防止數(shù)據(jù)被意外干擾。
4、實(shí)驗(yàn)現(xiàn)象:
把程序下載到板子上,程序運(yùn)行后,可以看到LED從左到右,然后從右到左流動(dòng),流到最左邊時(shí)LED全亮,最后全滅,以此循環(huán)。
例程附件
| 歡迎光臨 電子工程網(wǎng) (http://m.4huy16.com/) |
Powered by Discuz! X3.4 |