生活随笔
收集整理的這篇文章主要介紹了
(转)Cortex-M3 (NXP LPC1788)之GPIO
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?經(jīng)過前一篇的分析,現(xiàn)在可以進入C環(huán)境進行各個模塊的學(xué)習(xí)。首先進行簡單的GPIO控制LED燈的操作,開發(fā)板通過GPIO1.18控制LED燈,電路如下圖:
為了對LPC1788的內(nèi)部結(jié)構(gòu)有更好的理解和學(xué)習(xí),雖然NXP給出了封裝好的庫函數(shù),但是我將自己編寫代碼便于直接對內(nèi)部原理進行分析。代碼如下
?
[cpp] #define rFIO1DIR??? (*(volatile unsigned*)0x20098020) //高速GPIO 方向控制寄存器,用于配置管腳的輸入或輸出,默認為輸入? #define rFIO1MASK?? (*(volatile unsigned*)0x20098030) //高速GPIO 屏蔽寄存器,被屏蔽的位將不能進行GPIO的控制操作,默認無效? #define rFIO1PIN??? (*(volatile unsigned*)0x20098034) //高速GPIO 管腳值寄存器,可以操作未被FIOXMASK屏蔽的GPIO端口? #define rFIO1SET??? (*(volatile unsigned*)0x20098038) //高速GPIO 管腳置位寄存器,置一操作使相應(yīng)位輸出高電平? #define rFIO1CLR??? (*(volatile unsigned*)0x2009803c) //高速GPIO 管腳清楚寄存器,置一操作使相應(yīng)位輸出低電平? ? void Delay(int);? int main(void)? {? ??? rFIO1DIR |= (1<<18);? ??? while(1)? ??? {? ??????? rFIO1SET |= (1<<18);? ??????? Delay(500000);? ??????? rFIO1CLR |= (1<<18);? ??????? Delay(500000);? ??? }? ????????????? }? ? void Delay(int i)? {? ??? int k;? ??? for(k=0; k<i; k++);? }? ? ? void SystemInit (void)? {? ????? }? #define rFIO1DIR (*(volatile unsigned*)0x20098020) //高速GPIO 方向控制寄存器,用于配置管腳的輸入或輸出,默認為輸入
#define rFIO1MASK (*(volatile unsigned*)0x20098030) //高速GPIO 屏蔽寄存器,被屏蔽的位將不能進行GPIO的控制操作,默認無效
#define rFIO1PIN (*(volatile unsigned*)0x20098034) //高速GPIO 管腳值寄存器,可以操作未被FIOXMASK屏蔽的GPIO端口
#define rFIO1SET (*(volatile unsigned*)0x20098038) //高速GPIO 管腳置位寄存器,置一操作使相應(yīng)位輸出高電平
#define rFIO1CLR (*(volatile unsigned*)0x2009803c) //高速GPIO 管腳清楚寄存器,置一操作使相應(yīng)位輸出低電平void Delay(int);
int main(void)
{rFIO1DIR |= (1<<18);//GPIO1.18 -> OUTPUTwhile(1){rFIO1SET |= (1<<18);//輸出高電平 可以用 rFIO1PIN |= (1<<18); Delay(500000);rFIO1CLR |= (1<<18);//輸出低電平 可以用 rFIO1PIN &= ~(1<<18);Delay(500000);}}void Delay(int i)
{int k;for(k=0; k<i; k++);
}void SystemInit (void)
{}
?
??????? 程序比較簡單,對于GPIO的操作我們可以使用輸出置位寄存器FIOXSET和輸出清零寄存器FIOXCLR進行操作,也可以直接使用GPIO管腳值寄存器FIOXPIN進行操作。程序最后寫了一個void SystemInit(void)空函數(shù),是因為在啟動程序startup_LPC177x_8x.S中 IMPORT? SystemInit 聲明了一個外部函數(shù),并且LDR???? R0, =SystemInit執(zhí)行該函數(shù)。如果不定義該函數(shù)編譯會報錯。 我們可以在該函數(shù)中進行LPC1788的時鐘初始化。我們的程序中沒有進行初始化,根據(jù)LPC1788的數(shù)據(jù)手冊,系統(tǒng)上電或任何復(fù)位,將使用內(nèi)部的IRC作為時鐘源。而后可以在軟件上進行切換,而該切換就可以在void SystemInit(void)中實現(xiàn)。
??????? 最后可以使用之前環(huán)境搭建中介紹的進行Debug調(diào)試或者下載程序。
總結(jié)
以上是生活随笔為你收集整理的(转)Cortex-M3 (NXP LPC1788)之GPIO的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。